diff options
| author | chrislu <chris.lu@gmail.com> | 2024-10-24 22:42:38 -0700 |
|---|---|---|
| committer | chrislu <chris.lu@gmail.com> | 2024-10-24 22:42:38 -0700 |
| commit | 6e388e29c9251ffd4559f5e3d441a96cd556f79a (patch) | |
| tree | 64f9a35b808356232eec36a1e7d8d9e8cd060389 | |
| parent | 8d6189bcc514b48b792deca65d4dd8efc3e0c3f9 (diff) | |
| download | seaweedfs-6e388e29c9251ffd4559f5e3d441a96cd556f79a.tar.xz seaweedfs-6e388e29c9251ffd4559f5e3d441a96cd556f79a.zip | |
correcting free volume count, factor it during ec encoding to ensure enough disk space available
fix https://github.com/seaweedfs/seaweedfs/issues/6163
| -rw-r--r-- | weed/shell/command_ec_encode.go | 22 | ||||
| -rw-r--r-- | weed/topology/disk.go | 4 |
2 files changed, 21 insertions, 5 deletions
diff --git a/weed/shell/command_ec_encode.go b/weed/shell/command_ec_encode.go index e41529174..d66bbdba9 100644 --- a/weed/shell/command_ec_encode.go +++ b/weed/shell/command_ec_encode.go @@ -315,15 +315,31 @@ func collectVolumeIdsForEcEncode(commandEnv *CommandEnv, selectedCollection stri } if v.Collection == selectedCollection && v.ModifiedAtSecond+quietSeconds < nowUnixSeconds { if float64(v.Size) > fullPercentage/100*float64(volumeSizeLimitMb)*1024*1024 { - vidMap[v.Id] = true + if good, found := vidMap[v.Id]; found { + if good { + if diskInfo.FreeVolumeCount < 1 { + glog.V(0).Infof("skip %d.%d on %s, no free disk", v.Id, v.Collection, dn.Id) + vidMap[v.Id] = false + } + } + } else { + if diskInfo.FreeVolumeCount < 1 { + glog.V(0).Infof("skip %d.%d on %s, no free disk", v.Id, v.Collection, dn.Id) + vidMap[v.Id] = false + } else { + vidMap[v.Id] = true + } + } } } } } }) - for vid := range vidMap { - vids = append(vids, needle.VolumeId(vid)) + for vid, good := range vidMap { + if good { + vids = append(vids, needle.VolumeId(vid)) + } } return diff --git a/weed/topology/disk.go b/weed/topology/disk.go index 6d789e34b..80a4aaa2d 100644 --- a/weed/topology/disk.go +++ b/weed/topology/disk.go @@ -66,7 +66,7 @@ func (d *DiskUsages) ToDiskInfo() map[string]*master_pb.DiskInfo { m := &master_pb.DiskInfo{ VolumeCount: diskUsageCounts.volumeCount, MaxVolumeCount: diskUsageCounts.maxVolumeCount, - FreeVolumeCount: diskUsageCounts.maxVolumeCount - diskUsageCounts.volumeCount, + FreeVolumeCount: diskUsageCounts.maxVolumeCount - (diskUsageCounts.volumeCount - diskUsageCounts.remoteVolumeCount) - (diskUsageCounts.ecShardCount+1)/erasure_coding.DataShardsCount, ActiveVolumeCount: diskUsageCounts.activeVolumeCount, RemoteVolumeCount: diskUsageCounts.remoteVolumeCount, } @@ -250,7 +250,7 @@ func (d *Disk) ToDiskInfo() *master_pb.DiskInfo { Type: string(d.Id()), VolumeCount: diskUsage.volumeCount, MaxVolumeCount: diskUsage.maxVolumeCount, - FreeVolumeCount: diskUsage.maxVolumeCount - diskUsage.volumeCount, + FreeVolumeCount: diskUsage.maxVolumeCount - (diskUsage.volumeCount - diskUsage.remoteVolumeCount) - (diskUsage.ecShardCount+1)/erasure_coding.DataShardsCount, ActiveVolumeCount: diskUsage.activeVolumeCount, RemoteVolumeCount: diskUsage.remoteVolumeCount, } |
