mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2024-01-19 02:48:24 +00:00
skip only readonly volumes
fix https://github.com/chrislusf/seaweedfs/issues/405
This commit is contained in:
parent
4ce6586710
commit
b3513d3167
|
@ -86,14 +86,16 @@ func (t *Topology) Vacuum(garbageThreshold string) 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)
|
||||||
writableSet := make(map[storage.VolumeId]bool)
|
|
||||||
for _, id := range volumeLayout.writables {
|
|
||||||
writableSet[id] = true
|
|
||||||
}
|
|
||||||
for vid, locationlist := range volumeLayout.vid2location {
|
for vid, locationlist := range volumeLayout.vid2location {
|
||||||
if _, isWritable := writableSet[vid]; !isWritable {
|
|
||||||
|
vl.accessLock.RLock()
|
||||||
|
isReadOnly, hasValue := volumeLayout.readonlyVolumes[vid]
|
||||||
|
vl.accessLock.RUnlock()
|
||||||
|
|
||||||
|
if hasValue && isReadOnly {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
glog.V(0).Infof("check vacuum on collection:%s volume:%d", c.Name, vid)
|
glog.V(0).Infof("check vacuum on collection:%s volume:%d", c.Name, vid)
|
||||||
if batchVacuumVolumeCheck(volumeLayout, vid, locationlist, garbageThreshold) {
|
if batchVacuumVolumeCheck(volumeLayout, vid, locationlist, garbageThreshold) {
|
||||||
if batchVacuumVolumeCompact(volumeLayout, vid, locationlist) {
|
if batchVacuumVolumeCompact(volumeLayout, vid, locationlist) {
|
||||||
|
|
|
@ -16,6 +16,7 @@ type VolumeLayout struct {
|
||||||
ttl *storage.TTL
|
ttl *storage.TTL
|
||||||
vid2location map[storage.VolumeId]*VolumeLocationList
|
vid2location map[storage.VolumeId]*VolumeLocationList
|
||||||
writables []storage.VolumeId // transient array of writable volume id
|
writables []storage.VolumeId // transient array of writable volume id
|
||||||
|
readonlyVolumes map[storage.VolumeId]bool // transient set of readonly volumes
|
||||||
oversizedVolumes map[storage.VolumeId]bool // set of oversized volumes
|
oversizedVolumes map[storage.VolumeId]bool // set of oversized volumes
|
||||||
volumeSizeLimit uint64
|
volumeSizeLimit uint64
|
||||||
accessLock sync.RWMutex
|
accessLock sync.RWMutex
|
||||||
|
@ -27,6 +28,7 @@ func NewVolumeLayout(rp *storage.ReplicaPlacement, ttl *storage.TTL, volumeSizeL
|
||||||
ttl: ttl,
|
ttl: ttl,
|
||||||
vid2location: make(map[storage.VolumeId]*VolumeLocationList),
|
vid2location: make(map[storage.VolumeId]*VolumeLocationList),
|
||||||
writables: *new([]storage.VolumeId),
|
writables: *new([]storage.VolumeId),
|
||||||
|
readonlyVolumes: make(map[storage.VolumeId]bool),
|
||||||
oversizedVolumes: make(map[storage.VolumeId]bool),
|
oversizedVolumes: make(map[storage.VolumeId]bool),
|
||||||
volumeSizeLimit: volumeSizeLimit,
|
volumeSizeLimit: volumeSizeLimit,
|
||||||
}
|
}
|
||||||
|
@ -50,11 +52,15 @@ func (vl *VolumeLayout) RegisterVolume(v *storage.VolumeInfo, dn *DataNode) {
|
||||||
if v_info.ReadOnly {
|
if v_info.ReadOnly {
|
||||||
glog.V(3).Infof("vid %d removed from writable", v.Id)
|
glog.V(3).Infof("vid %d removed from writable", v.Id)
|
||||||
vl.removeFromWritable(v.Id)
|
vl.removeFromWritable(v.Id)
|
||||||
|
vl.readonlyVolumes[v.Id] = true
|
||||||
return
|
return
|
||||||
|
} else {
|
||||||
|
delete(vl.readonlyVolumes, v.Id)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
glog.V(3).Infof("vid %d removed from writable", v.Id)
|
glog.V(3).Infof("vid %d removed from writable", v.Id)
|
||||||
vl.removeFromWritable(v.Id)
|
vl.removeFromWritable(v.Id)
|
||||||
|
delete(vl.readonlyVolumes, v.Id)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue