From dbe814c2af5b12d8a341a482c2ada54ef6244220 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Fri, 11 Dec 2020 14:09:53 +0800 Subject: [PATCH] infoschema: fix inaccurate statistics of TIDB_HOT_REGIONS (#21278) (#21319) Signed-off-by: Ryan Leung --- store/helper/helper.go | 1 + store/helper/helper_test.go | 25 +++++++++++++++++++++---- store/tikv/test_util.go | 2 +- 3 files changed, 23 insertions(+), 5 deletions(-) diff --git a/store/helper/helper.go b/store/helper/helper.go index 9fadb60961b5f..315c1fec2d0c8 100644 --- a/store/helper/helper.go +++ b/store/helper/helper.go @@ -188,6 +188,7 @@ type HotTableIndex struct { func (h *Helper) FetchRegionTableIndex(metrics map[uint64]RegionMetric, allSchemas []*model.DBInfo) ([]HotTableIndex, error) { hotTables := make([]HotTableIndex, 0, len(metrics)) for regionID, regionMetric := range metrics { + regionMetric := regionMetric t := HotTableIndex{RegionID: regionID, RegionMetric: ®ionMetric} region, err := h.RegionCache.LocateRegionByID(tikv.NewBackoffer(context.Background(), 500), regionID) if err != nil { diff --git a/store/helper/helper_test.go b/store/helper/helper_test.go index 30879e50c278e..cd35a1af2e10f 100644 --- a/store/helper/helper_test.go +++ b/store/helper/helper_test.go @@ -24,6 +24,7 @@ import ( "github.com/gorilla/mux" . "github.com/pingcap/check" "github.com/pingcap/log" + "github.com/pingcap/parser/model" "github.com/pingcap/tidb/store/helper" "github.com/pingcap/tidb/store/mockstore" "github.com/pingcap/tidb/store/mockstore/mocktikv" @@ -63,8 +64,13 @@ func (s *mockStore) TLSConfig() *tls.Config { func (s *HelperTestSuite) SetUpSuite(c *C) { go s.mockPDHTTPServer(c) time.Sleep(100 * time.Millisecond) - mvccStore := mocktikv.MustNewMVCCStore() - mockTikvStore, err := mockstore.NewMockTikvStore(mockstore.WithMVCCStore(mvccStore)) + mockTikvStore, err := mockstore.NewMockTikvStore( + mockstore.WithCluster(func() *mocktikv.Cluster { + cluster := mocktikv.NewCluster() + mocktikv.BootstrapWithMultiRegions(cluster, []byte("x")) + return cluster + }()), + ) s.store = &mockStore{ mockTikvStore.(tikv.Storage), []string{"127.0.0.1:10100/"}, @@ -79,7 +85,13 @@ func (s *HelperTestSuite) TestHotRegion(c *C) { } regionMetric, err := helper.FetchHotRegion(pdapi.HotRead) c.Assert(err, IsNil, Commentf("err: %+v", err)) - c.Assert(fmt.Sprintf("%v", regionMetric), Equals, "map[1:{100 1 0}]") + dbInfo := &model.DBInfo{ + Name: model.NewCIStr("test"), + } + c.Assert(fmt.Sprintf("%v", regionMetric), Equals, "map[3:{100 1 0} 4:{200 2 0}]") + res, err := helper.FetchRegionTableIndex(regionMetric, []*model.DBInfo{dbInfo}) + c.Assert(err, IsNil, Commentf("err: %+v", err)) + c.Assert(res[0].RegionMetric, Not(Equals), res[1].RegionMetric) } func (s *HelperTestSuite) TestTiKVRegionsInfo(c *C) { @@ -123,9 +135,14 @@ func (s *HelperTestSuite) mockHotRegionResponse(w http.ResponseWriter, req *http RegionsStat: []helper.RegionStat{ { FlowBytes: 100, - RegionID: 1, + RegionID: 3, HotDegree: 1, }, + { + FlowBytes: 200, + RegionID: 4, + HotDegree: 2, + }, }, } resp := helper.StoreHotRegionInfos{ diff --git a/store/tikv/test_util.go b/store/tikv/test_util.go index e63abc405309e..bb4d39cb1c07a 100644 --- a/store/tikv/test_util.go +++ b/store/tikv/test_util.go @@ -16,7 +16,7 @@ package tikv import ( "github.com/google/uuid" "github.com/pingcap/errors" - "github.com/pingcap/pd/client" + pd "github.com/pingcap/pd/client" "github.com/pingcap/tidb/kv" )