code: func (plugin *glusterfsPlugin) getGidTable(className string, min int, max int) (*MinMaxAllocator, error) {
  	plugin.gidTableLock.Lock()
  	gidTable, ok := plugin.gidTable[className]
  	plugin.gidTableLock.Unlock()
  
  	if ok {
  		err := gidTable.SetRange(min, max)
  		if err != nil {
  			return nil, err
  		}
  
  		return gidTable, nil
  	}
  
  	// create a new table and fill it
  	newGidTable, err := NewMinMaxAllocator(0, absoluteGidMax)
  	if err != nil {
  		return nil, err
  	}
  
  	// collect gids with the full range
  	err = plugin.collectGids(className, newGidTable)
  	if err != nil {
  		return nil, err
  	}
  
  	// and only reduce the range afterwards
  	err = newGidTable.SetRange(min, max)
  	if err != nil {
  		return nil, err
  	}
  
  	// if in the meantime a table appeared, use it
  	plugin.gidTableLock.Lock()
  	defer plugin.gidTableLock.Unlock()
  
  	gidTable, ok = plugin.gidTable[className]
  	if ok {
  		err = gidTable.SetRange(min, max)
  		if err != nil {
  			return nil, err
  		}
  
  		return gidTable, nil
  	}
  
  	plugin.gidTable[className] = newGidTable
  
  	return newGidTable, nil
  }
docs: // Return the gid table for a storage class.
  // - If this is the first time, fill it with all the gids
  //   used in PVs of this storage class by traversing the PVs.
  // - Adapt the range of the table to the current range of the SC.