aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitriy Pavlov <Dimonyga@gmail.com>2025-09-04 15:39:56 +0300
committerGitHub <noreply@github.com>2025-09-04 05:39:56 -0700
commitcd78e653e1fc11fdb4820abbd1c78cf88b7c5b3b (patch)
tree66febf07472cbc7912f25f5fd7f07672b309b0ac
parente030530aabe36bb01503cee1cc64b159d8819797 (diff)
downloadseaweedfs-cd78e653e1fc11fdb4820abbd1c78cf88b7c5b3b.tar.xz
seaweedfs-cd78e653e1fc11fdb4820abbd1c78cf88b7c5b3b.zip
add disable volume_growth flag (#7196)
-rw-r--r--weed/command/scaffold/master.toml1
-rw-r--r--weed/server/master_grpc_server_assign.go2
-rw-r--r--weed/server/master_grpc_server_volume.go4
-rw-r--r--weed/server/master_server.go4
-rw-r--r--weed/server/master_server_handlers.go2
5 files changed, 11 insertions, 2 deletions
diff --git a/weed/command/scaffold/master.toml b/weed/command/scaffold/master.toml
index c9086b0f7..d2843d540 100644
--- a/weed/command/scaffold/master.toml
+++ b/weed/command/scaffold/master.toml
@@ -50,6 +50,7 @@ copy_2 = 6 # create 2 x 6 = 12 actual volumes
copy_3 = 3 # create 3 x 3 = 9 actual volumes
copy_other = 1 # create n x 1 = n actual volumes
threshold = 0.9 # create threshold
+disable = false # disables volume growth if true
# configuration flags for replication
[master.replication]
diff --git a/weed/server/master_grpc_server_assign.go b/weed/server/master_grpc_server_assign.go
index 4b35b696e..c05a2cb7d 100644
--- a/weed/server/master_grpc_server_assign.go
+++ b/weed/server/master_grpc_server_assign.go
@@ -89,7 +89,7 @@ func (ms *MasterServer) Assign(ctx context.Context, req *master_pb.AssignRequest
for time.Now().Sub(startTime) < maxTimeout {
fid, count, dnList, shouldGrow, err := ms.Topo.PickForWrite(req.Count, option, vl)
- if shouldGrow && !vl.HasGrowRequest() {
+ if shouldGrow && !vl.HasGrowRequest() && !ms.option.VolumeGrowthDisabled {
if err != nil && ms.Topo.AvailableSpaceFor(option) <= 0 {
err = fmt.Errorf("%s and no free volumes left for %s", err.Error(), option.String())
}
diff --git a/weed/server/master_grpc_server_volume.go b/weed/server/master_grpc_server_volume.go
index 553644f5f..719cd4b74 100644
--- a/weed/server/master_grpc_server_volume.go
+++ b/weed/server/master_grpc_server_volume.go
@@ -28,6 +28,10 @@ const (
)
func (ms *MasterServer) DoAutomaticVolumeGrow(req *topology.VolumeGrowRequest) {
+ if ms.option.VolumeGrowthDisabled {
+ glog.V(1).Infof("automatic volume grow disabled")
+ return
+ }
glog.V(1).Infoln("starting automatic volume grow")
start := time.Now()
newVidLocations, err := ms.vg.AutomaticGrowByType(req.Option, ms.grpcDialOption, ms.Topo, req.Count)
diff --git a/weed/server/master_server.go b/weed/server/master_server.go
index 52d0f996b..bd83d5a96 100644
--- a/weed/server/master_server.go
+++ b/weed/server/master_server.go
@@ -57,6 +57,7 @@ type MasterOption struct {
IsFollower bool
TelemetryUrl string
TelemetryEnabled bool
+ VolumeGrowthDisabled bool
}
type MasterServer struct {
@@ -105,6 +106,9 @@ func NewMasterServer(r *mux.Router, option *MasterOption, peers map[string]pb.Se
v.SetDefault("master.volume_growth.copy_3", topology.VolumeGrowStrategy.Copy3Count)
v.SetDefault("master.volume_growth.copy_other", topology.VolumeGrowStrategy.CopyOtherCount)
v.SetDefault("master.volume_growth.threshold", topology.VolumeGrowStrategy.Threshold)
+ v.SetDefault("master.volume_growth.disable", false)
+ option.VolumeGrowthDisabled = v.GetBool("master.volume_growth.disable")
+
topology.VolumeGrowStrategy.Copy1Count = v.GetUint32("master.volume_growth.copy_1")
topology.VolumeGrowStrategy.Copy2Count = v.GetUint32("master.volume_growth.copy_2")
topology.VolumeGrowStrategy.Copy3Count = v.GetUint32("master.volume_growth.copy_3")
diff --git a/weed/server/master_server_handlers.go b/weed/server/master_server_handlers.go
index 851cd2943..c9e0a1ba2 100644
--- a/weed/server/master_server_handlers.go
+++ b/weed/server/master_server_handlers.go
@@ -142,7 +142,7 @@ func (ms *MasterServer) dirAssignHandler(w http.ResponseWriter, r *http.Request)
for time.Since(startTime) < maxTimeout {
fid, count, dnList, shouldGrow, err := ms.Topo.PickForWrite(requestedCount, option, vl)
- if shouldGrow && !vl.HasGrowRequest() {
+ if shouldGrow && !vl.HasGrowRequest() && !ms.option.VolumeGrowthDisabled {
glog.V(0).Infof("dirAssign volume growth %v from %v", option.String(), r.RemoteAddr)
if err != nil && ms.Topo.AvailableSpaceFor(option) <= 0 {
err = fmt.Errorf("%s and no free volumes left for %s", err.Error(), option.String())