From 2591987511bba43cba175012a9d4bf2180fc78bd Mon Sep 17 00:00:00 2001 From: tomato <38561029+qidi1@users.noreply.github.com> Date: Fri, 3 Sep 2021 17:48:58 +0800 Subject: [PATCH] config: add hot region history configurations (#4019) * config:add hot_regions_write_interval&hot_regions_remian_days in to confg Signed-off-by: qidi1 <1083369179@qq.com> * change config part Signed-off-by: qidi1 <1083369179@qq.com> * config:merge from remote Signed-off-by: qidi1 <1083369179@qq.com> * config:remove old code Signed-off-by: qidi1 <1083369179@qq.com> * config:change discprtion Signed-off-by: qidi1 <1083369179@qq.com> * config:change default Signed-off-by: qidi1 <1083369179@qq.com> Co-authored-by: Ti Chi Robot --- conf/config.toml | 4 ++++ server/config/config.go | 16 ++++++++++++++++ server/config/config_test.go | 15 +++++++++++++++ 3 files changed, 35 insertions(+) diff --git a/conf/config.toml b/conf/config.toml index 5abde1ae861..9cf246eb5a2 100644 --- a/conf/config.toml +++ b/conf/config.toml @@ -116,6 +116,10 @@ ## When PD fails to receive the heartbeat from a store after the specified period of time, ## it adds replicas at other nodes. # max-store-down-time = "30m" +## Controls the time interval between write hot regions info into leveldb +# hot-regions-write-interval= "10m" +## The day of hot regions data to be reserved. 0 means close. +# hot-regions-reserved-days= "7" ## The number of Leader scheduling tasks performed at the same time. # leader-schedule-limit = 4 ## The number of Region scheduling tasks performed at the same time. diff --git a/server/config/config.go b/server/config/config.go index 15aa3ea10d0..9f9d1940745 100644 --- a/server/config/config.go +++ b/server/config/config.go @@ -737,6 +737,12 @@ type ScheduleConfig struct { // is overwritten, the value is fixed until it is deleted. // Default: manual StoreLimitMode string `toml:"store-limit-mode" json:"store-limit-mode"` + + // Controls the time interval between write hot regions info into leveldb. + HotRegionsWriteInterval typeutil.Duration `toml:"hot-regions-write-interval" json:"hot-regions-write-interval"` + + // The day of hot regions data to be reserved. 0 means close. + HotRegionsResevervedDays int64 `toml:"hot-regions-reserved-days" json:"hot-regions-reserved-days"` } // Clone returns a cloned scheduling configuration. @@ -782,6 +788,8 @@ const ( defaultStoreLimitMode = "manual" defaultEnableJointConsensus = true defaultEnableCrossTableMerge = true + defaultHotRegionsWriteInterval = 10 * time.Minute + defaultHotRegionsResevervedDays = 7 ) func (c *ScheduleConfig) adjust(meta *configMetaData, reloading bool) error { @@ -863,6 +871,14 @@ func (c *ScheduleConfig) adjust(meta *configMetaData, reloading bool) error { c.StoreLimit = make(map[uint64]StoreLimitConfig) } + if !meta.IsDefined("hot-regions-write-interval") { + adjustDuration(&c.HotRegionsWriteInterval, defaultHotRegionsWriteInterval) + } + + if !meta.IsDefined("hot-regions-reserved-days") { + adjustInt64(&c.HotRegionsResevervedDays, defaultHotRegionsResevervedDays) + } + return c.Validate() } diff --git a/server/config/config_test.go b/server/config/config_test.go index 50c70c1d1e9..615c165094d 100644 --- a/server/config/config_test.go +++ b/server/config/config_test.go @@ -460,6 +460,21 @@ wait-store-timeout = "120s" c.Assert(cfg.ReplicationMode.ReplicationMode, Equals, "majority") } +func (s *testConfigSuite) TestHotRegionConfig(c *C) { + cfgData := ` +[schedule] +hot-regions-reserved-days= 30 +hot-regions-write-interval= "30m" +` + cfg := NewConfig() + meta, err := toml.Decode(cfgData, &cfg) + c.Assert(err, IsNil) + err = cfg.Adjust(&meta, false) + c.Assert(err, IsNil) + c.Assert(cfg.Schedule.HotRegionsWriteInterval.Duration, Equals, time.Minute*30) + c.Assert(cfg.Schedule.HotRegionsResevervedDays, Equals, int64(30)) +} + func (s *testConfigSuite) TestConfigClone(c *C) { cfg := &Config{} cfg.Adjust(nil, false)