mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2025-08-24 21:05:03 +08:00
add locking to volume layout vacuum
This commit is contained in:
parent
46eb77f9bb
commit
201c24c110
@ -40,6 +40,10 @@ func (t *Topology) SetVolumeCapacityFull(volumeInfo storage.VolumeInfo) bool {
|
|||||||
if !vl.SetVolumeCapacityFull(volumeInfo.Id) {
|
if !vl.SetVolumeCapacityFull(volumeInfo.Id) {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
vl.accessLock.RLock()
|
||||||
|
defer vl.accessLock.RUnlock()
|
||||||
|
|
||||||
for _, dn := range vl.vid2location[volumeInfo.Id].list {
|
for _, dn := range vl.vid2location[volumeInfo.Id].list {
|
||||||
if !volumeInfo.ReadOnly {
|
if !volumeInfo.ReadOnly {
|
||||||
dn.UpAdjustActiveVolumeCountDelta(-1)
|
dn.UpAdjustActiveVolumeCountDelta(-1)
|
||||||
|
@ -122,7 +122,23 @@ func (t *Topology) Vacuum(garbageThreshold float64, preallocate int64) int {
|
|||||||
for _, vl := range c.storageType2VolumeLayout.Items() {
|
for _, vl := range c.storageType2VolumeLayout.Items() {
|
||||||
if vl != nil {
|
if vl != nil {
|
||||||
volumeLayout := vl.(*VolumeLayout)
|
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 {
|
for vid, locationlist := range volumeLayout.vid2location {
|
||||||
|
tmpMap[vid] = locationlist
|
||||||
|
}
|
||||||
|
volumeLayout.accessLock.RUnlock()
|
||||||
|
|
||||||
|
for vid, locationlist := range tmpMap {
|
||||||
|
|
||||||
volumeLayout.accessLock.RLock()
|
volumeLayout.accessLock.RLock()
|
||||||
isReadOnly, hasValue := volumeLayout.readonlyVolumes[vid]
|
isReadOnly, hasValue := volumeLayout.readonlyVolumes[vid]
|
||||||
@ -139,10 +155,6 @@ func (t *Topology) Vacuum(garbageThreshold float64, preallocate int64) int {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type VacuumVolumeResult struct {
|
type VacuumVolumeResult struct {
|
||||||
|
Loading…
Reference in New Issue
Block a user