From 55976ae04a225a4c440e6422891ba11d19df1bfd Mon Sep 17 00:00:00 2001 From: chrislu Date: Thu, 18 Apr 2024 09:09:45 -0700 Subject: [PATCH] avoid repeated calls to heavy-weighted viper --- weed/server/master_server.go | 7 +++++- weed/topology/volume_growth.go | 34 +++++++++++++++++++---------- weed/topology/volume_growth_test.go | 4 +--- weed/topology/volume_layout.go | 7 +++--- 4 files changed, 32 insertions(+), 20 deletions(-) diff --git a/weed/server/master_server.go b/weed/server/master_server.go index a2f3c7692..f89c9598f 100644 --- a/weed/server/master_server.go +++ b/weed/server/master_server.go @@ -97,6 +97,11 @@ func NewMasterServer(r *mux.Router, option *MasterOption, peers map[string]pb.Se v.SetDefault("master.volume_growth.copy_3", 3) v.SetDefault("master.volume_growth.copy_other", 1) v.SetDefault("master.volume_growth.threshold", 0.9) + topology.VolumeGrowStrategy.Copy1Count = v.GetInt("master.volume_growth.copy_1") + topology.VolumeGrowStrategy.Copy2Count = v.GetInt("master.volume_growth.copy_2") + topology.VolumeGrowStrategy.Copy3Count = v.GetInt("master.volume_growth.copy_3") + topology.VolumeGrowStrategy.CopyOtherCount = v.GetInt("master.volume_growth.copy_other") + topology.VolumeGrowStrategy.Threshold = v.GetFloat64("master.volume_growth.threshold") var preallocateSize int64 if option.VolumePreallocate { @@ -151,7 +156,7 @@ func NewMasterServer(r *mux.Router, option *MasterOption, peers map[string]pb.Se ms.Topo.StartRefreshWritableVolumes( ms.grpcDialOption, ms.option.GarbageThreshold, - v.GetFloat64("master.volume_growth.threshold"), + topology.VolumeGrowStrategy.Threshold, ms.preallocateSize, ) diff --git a/weed/topology/volume_growth.go b/weed/topology/volume_growth.go index cf5690cec..9885fc2d1 100644 --- a/weed/topology/volume_growth.go +++ b/weed/topology/volume_growth.go @@ -15,7 +15,6 @@ import ( "github.com/seaweedfs/seaweedfs/weed/storage/needle" "github.com/seaweedfs/seaweedfs/weed/storage/super_block" "github.com/seaweedfs/seaweedfs/weed/storage/types" - "github.com/seaweedfs/seaweedfs/weed/util" ) /* @@ -31,6 +30,24 @@ type VolumeGrowRequest struct { Count int } +type volumeGrowthStrategy struct { + Copy1Count int + Copy2Count int + Copy3Count int + CopyOtherCount int + Threshold float64 +} + +var ( + VolumeGrowStrategy = volumeGrowthStrategy{ + Copy1Count: 7, + Copy2Count: 6, + Copy3Count: 3, + CopyOtherCount: 1, + Threshold: 0.9, + } +) + type VolumeGrowOption struct { Collection string `json:"collection,omitempty"` ReplicaPlacement *super_block.ReplicaPlacement `json:"replication,omitempty"` @@ -52,11 +69,6 @@ func (o *VolumeGrowOption) String() string { return string(blob) } -func (o *VolumeGrowOption) Threshold() float64 { - v := util.GetViper() - return v.GetFloat64("master.volume_growth.threshold") -} - func NewDefaultVolumeGrowth() *VolumeGrowth { return &VolumeGrowth{} } @@ -64,16 +76,14 @@ func NewDefaultVolumeGrowth() *VolumeGrowth { // one replication type may need rp.GetCopyCount() actual volumes // given copyCount, how many logical volumes to create func (vg *VolumeGrowth) findVolumeCount(copyCount int) (count int) { - v := util.GetViper() switch copyCount { - case 1: - count = v.GetInt("master.volume_growth.copy_1") + case 1: count = VolumeGrowStrategy.Copy1Count case 2: - count = v.GetInt("master.volume_growth.copy_2") + count = VolumeGrowStrategy.Copy2Count case 3: - count = v.GetInt("master.volume_growth.copy_3") + count = VolumeGrowStrategy.Copy3Count default: - count = v.GetInt("master.volume_growth.copy_other") + count = VolumeGrowStrategy.CopyOtherCount } return } diff --git a/weed/topology/volume_growth_test.go b/weed/topology/volume_growth_test.go index 04c5e8aeb..1624ec32a 100644 --- a/weed/topology/volume_growth_test.go +++ b/weed/topology/volume_growth_test.go @@ -4,7 +4,6 @@ import ( "encoding/json" "fmt" "github.com/seaweedfs/seaweedfs/weed/storage/types" - "github.com/seaweedfs/seaweedfs/weed/util" "testing" "github.com/seaweedfs/seaweedfs/weed/sequence" @@ -420,8 +419,7 @@ func TestPickForWrite(t *testing.T) { Rack: "", DataNode: "", } - v := util.GetViper() - v.Set("master.volume_growth.threshold", 0.9) + VolumeGrowStrategy.Threshold = 0.9 for _, rpStr := range []string{"001", "010", "100"} { rp, _ := super_block.NewReplicaPlacementFromString(rpStr) vl := topo.GetVolumeLayout("test", rp, needle.EMPTY_TTL, types.HardDriveType) diff --git a/weed/topology/volume_layout.go b/weed/topology/volume_layout.go index 2296a0f92..4467b2dc8 100644 --- a/weed/topology/volume_layout.go +++ b/weed/topology/volume_layout.go @@ -303,7 +303,7 @@ func (vl *VolumeLayout) PickForWrite(count uint64, option *VolumeGrowOption) (vi // check whether picked file is close to full dn := locationList.Head() info, _ := dn.GetVolumesById(vid) - if float64(info.Size) > float64(vl.volumeSizeLimit)*option.Threshold() { + if float64(info.Size) > float64(vl.volumeSizeLimit)*VolumeGrowStrategy.Threshold { shouldGrow = true } return vid, count, locationList.Copy(), shouldGrow, nil @@ -334,7 +334,7 @@ func (vl *VolumeLayout) PickForWrite(count uint64, option *VolumeGrowOption) (vi vid, locationList = writableVolumeId, volumeLocationList.Copy() // check whether picked file is close to full info, _ := dn.GetVolumesById(writableVolumeId) - if float64(info.Size) > float64(vl.volumeSizeLimit)*option.Threshold() { + if float64(info.Size) > float64(vl.volumeSizeLimit)*VolumeGrowStrategy.Threshold { shouldGrow = true } counter = count @@ -370,7 +370,6 @@ func (vl *VolumeLayout) GetActiveVolumeCount(option *VolumeGrowOption) (total, a return len(vl.writables), len(vl.writables), len(vl.crowded) } total = len(vl.writables) - threshold := option.Threshold() for _, v := range vl.writables { for _, dn := range vl.vid2location[v].list { if dn.GetDataCenter().Id() == NodeId(option.DataCenter) { @@ -382,7 +381,7 @@ func (vl *VolumeLayout) GetActiveVolumeCount(option *VolumeGrowOption) (total, a } active++ info, _ := dn.GetVolumesById(v) - if float64(info.Size) > float64(vl.volumeSizeLimit)*threshold { + if float64(info.Size) > float64(vl.volumeSizeLimit)* VolumeGrowStrategy.Threshold{ crowded++ } }