mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2024-11-24 02:59:13 +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:
parent
8d6189bcc5
commit
6e388e29c9
@ -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
|
||||
|
@ -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,
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user