From 5cc30c8e8b2c5cf8567aaa3168452d1ca044530e Mon Sep 17 00:00:00 2001 From: Cabinfever_B Date: Tue, 31 Oct 2023 01:03:07 +0800 Subject: [PATCH] fix 7288 Signed-off-by: Cabinfever_B --- server/config/config_test.go | 26 ++++++++++++++++++++++ server/config/service_middleware_config.go | 10 +++++++++ 2 files changed, 36 insertions(+) diff --git a/server/config/config_test.go b/server/config/config_test.go index 75e69c26d5c..07cdc966409 100644 --- a/server/config/config_test.go +++ b/server/config/config_test.go @@ -26,6 +26,7 @@ import ( "github.com/BurntSushi/toml" "github.com/spf13/pflag" "github.com/stretchr/testify/require" + "github.com/tikv/pd/pkg/ratelimit" sc "github.com/tikv/pd/pkg/schedule/config" "github.com/tikv/pd/pkg/storage" "github.com/tikv/pd/pkg/utils/configutil" @@ -479,3 +480,28 @@ func newTestScheduleOption() (*PersistOptions, error) { opt := NewPersistOptions(cfg) return opt, nil } + +func TestRateLimitClone(t *testing.T) { + re := require.New(t) + cfg := &RateLimitConfig{ + EnableRateLimit: defaultEnableRateLimitMiddleware, + LimiterConfig: make(map[string]ratelimit.DimensionConfig), + } + clone := cfg.Clone() + clone.LimiterConfig["test"] = ratelimit.DimensionConfig{ + ConcurrencyLimit: 200, + } + dc := cfg.LimiterConfig["test"] + re.Equal(dc.ConcurrencyLimit, uint64(0)) + + gCfg := &GRPCRateLimitConfig{ + EnableRateLimit: defaultEnableGRPCRateLimitMiddleware, + LimiterConfig: make(map[string]ratelimit.DimensionConfig), + } + gClone := gCfg.Clone() + gClone.LimiterConfig["test"] = ratelimit.DimensionConfig{ + ConcurrencyLimit: 300, + } + gdc := gCfg.LimiterConfig["test"] + re.Equal(gdc.ConcurrencyLimit, uint64(0)) +} diff --git a/server/config/service_middleware_config.go b/server/config/service_middleware_config.go index ef0b04b2abd..b13e3398ac5 100644 --- a/server/config/service_middleware_config.go +++ b/server/config/service_middleware_config.go @@ -78,7 +78,12 @@ type RateLimitConfig struct { // Clone returns a cloned rate limit config. func (c *RateLimitConfig) Clone() *RateLimitConfig { + m := make(map[string]ratelimit.DimensionConfig, len(c.LimiterConfig)) + for k, v := range c.LimiterConfig { + m[k] = v + } cfg := *c + cfg.LimiterConfig = m return &cfg } @@ -92,6 +97,11 @@ type GRPCRateLimitConfig struct { // Clone returns a cloned rate limit config. func (c *GRPCRateLimitConfig) Clone() *GRPCRateLimitConfig { + m := make(map[string]ratelimit.DimensionConfig, len(c.LimiterConfig)) + for k, v := range c.LimiterConfig { + m[k] = v + } cfg := *c + cfg.LimiterConfig = m return &cfg }