Browse Source

correcting free volume count, factor it during ec encoding to ensure enough disk space available

fix https://github.com/seaweedfs/seaweedfs/issues/6163
pull/6169/head
chrislu 2 months ago
parent
commit
6e388e29c9
  1. 22
      weed/shell/command_ec_encode.go
  2. 4
      weed/topology/disk.go

22
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 v.Collection == selectedCollection && v.ModifiedAtSecond+quietSeconds < nowUnixSeconds {
if float64(v.Size) > fullPercentage/100*float64(volumeSizeLimitMb)*1024*1024 { 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 return

4
weed/topology/disk.go

@ -66,7 +66,7 @@ func (d *DiskUsages) ToDiskInfo() map[string]*master_pb.DiskInfo {
m := &master_pb.DiskInfo{ m := &master_pb.DiskInfo{
VolumeCount: diskUsageCounts.volumeCount, VolumeCount: diskUsageCounts.volumeCount,
MaxVolumeCount: diskUsageCounts.maxVolumeCount, MaxVolumeCount: diskUsageCounts.maxVolumeCount,
FreeVolumeCount: diskUsageCounts.maxVolumeCount - diskUsageCounts.volumeCount,
FreeVolumeCount: diskUsageCounts.maxVolumeCount - (diskUsageCounts.volumeCount - diskUsageCounts.remoteVolumeCount) - (diskUsageCounts.ecShardCount+1)/erasure_coding.DataShardsCount,
ActiveVolumeCount: diskUsageCounts.activeVolumeCount, ActiveVolumeCount: diskUsageCounts.activeVolumeCount,
RemoteVolumeCount: diskUsageCounts.remoteVolumeCount, RemoteVolumeCount: diskUsageCounts.remoteVolumeCount,
} }
@ -250,7 +250,7 @@ func (d *Disk) ToDiskInfo() *master_pb.DiskInfo {
Type: string(d.Id()), Type: string(d.Id()),
VolumeCount: diskUsage.volumeCount, VolumeCount: diskUsage.volumeCount,
MaxVolumeCount: diskUsage.maxVolumeCount, MaxVolumeCount: diskUsage.maxVolumeCount,
FreeVolumeCount: diskUsage.maxVolumeCount - diskUsage.volumeCount,
FreeVolumeCount: diskUsage.maxVolumeCount - (diskUsage.volumeCount - diskUsage.remoteVolumeCount) - (diskUsage.ecShardCount+1)/erasure_coding.DataShardsCount,
ActiveVolumeCount: diskUsage.activeVolumeCount, ActiveVolumeCount: diskUsage.activeVolumeCount,
RemoteVolumeCount: diskUsage.remoteVolumeCount, RemoteVolumeCount: diskUsage.remoteVolumeCount,
} }

Loading…
Cancel
Save