diff options
| author | chrislu <chris.lu@gmail.com> | 2023-03-19 18:30:13 -0700 |
|---|---|---|
| committer | chrislu <chris.lu@gmail.com> | 2023-03-19 18:30:13 -0700 |
| commit | 784daea1fa99d2e626e39824563b957703f98e70 (patch) | |
| tree | 38266e97bfbc8e4ae052b5dcb20daacf5ef4d736 /weed/topology/volume_layout.go | |
| parent | 264be0d2d4e61543902e79c0b092103400c283f7 (diff) | |
| download | seaweedfs-784daea1fa99d2e626e39824563b957703f98e70.tar.xz seaweedfs-784daea1fa99d2e626e39824563b957703f98e70.zip | |
fix volume not found if marked as read only
fix https://github.com/seaweedfs/seaweedfs/issues/4088
Diffstat (limited to 'weed/topology/volume_layout.go')
| -rw-r--r-- | weed/topology/volume_layout.go | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/weed/topology/volume_layout.go b/weed/topology/volume_layout.go index 377122cae..d1bc28ef8 100644 --- a/weed/topology/volume_layout.go +++ b/weed/topology/volume_layout.go @@ -395,6 +395,31 @@ func (vl *VolumeLayout) setVolumeWritable(vid needle.VolumeId) bool { return true } +func (vl *VolumeLayout) SetVolumeReadOnly(dn *DataNode, vid needle.VolumeId) bool { + vl.accessLock.Lock() + defer vl.accessLock.Unlock() + + if _, ok := vl.vid2location[vid]; ok { + vl.readonlyVolumes.Add(vid, dn) + return vl.removeFromWritable(vid) + } + return true +} + +func (vl *VolumeLayout) SetVolumeWritable(dn *DataNode, vid needle.VolumeId) bool { + vl.accessLock.Lock() + defer vl.accessLock.Unlock() + + if _, ok := vl.vid2location[vid]; ok { + vl.readonlyVolumes.Remove(vid, dn) + } + + if vl.enoughCopies(vid) { + return vl.setVolumeWritable(vid) + } + return false +} + func (vl *VolumeLayout) SetVolumeUnavailable(dn *DataNode, vid needle.VolumeId) bool { vl.accessLock.Lock() defer vl.accessLock.Unlock() |
