aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--weed/server/master_server.go7
-rw-r--r--weed/topology/volume_growth.go34
-rw-r--r--weed/topology/volume_growth_test.go4
-rw-r--r--weed/topology/volume_layout.go7
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++
}
}