From 64ac4a4e1b841994a1f4aad63d2da2a79fc18403 Mon Sep 17 00:00:00 2001 From: Ryan Leung Date: Thu, 20 Jun 2019 15:48:02 +0800 Subject: [PATCH] adjust store balance rate meaning Signed-off-by: Ryan Leung --- conf/config.toml | 4 ++-- server/api/store.go | 5 +++-- server/api/trend_test.go | 4 ++-- server/config.go | 6 +++--- server/coordinator_test.go | 1 + server/schedule/mockcluster.go | 2 +- server/schedule/operator_controller.go | 4 +++- tests/cmd/pdctl_test.go | 2 +- 8 files changed, 16 insertions(+), 12 deletions(-) diff --git a/conf/config.toml b/conf/config.toml index b439fefa991..fbc9021a930 100644 --- a/conf/config.toml +++ b/conf/config.toml @@ -64,8 +64,8 @@ max-snapshot-count = 3 max-pending-peer-count = 16 max-store-down-time = "30m" leader-schedule-limit = 4 -region-schedule-limit = 1024 -replica-schedule-limit = 1024 +region-schedule-limit = 64 +replica-schedule-limit = 64 merge-schedule-limit = 8 tolerant-size-ratio = 0 # Enable two-way merge, set it to true may help improving merge speed. diff --git a/server/api/store.go b/server/api/store.go index e99b33b75eb..dc877851612 100644 --- a/server/api/store.go +++ b/server/api/store.go @@ -26,6 +26,7 @@ import ( "github.com/pingcap/pd/pkg/typeutil" "github.com/pingcap/pd/server" "github.com/pingcap/pd/server/core" + "github.com/pingcap/pd/server/schedule" "github.com/pkg/errors" "github.com/unrolled/render" ) @@ -328,7 +329,7 @@ func (h *storeHandler) SetLimit(w http.ResponseWriter, r *http.Request) { return } - if err := h.SetStoreLimit(storeID, rate); err != nil { + if err := h.SetStoreLimit(storeID, rate/schedule.StoreBalanceBaseTime); err != nil { h.rd.JSON(w, http.StatusInternalServerError, err.Error()) return } @@ -381,7 +382,7 @@ func (h *storesHandler) SetAllLimit(w http.ResponseWriter, r *http.Request) { return } - if err := h.SetAllStoresLimit(rate); err != nil { + if err := h.SetAllStoresLimit(rate / schedule.StoreBalanceBaseTime); err != nil { h.rd.JSON(w, http.StatusInternalServerError, err.Error()) return } diff --git a/server/api/trend_test.go b/server/api/trend_test.go index 603e2b5acc7..3084981b295 100644 --- a/server/api/trend_test.go +++ b/server/api/trend_test.go @@ -29,7 +29,7 @@ var _ = Suite(&testTrendSuite{}) type testTrendSuite struct{} func (s *testTrendSuite) TestTrend(c *C) { - svr, cleanup := mustNewServer(c) + svr, cleanup := mustNewServer(c, func(cfg *server.Config) { cfg.Schedule.StoreBalanceRate = 60 }) defer cleanup() mustWaitLeader(c, []*server.Server{svr}) @@ -49,7 +49,7 @@ func (s *testTrendSuite) TestTrend(c *C) { // Create 3 operators that transfers leader, moves follower, moves leader. c.Assert(svr.GetHandler().AddTransferLeaderOperator(4, 2), IsNil) c.Assert(svr.GetHandler().AddTransferPeerOperator(5, 2, 3), IsNil) - time.Sleep(2 * time.Second) + time.Sleep(1 * time.Second) c.Assert(svr.GetHandler().AddTransferPeerOperator(6, 1, 3), IsNil) // Complete the operators. diff --git a/server/config.go b/server/config.go index 75eb5ebb95a..92f38be176b 100644 --- a/server/config.go +++ b/server/config.go @@ -568,11 +568,11 @@ const ( defaultPatrolRegionInterval = 100 * time.Millisecond defaultMaxStoreDownTime = 30 * time.Minute defaultLeaderScheduleLimit = 8 - defaultRegionScheduleLimit = 1024 - defaultReplicaScheduleLimit = 1024 + defaultRegionScheduleLimit = 64 + defaultReplicaScheduleLimit = 64 defaultMergeScheduleLimit = 8 defaultHotRegionScheduleLimit = 2 - defaultStoreBalanceRate = 1 + defaultStoreBalanceRate = 15 defaultTolerantSizeRatio = 0 defaultLowSpaceRatio = 0.8 defaultHighSpaceRatio = 0.6 diff --git a/server/coordinator_test.go b/server/coordinator_test.go index ca9587e3632..73fb83be7fc 100644 --- a/server/coordinator_test.go +++ b/server/coordinator_test.go @@ -38,6 +38,7 @@ func newTestOperator(regionID uint64, regionEpoch *metapb.RegionEpoch, kind sche func newTestScheduleConfig() (*ScheduleConfig, *scheduleOption, error) { cfg := NewConfig() cfg.Schedule.TolerantSizeRatio = 5 + cfg.Schedule.StoreBalanceRate = 60 if err := cfg.Adjust(nil); err != nil { return nil, nil, err } diff --git a/server/schedule/mockcluster.go b/server/schedule/mockcluster.go index e9b1258e0b9..2d91a119320 100644 --- a/server/schedule/mockcluster.go +++ b/server/schedule/mockcluster.go @@ -534,7 +534,7 @@ const ( defaultReplicaScheduleLimit = 8 defaultMergeScheduleLimit = 8 defaultHotRegionScheduleLimit = 2 - defaultStoreBalanceRate = 1 + defaultStoreBalanceRate = 60 defaultTolerantSizeRatio = 2.5 defaultLowSpaceRatio = 0.8 defaultHighSpaceRatio = 0.6 diff --git a/server/schedule/operator_controller.go b/server/schedule/operator_controller.go index 1ccfb020797..c43f71240e0 100644 --- a/server/schedule/operator_controller.go +++ b/server/schedule/operator_controller.go @@ -44,6 +44,8 @@ var ( fastNotifyInterval = 2 * time.Second // PushOperatorTickInterval is the interval try to push the operator. PushOperatorTickInterval = 500 * time.Millisecond + // StoreBalanceBaseTime represents the base time of balance rate. + StoreBalanceBaseTime float64 = 60 ) // HeartbeatStreams is an interface of async region heartbeat. @@ -660,7 +662,7 @@ func (oc *OperatorController) newStoreLimit(storeID uint64, rate float64) { // getOrCreateStoreLimit is used to get or create the limit of a store. func (oc *OperatorController) getOrCreateStoreLimit(storeID uint64) *ratelimit.Bucket { if oc.storesLimit[storeID] == nil { - rate := oc.cluster.GetStoreBalanceRate() + rate := oc.cluster.GetStoreBalanceRate() / StoreBalanceBaseTime oc.newStoreLimit(storeID, rate) oc.cluster.AttachOverloadStatus(storeID, func() bool { oc.RLock() diff --git a/tests/cmd/pdctl_test.go b/tests/cmd/pdctl_test.go index 77cd208959f..6db54fb9de1 100644 --- a/tests/cmd/pdctl_test.go +++ b/tests/cmd/pdctl_test.go @@ -911,7 +911,7 @@ func (s *cmdTestSuite) TestOperator(c *C) { cluster, err := tests.NewTestCluster(3, func(conf *server.Config) { conf.Replication.MaxReplicas = 2 }, func(conf *server.Config) { conf.Schedule.MaxStoreDownTime.Duration = time.Since(t) }, - func(conf *server.Config) { conf.Schedule.StoreBalanceRate = 4 }, + func(conf *server.Config) { conf.Schedule.StoreBalanceRate = 240 }, ) c.Assert(err, IsNil) err = cluster.RunInitialServers()