From cd78e653e1fc11fdb4820abbd1c78cf88b7c5b3b Mon Sep 17 00:00:00 2001 From: Dmitriy Pavlov Date: Thu, 4 Sep 2025 15:39:56 +0300 Subject: [PATCH] add disable volume_growth flag (#7196) --- weed/command/scaffold/master.toml | 1 + weed/server/master_grpc_server_assign.go | 2 +- weed/server/master_grpc_server_volume.go | 4 ++++ weed/server/master_server.go | 4 ++++ weed/server/master_server_handlers.go | 2 +- 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())