aboutsummaryrefslogtreecommitdiff
path: root/weed/command/volume.go
diff options
context:
space:
mode:
authorChris Lu <chrislusf@users.noreply.github.com>2021-04-26 21:54:09 -0700
committerGitHub <noreply@github.com>2021-04-26 21:54:09 -0700
commit400c8ef8d88eae27a1abbef3da0badd8ef1bab6d (patch)
tree621d6f4f432cefe75c455939e084193eb7462001 /weed/command/volume.go
parent86185262bb86e31f9a2f71e85d02df2502c7ad40 (diff)
parentcf552417a7a422d1313c53972fd1175684e758e0 (diff)
downloadseaweedfs-400c8ef8d88eae27a1abbef3da0badd8ef1bab6d.tar.xz
seaweedfs-400c8ef8d88eae27a1abbef3da0badd8ef1bab6d.zip
Merge pull request #2025 from bingoohuang/master
improvement for minFreeSpace argument
Diffstat (limited to 'weed/command/volume.go')
-rw-r--r--weed/command/volume.go28
1 files changed, 10 insertions, 18 deletions
diff --git a/weed/command/volume.go b/weed/command/volume.go
index 9df500178..139a3791e 100644
--- a/weed/command/volume.go
+++ b/weed/command/volume.go
@@ -57,7 +57,6 @@ type VolumeServerOptions struct {
compactionMBPerSecond *int
fileSizeLimitMB *int
concurrentUploadLimitMB *int
- minFreeSpacePercents []float32
pprof *bool
preStopSeconds *int
metricsHttpPort *int
@@ -105,7 +104,8 @@ var (
volumeFolders = cmdVolume.Flag.String("dir", os.TempDir(), "directories to store data files. dir[,dir]...")
maxVolumeCounts = cmdVolume.Flag.String("max", "8", "maximum numbers of volumes, count[,count]... If set to zero, the limit will be auto configured.")
volumeWhiteListOption = cmdVolume.Flag.String("whiteList", "", "comma separated Ip addresses having write permission. No limit if empty.")
- minFreeSpacePercent = cmdVolume.Flag.String("minFreeSpacePercent", "1", "minimum free disk space (default to 1%). Low disk space will mark all volumes as ReadOnly.")
+ minFreeSpacePercent = cmdVolume.Flag.String("minFreeSpacePercent", "1", "minimum free disk space (default to 1%). Low disk space will mark all volumes as ReadOnly (deprecated, use minFreeSpace instead).")
+ minFreeSpace = cmdVolume.Flag.String("minFreeSpace", "", "min free disk space (value<=100 as percentage like 1, other as human readable bytes, like 10GiB). Low disk space will mark all volumes as ReadOnly.")
)
func runVolume(cmd *Command, args []string) bool {
@@ -120,12 +120,13 @@ func runVolume(cmd *Command, args []string) bool {
go stats_collect.StartMetricsServer(*v.metricsHttpPort)
- v.startVolumeServer(*volumeFolders, *maxVolumeCounts, *volumeWhiteListOption, *minFreeSpacePercent)
+ minFreeSpaces := util.MustParseMinFreeSpace(*minFreeSpace, *minFreeSpacePercent)
+ v.startVolumeServer(*volumeFolders, *maxVolumeCounts, *volumeWhiteListOption, minFreeSpaces)
return true
}
-func (v VolumeServerOptions) startVolumeServer(volumeFolders, maxVolumeCounts, volumeWhiteListOption, minFreeSpacePercent string) {
+func (v VolumeServerOptions) startVolumeServer(volumeFolders, maxVolumeCounts, volumeWhiteListOption string, minFreeSpaces []util.MinFreeSpace) {
// Set multiple folders and each folder's max volume count limit'
v.folders = strings.Split(volumeFolders, ",")
@@ -153,22 +154,13 @@ func (v VolumeServerOptions) startVolumeServer(volumeFolders, maxVolumeCounts, v
glog.Fatalf("%d directories by -dir, but only %d max is set by -max", len(v.folders), len(v.folderMaxLimits))
}
- // set minFreeSpacePercent
- minFreeSpacePercentStrings := strings.Split(minFreeSpacePercent, ",")
- for _, freeString := range minFreeSpacePercentStrings {
- if value, e := strconv.ParseFloat(freeString, 32); e == nil {
- v.minFreeSpacePercents = append(v.minFreeSpacePercents, float32(value))
- } else {
- glog.Fatalf("The value specified in -minFreeSpacePercent not a valid value %s", freeString)
- }
- }
- if len(v.minFreeSpacePercents) == 1 && len(v.folders) > 1 {
+ if len(minFreeSpaces) == 1 && len(v.folders) > 1 {
for i := 0; i < len(v.folders)-1; i++ {
- v.minFreeSpacePercents = append(v.minFreeSpacePercents, v.minFreeSpacePercents[0])
+ minFreeSpaces = append(minFreeSpaces, minFreeSpaces[0])
}
}
- if len(v.folders) != len(v.minFreeSpacePercents) {
- glog.Fatalf("%d directories by -dir, but only %d minFreeSpacePercent is set by -minFreeSpacePercent", len(v.folders), len(v.minFreeSpacePercents))
+ if len(v.folders) != len(minFreeSpaces) {
+ glog.Fatalf("%d directories by -dir, but only %d minFreeSpacePercent is set by -minFreeSpacePercent", len(v.folders), len(minFreeSpaces))
}
// set disk types
@@ -231,7 +223,7 @@ func (v VolumeServerOptions) startVolumeServer(volumeFolders, maxVolumeCounts, v
volumeServer := weed_server.NewVolumeServer(volumeMux, publicVolumeMux,
*v.ip, *v.port, *v.publicUrl,
- v.folders, v.folderMaxLimits, v.minFreeSpacePercents, diskTypes,
+ v.folders, v.folderMaxLimits, minFreeSpaces, diskTypes,
*v.idxFolder,
volumeNeedleMapKind,
strings.Split(masters, ","), 5, *v.dataCenter, *v.rack,