From 0b9315671617e7fc5a6bef999e351354dc445718 Mon Sep 17 00:00:00 2001 From: husharp Date: Mon, 10 Jul 2023 15:43:58 +0800 Subject: [PATCH] address comment Signed-off-by: husharp --- client/resource_group/controller/controller.go | 8 +++++++- .../controller/controller_test.go | 13 +++++++++++++ go.mod | 2 +- go.sum | 4 ++-- pkg/mcs/resourcemanager/server/grpc_service.go | 5 +++-- pkg/mcs/resourcemanager/server/manager.go | 17 ++++++++++++++++- pkg/mcs/resourcemanager/server/metrics.go | 18 ++++++++++++++++++ tests/integrations/client/go.mod | 2 +- tests/integrations/client/go.sum | 4 ++-- tests/integrations/mcs/go.mod | 2 +- tests/integrations/mcs/go.sum | 4 ++-- .../resourcemanager/resource_manager_test.go | 2 +- tests/integrations/tso/go.mod | 2 +- tests/integrations/tso/go.sum | 4 ++-- tools/pd-tso-bench/go.mod | 2 +- tools/pd-tso-bench/go.sum | 4 ++-- 16 files changed, 73 insertions(+), 20 deletions(-) diff --git a/client/resource_group/controller/controller.go b/client/resource_group/controller/controller.go index a62a26159ae5..2dacb82e2241 100755 --- a/client/resource_group/controller/controller.go +++ b/client/resource_group/controller/controller.go @@ -1062,8 +1062,14 @@ func (gc *groupCostController) isBackgroundRequest(requestResource string) bool if gc.meta.BackgroundSettings != nil { jobTypes := gc.meta.BackgroundSettings.JobTypes + jobTypesMap := make(map[string]struct{}) for _, jobType := range jobTypes { - if strings.Contains(requestResource, jobType) { + jobTypesMap[jobType] = struct{}{} + } + + parts := strings.Split(requestResource, "_") + for _, part := range parts { + if _, ok := jobTypesMap[part]; ok { return true } } diff --git a/client/resource_group/controller/controller_test.go b/client/resource_group/controller/controller_test.go index d3b2a29c2117..e22944ed9db9 100644 --- a/client/resource_group/controller/controller_test.go +++ b/client/resource_group/controller/controller_test.go @@ -39,6 +39,9 @@ func createTestGroupCostController(re *require.Assertions) *groupCostController }, }, }, + BackgroundSettings: &rmpb.BackgroundSettings{ + JobTypes: []string{"lightning", "br"}, + }, } ch1 := make(chan struct{}) ch2 := make(chan *groupCostController) @@ -112,3 +115,13 @@ func TestRequestAndResponseConsumption(t *testing.T) { re.Equal(expectedConsumption.TotalCpuTimeMs, consumption.TotalCpuTimeMs, caseNum) } } + +func TestIsBackgroundRequest(t *testing.T) { + re := require.New(t) + gc := createTestGroupCostController(re) + re.False(gc.isBackgroundRequest("test")) + re.False(gc.isBackgroundRequest("unknown_default")) + re.True(gc.isBackgroundRequest("internal_lightning")) + re.False(gc.isBackgroundRequest("external_test_default")) + re.True(gc.isBackgroundRequest("external_unknown_lightning")) +} diff --git a/go.mod b/go.mod index 67b7a4e3f2de..ddaf9f750ecd 100644 --- a/go.mod +++ b/go.mod @@ -205,4 +205,4 @@ replace google.golang.org/grpc v1.54.0 => google.golang.org/grpc v1.26.0 // kvproto at the same time. You can run `go mod tidy` to make it replaced with go-mod style specification. // After the PR to kvproto is merged, remember to comment this out and run `go mod tidy`. // replace github.com/pingcap/kvproto => github.com/$YourPrivateRepo $YourPrivateBranch -replace github.com/pingcap/kvproto => github.com/HuSharp/kvproto v0.0.0-20230706083243-12b30a04ec23 +replace github.com/pingcap/kvproto => github.com/HuSharp/kvproto v0.0.0-20230710073438-f629a3cd43e9 diff --git a/go.sum b/go.sum index 4ece218d171c..5518e0a9fd0c 100644 --- a/go.sum +++ b/go.sum @@ -4,8 +4,8 @@ github.com/AlekSi/gocov-xml v1.0.0 h1:4QctJBgXEkbzeKz6PJy6bt3JSPNSN4I2mITYW+eKUo github.com/AlekSi/gocov-xml v1.0.0/go.mod h1:J0qYeZ6tDg4oZubW9mAAgxlqw39PDfoEkzB3HXSbEuA= github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/HuSharp/kvproto v0.0.0-20230706083243-12b30a04ec23 h1:XCDwezErjCtqcfnXBbbeJ/oN3zIDAFLsZzdnLf328tg= -github.com/HuSharp/kvproto v0.0.0-20230706083243-12b30a04ec23/go.mod h1:r0q/CFcwvyeRhKtoqzmWMBebrtpIziQQ9vR+JKh1knc= +github.com/HuSharp/kvproto v0.0.0-20230710073438-f629a3cd43e9 h1:rla173qjbLMBBEAU8nXSEzDxdTpjjYBusOgqAVSr9dc= +github.com/HuSharp/kvproto v0.0.0-20230710073438-f629a3cd43e9/go.mod h1:r0q/CFcwvyeRhKtoqzmWMBebrtpIziQQ9vR+JKh1knc= github.com/KyleBanks/depth v1.2.1 h1:5h8fQADFrWtarTdtDudMmGsC7GPbOAu6RVB3ffsVFHc= github.com/KyleBanks/depth v1.2.1/go.mod h1:jzSb9d0L43HxTQfT+oSA1EEp2q+ne2uh6XgeJcm8brE= github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= diff --git a/pkg/mcs/resourcemanager/server/grpc_service.go b/pkg/mcs/resourcemanager/server/grpc_service.go index 5fdf093b2ece..0a167be274eb 100644 --- a/pkg/mcs/resourcemanager/server/grpc_service.go +++ b/pkg/mcs/resourcemanager/server/grpc_service.go @@ -180,7 +180,7 @@ func (s *Service) AcquireTokenBuckets(stream rmpb.ResourceManager_AcquireTokenBu } targetPeriodMs := request.GetTargetRequestPeriodMs() clientUniqueID := request.GetClientUniqueId() - isBackground := request.GetBackground() + isBackground := request.GetIsBackground() resps := &rmpb.TokenBucketsResponse{} for _, req := range request.Requests { resourceGroupName := req.GetResourceGroupName() @@ -194,7 +194,8 @@ func (s *Service) AcquireTokenBuckets(stream rmpb.ResourceManager_AcquireTokenBu s.manager.consumptionDispatcher <- struct { resourceGroupName string *rmpb.Consumption - }{resourceGroupName, req.GetConsumptionSinceLastRequest()} + isBackground bool + }{resourceGroupName, req.GetConsumptionSinceLastRequest(), isBackground} if isBackground { continue } diff --git a/pkg/mcs/resourcemanager/server/manager.go b/pkg/mcs/resourcemanager/server/manager.go index b054a37e0ac5..67b653cb5bc4 100644 --- a/pkg/mcs/resourcemanager/server/manager.go +++ b/pkg/mcs/resourcemanager/server/manager.go @@ -56,6 +56,7 @@ type Manager struct { consumptionDispatcher chan struct { resourceGroupName string *rmpb.Consumption + isBackground bool } // record update time of each resource group consumptionRecord map[string]time.Time @@ -76,6 +77,7 @@ func NewManager[T ResourceManagerConfigProvider](srv bs.Server) *Manager { consumptionDispatcher: make(chan struct { resourceGroupName string *rmpb.Consumption + isBackground bool }, defaultConsumptionChanSize), consumptionRecord: make(map[string]time.Time), } @@ -297,8 +299,19 @@ func (m *Manager) backgroundMetricsFlush(ctx context.Context) { if consumption == nil { continue } + + name := consumptionInfo.resourceGroupName + if consumptionInfo.isBackground { + log.Info("background metrics flush", zap.String("resource group", name)) + backgroundRruMetrics := backgroundReadRequestUnitCost.WithLabelValues(name) + backgroundWruMetrics := backgroundWriteRequestUnitCost.WithLabelValues(name) + backgroundRruMetrics.Add(consumption.RRU) + backgroundWruMetrics.Add(consumption.WRU) + m.consumptionRecord[name] = time.Now() + continue + } + var ( - name = consumptionInfo.resourceGroupName rruMetrics = readRequestUnitCost.WithLabelValues(name) wruMetrics = writeRequestUnitCost.WithLabelValues(name) sqlLayerRuMetrics = sqlLayerRequestUnitCost.WithLabelValues(name) @@ -355,6 +368,8 @@ func (m *Manager) backgroundMetricsFlush(ctx context.Context) { requestCount.DeleteLabelValues(name, readTypeLabel) requestCount.DeleteLabelValues(name, writeTypeLabel) availableRUCounter.DeleteLabelValues(name) + backgroundReadRequestUnitCost.DeleteLabelValues(name) + backgroundWriteRequestUnitCost.DeleteLabelValues(name) delete(m.consumptionRecord, name) } } diff --git a/pkg/mcs/resourcemanager/server/metrics.go b/pkg/mcs/resourcemanager/server/metrics.go index 2b426cacf238..409b2c78f496 100644 --- a/pkg/mcs/resourcemanager/server/metrics.go +++ b/pkg/mcs/resourcemanager/server/metrics.go @@ -104,6 +104,22 @@ var ( Name: "available_ru", Help: "Counter of the available RU for all resource groups.", }, []string{resourceGroupNameLabel}) + + // Background RU cost metrics. + backgroundReadRequestUnitCost = prometheus.NewCounterVec( + prometheus.CounterOpts{ + Namespace: namespace, + Subsystem: ruSubsystem, + Name: "background_read_request_unit", + Help: "Counter of the read request unit cost for all background resource groups.", + }, []string{resourceGroupNameLabel}) + backgroundWriteRequestUnitCost = prometheus.NewCounterVec( + prometheus.CounterOpts{ + Namespace: namespace, + Subsystem: ruSubsystem, + Name: "background_write_request_unit", + Help: "Counter of the write request unit cost for all background resource groups.", + }, []string{resourceGroupNameLabel}) ) func init() { @@ -117,4 +133,6 @@ func init() { prometheus.MustRegister(sqlCPUCost) prometheus.MustRegister(requestCount) prometheus.MustRegister(availableRUCounter) + prometheus.MustRegister(backgroundReadRequestUnitCost) + prometheus.MustRegister(backgroundWriteRequestUnitCost) } diff --git a/tests/integrations/client/go.mod b/tests/integrations/client/go.mod index de986edab298..c6371c8afccc 100644 --- a/tests/integrations/client/go.mod +++ b/tests/integrations/client/go.mod @@ -183,4 +183,4 @@ require ( sigs.k8s.io/yaml v1.2.0 // indirect ) -replace github.com/pingcap/kvproto => github.com/HuSharp/kvproto v0.0.0-20230706083243-12b30a04ec23 +replace github.com/pingcap/kvproto => github.com/HuSharp/kvproto v0.0.0-20230710073438-f629a3cd43e9 diff --git a/tests/integrations/client/go.sum b/tests/integrations/client/go.sum index 2ad9637eed1c..45f8e5ccf97a 100644 --- a/tests/integrations/client/go.sum +++ b/tests/integrations/client/go.sum @@ -2,8 +2,8 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/HuSharp/kvproto v0.0.0-20230706083243-12b30a04ec23 h1:XCDwezErjCtqcfnXBbbeJ/oN3zIDAFLsZzdnLf328tg= -github.com/HuSharp/kvproto v0.0.0-20230706083243-12b30a04ec23/go.mod h1:r0q/CFcwvyeRhKtoqzmWMBebrtpIziQQ9vR+JKh1knc= +github.com/HuSharp/kvproto v0.0.0-20230710073438-f629a3cd43e9 h1:rla173qjbLMBBEAU8nXSEzDxdTpjjYBusOgqAVSr9dc= +github.com/HuSharp/kvproto v0.0.0-20230710073438-f629a3cd43e9/go.mod h1:r0q/CFcwvyeRhKtoqzmWMBebrtpIziQQ9vR+JKh1knc= github.com/KyleBanks/depth v1.2.1 h1:5h8fQADFrWtarTdtDudMmGsC7GPbOAu6RVB3ffsVFHc= github.com/KyleBanks/depth v1.2.1/go.mod h1:jzSb9d0L43HxTQfT+oSA1EEp2q+ne2uh6XgeJcm8brE= github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= diff --git a/tests/integrations/mcs/go.mod b/tests/integrations/mcs/go.mod index 8c97014c7137..7f209193ef80 100644 --- a/tests/integrations/mcs/go.mod +++ b/tests/integrations/mcs/go.mod @@ -183,4 +183,4 @@ require ( sigs.k8s.io/yaml v1.2.0 // indirect ) -replace github.com/pingcap/kvproto => github.com/HuSharp/kvproto v0.0.0-20230706083243-12b30a04ec23 +replace github.com/pingcap/kvproto => github.com/HuSharp/kvproto v0.0.0-20230710073438-f629a3cd43e9 diff --git a/tests/integrations/mcs/go.sum b/tests/integrations/mcs/go.sum index 6f15c8a82fa8..e102b93759ea 100644 --- a/tests/integrations/mcs/go.sum +++ b/tests/integrations/mcs/go.sum @@ -2,8 +2,8 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/HuSharp/kvproto v0.0.0-20230706083243-12b30a04ec23 h1:XCDwezErjCtqcfnXBbbeJ/oN3zIDAFLsZzdnLf328tg= -github.com/HuSharp/kvproto v0.0.0-20230706083243-12b30a04ec23/go.mod h1:r0q/CFcwvyeRhKtoqzmWMBebrtpIziQQ9vR+JKh1knc= +github.com/HuSharp/kvproto v0.0.0-20230710073438-f629a3cd43e9 h1:rla173qjbLMBBEAU8nXSEzDxdTpjjYBusOgqAVSr9dc= +github.com/HuSharp/kvproto v0.0.0-20230710073438-f629a3cd43e9/go.mod h1:r0q/CFcwvyeRhKtoqzmWMBebrtpIziQQ9vR+JKh1knc= github.com/KyleBanks/depth v1.2.1 h1:5h8fQADFrWtarTdtDudMmGsC7GPbOAu6RVB3ffsVFHc= github.com/KyleBanks/depth v1.2.1/go.mod h1:jzSb9d0L43HxTQfT+oSA1EEp2q+ne2uh6XgeJcm8brE= github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= diff --git a/tests/integrations/mcs/resourcemanager/resource_manager_test.go b/tests/integrations/mcs/resourcemanager/resource_manager_test.go index 67880df053b6..76d69d8c559c 100644 --- a/tests/integrations/mcs/resourcemanager/resource_manager_test.go +++ b/tests/integrations/mcs/resourcemanager/resource_manager_test.go @@ -719,7 +719,7 @@ func (suite *resourceManagerClientTestSuite) TestAcquireTokenBucket() { checkFunc(gresp, groups[0]) } - reqs.Background = true + reqs.IsBackground = true aresp, err := cli.AcquireTokenBuckets(suite.ctx, reqs) re.NoError(err) for _, resp := range aresp { diff --git a/tests/integrations/tso/go.mod b/tests/integrations/tso/go.mod index c6aea6edcf6d..013a3221c072 100644 --- a/tests/integrations/tso/go.mod +++ b/tests/integrations/tso/go.mod @@ -184,4 +184,4 @@ require ( sigs.k8s.io/yaml v1.2.0 // indirect ) -replace github.com/pingcap/kvproto => github.com/HuSharp/kvproto v0.0.0-20230706083243-12b30a04ec23 +replace github.com/pingcap/kvproto => github.com/HuSharp/kvproto v0.0.0-20230710073438-f629a3cd43e9 diff --git a/tests/integrations/tso/go.sum b/tests/integrations/tso/go.sum index ba6bd7c0389c..72cdba4ecfaf 100644 --- a/tests/integrations/tso/go.sum +++ b/tests/integrations/tso/go.sum @@ -2,8 +2,8 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/HuSharp/kvproto v0.0.0-20230706083243-12b30a04ec23 h1:XCDwezErjCtqcfnXBbbeJ/oN3zIDAFLsZzdnLf328tg= -github.com/HuSharp/kvproto v0.0.0-20230706083243-12b30a04ec23/go.mod h1:r0q/CFcwvyeRhKtoqzmWMBebrtpIziQQ9vR+JKh1knc= +github.com/HuSharp/kvproto v0.0.0-20230710073438-f629a3cd43e9 h1:rla173qjbLMBBEAU8nXSEzDxdTpjjYBusOgqAVSr9dc= +github.com/HuSharp/kvproto v0.0.0-20230710073438-f629a3cd43e9/go.mod h1:r0q/CFcwvyeRhKtoqzmWMBebrtpIziQQ9vR+JKh1knc= github.com/KyleBanks/depth v1.2.1 h1:5h8fQADFrWtarTdtDudMmGsC7GPbOAu6RVB3ffsVFHc= github.com/KyleBanks/depth v1.2.1/go.mod h1:jzSb9d0L43HxTQfT+oSA1EEp2q+ne2uh6XgeJcm8brE= github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= diff --git a/tools/pd-tso-bench/go.mod b/tools/pd-tso-bench/go.mod index f9acbe9e53d9..504471596d66 100644 --- a/tools/pd-tso-bench/go.mod +++ b/tools/pd-tso-bench/go.mod @@ -14,4 +14,4 @@ require ( replace github.com/tikv/pd/client => ../../client -replace github.com/pingcap/kvproto => github.com/HuSharp/kvproto v0.0.0-20230706083243-12b30a04ec23 +replace github.com/pingcap/kvproto => github.com/HuSharp/kvproto v0.0.0-20230710073438-f629a3cd43e9 diff --git a/tools/pd-tso-bench/go.sum b/tools/pd-tso-bench/go.sum index 83df05faf331..89a761926c22 100644 --- a/tools/pd-tso-bench/go.sum +++ b/tools/pd-tso-bench/go.sum @@ -596,8 +596,8 @@ gioui.org v0.0.0-20210308172011-57750fc8a0a6/go.mod h1:RSH6KIUZ0p2xy5zHDxgAM4zum git.sr.ht/~sbinet/gg v0.3.1/go.mod h1:KGYtlADtqsqANL9ueOFkWymvzUvLMQllU5Ixo+8v3pc= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/HuSharp/kvproto v0.0.0-20230706083243-12b30a04ec23 h1:XCDwezErjCtqcfnXBbbeJ/oN3zIDAFLsZzdnLf328tg= -github.com/HuSharp/kvproto v0.0.0-20230706083243-12b30a04ec23/go.mod h1:r0q/CFcwvyeRhKtoqzmWMBebrtpIziQQ9vR+JKh1knc= +github.com/HuSharp/kvproto v0.0.0-20230710073438-f629a3cd43e9 h1:rla173qjbLMBBEAU8nXSEzDxdTpjjYBusOgqAVSr9dc= +github.com/HuSharp/kvproto v0.0.0-20230710073438-f629a3cd43e9/go.mod h1:r0q/CFcwvyeRhKtoqzmWMBebrtpIziQQ9vR+JKh1knc= github.com/JohnCGriffin/overflow v0.0.0-20211019200055-46fa312c352c/go.mod h1:X0CRv0ky0k6m906ixxpzmDRLvX58TFUKS2eePweuyxk= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/ajstarks/deck v0.0.0-20200831202436-30c9fc6549a9/go.mod h1:JynElWSGnm/4RlzPXRlREEwqTHAN3T56Bv2ITsFT3gY=