mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2025-09-21 08:17:57 +08:00
correcting free volume count, factor it during ec encoding to ensure enough disk space available
fix https://github.com/seaweedfs/seaweedfs/issues/6163
This commit is contained in:
@@ -315,16 +315,32 @@ 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 {
|
||||||
|
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
|
vidMap[v.Id] = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
for vid := range vidMap {
|
for vid, good := range vidMap {
|
||||||
|
if good {
|
||||||
vids = append(vids, needle.VolumeId(vid))
|
vids = append(vids, needle.VolumeId(vid))
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@@ -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,
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user