aboutsummaryrefslogtreecommitdiff
path: root/weed/topology/data_node.go
diff options
context:
space:
mode:
authorEvgenii Kozlov <e.kozlov@searchinform.ru>2020-06-05 18:18:15 +0300
committerEvgenii Kozlov <e.kozlov@searchinform.ru>2020-06-05 18:18:15 +0300
commit0e0db70f5537d5325f6f4d1b0de4a301207e3620 (patch)
tree8103d793cd5e4a1ebced2d5a61b571c9b8c201b2 /weed/topology/data_node.go
parent393ab07c7c27d68021e7b3831be23a8a17d0479e (diff)
downloadseaweedfs-0e0db70f5537d5325f6f4d1b0de4a301207e3620.tar.xz
seaweedfs-0e0db70f5537d5325f6f4d1b0de4a301207e3620.zip
Set volumes ReadOnly if low free disk space
Diffstat (limited to 'weed/topology/data_node.go')
-rw-r--r--weed/topology/data_node.go10
1 files changed, 7 insertions, 3 deletions
diff --git a/weed/topology/data_node.go b/weed/topology/data_node.go
index 0dccdd0f2..d18dd6af0 100644
--- a/weed/topology/data_node.go
+++ b/weed/topology/data_node.go
@@ -41,7 +41,7 @@ func (dn *DataNode) String() string {
return fmt.Sprintf("Node:%s, volumes:%v, Ip:%s, Port:%d, PublicUrl:%s", dn.NodeImpl.String(), dn.volumes, dn.Ip, dn.Port, dn.PublicUrl)
}
-func (dn *DataNode) AddOrUpdateVolume(v storage.VolumeInfo) (isNew bool) {
+func (dn *DataNode) AddOrUpdateVolume(v storage.VolumeInfo) (isNew, isChangedRO bool) {
dn.Lock()
defer dn.Unlock()
if oldV, ok := dn.volumes[v.Id]; !ok {
@@ -64,12 +64,13 @@ func (dn *DataNode) AddOrUpdateVolume(v storage.VolumeInfo) (isNew bool) {
dn.UpAdjustRemoteVolumeCountDelta(-1)
}
}
+ isChangedRO = dn.volumes[v.Id].ReadOnly != v.ReadOnly
dn.volumes[v.Id] = v
}
return
}
-func (dn *DataNode) UpdateVolumes(actualVolumes []storage.VolumeInfo) (newVolumes, deletedVolumes []storage.VolumeInfo) {
+func (dn *DataNode) UpdateVolumes(actualVolumes []storage.VolumeInfo) (newVolumes, deletedVolumes, changeRO []storage.VolumeInfo) {
actualVolumeMap := make(map[needle.VolumeId]storage.VolumeInfo)
for _, v := range actualVolumes {
actualVolumeMap[v.Id] = v
@@ -91,10 +92,13 @@ func (dn *DataNode) UpdateVolumes(actualVolumes []storage.VolumeInfo) (newVolume
}
dn.Unlock()
for _, v := range actualVolumes {
- isNew := dn.AddOrUpdateVolume(v)
+ isNew, isChangedRO := dn.AddOrUpdateVolume(v)
if isNew {
newVolumes = append(newVolumes, v)
}
+ if isChangedRO {
+ changeRO = append(changeRO, v)
+ }
}
return
}