|
|
@ -122,7 +122,23 @@ func (t *Topology) Vacuum(garbageThreshold float64, preallocate int64) int { |
|
|
|
for _, vl := range c.storageType2VolumeLayout.Items() { |
|
|
|
if vl != nil { |
|
|
|
volumeLayout := vl.(*VolumeLayout) |
|
|
|
vacuumOneVolumeLayout(volumeLayout, c, garbageThreshold, preallocate) |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
return 0 |
|
|
|
} |
|
|
|
|
|
|
|
func vacuumOneVolumeLayout(volumeLayout *VolumeLayout, c *Collection, garbageThreshold float64, preallocate int64) { |
|
|
|
|
|
|
|
volumeLayout.accessLock.RLock() |
|
|
|
tmpMap := make(map[storage.VolumeId]*VolumeLocationList) |
|
|
|
for vid, locationlist := range volumeLayout.vid2location { |
|
|
|
tmpMap[vid] = locationlist |
|
|
|
} |
|
|
|
volumeLayout.accessLock.RUnlock() |
|
|
|
|
|
|
|
for vid, locationlist := range tmpMap { |
|
|
|
|
|
|
|
volumeLayout.accessLock.RLock() |
|
|
|
isReadOnly, hasValue := volumeLayout.readonlyVolumes[vid] |
|
|
@ -139,10 +155,6 @@ func (t *Topology) Vacuum(garbageThreshold float64, preallocate int64) int { |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
return 0 |
|
|
|
} |
|
|
|
|
|
|
|
type VacuumVolumeResult struct { |
|
|
|