diff options
Diffstat (limited to 'weed/topology/topology.go')
| -rw-r--r-- | weed/topology/topology.go | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/weed/topology/topology.go b/weed/topology/topology.go index 8e55d33a9..750c00ea2 100644 --- a/weed/topology/topology.go +++ b/weed/topology/topology.go @@ -5,6 +5,7 @@ import ( "errors" "fmt" "math/rand/v2" + "slices" "sync" "time" @@ -268,23 +269,29 @@ func (t *Topology) GetVolumeLayout(collectionName string, rp *super_block.Replic } func (t *Topology) ListCollections(includeNormalVolumes, includeEcVolumes bool) (ret []string) { + found := make(map[string]bool) - mapOfCollections := make(map[string]bool) - for _, c := range t.collectionMap.Items() { - mapOfCollections[c.(*Collection).Name] = true + if includeNormalVolumes { + t.collectionMap.RLock() + for _, c := range t.collectionMap.Items() { + found[c.(*Collection).Name] = true + } + t.collectionMap.RUnlock() } if includeEcVolumes { t.ecShardMapLock.RLock() for _, ecVolumeLocation := range t.ecShardMap { - mapOfCollections[ecVolumeLocation.Collection] = true + found[ecVolumeLocation.Collection] = true } t.ecShardMapLock.RUnlock() } - for k := range mapOfCollections { + for k := range found { ret = append(ret, k) } + slices.Sort(ret) + return ret } @@ -317,6 +324,7 @@ func (t *Topology) RegisterVolumeLayout(v storage.VolumeInfo, dn *DataNode) { vl.RegisterVolume(&v, dn) vl.EnsureCorrectWritables(&v) } + func (t *Topology) UnRegisterVolumeLayout(v storage.VolumeInfo, dn *DataNode) { glog.Infof("removing volume info: %+v from %v", v, dn.id) if v.ReplicaPlacement.GetCopyCount() > 1 { |
