diff --git a/server/region_syncer/client.go b/server/region_syncer/client.go index debf39f556f..c094243063f 100644 --- a/server/region_syncer/client.go +++ b/server/region_syncer/client.go @@ -188,9 +188,11 @@ func (s *RegionSyncer) StartSyncWithLeader(addr string) { stats := resp.GetRegionStats() regions := resp.GetRegions() buckets := resp.GetBuckets() + queryStats := resp.GetQueryStats() regionLeaders := resp.GetRegionLeaders() hasStats := len(stats) == len(regions) hasBuckets := len(buckets) == len(regions) + hasQueryStats := len(queryStats) == len(regions) for i, r := range regions { var ( region *core.RegionInfo @@ -224,6 +226,9 @@ func (s *RegionSyncer) StartSyncWithLeader(addr string) { region.UpdateBuckets(buckets[i], old) } } + if hasQueryStats { + region.QueryStats = queryStats[i] + } if saveKV { err = regionStorage.SaveRegion(r) } diff --git a/server/region_syncer/server.go b/server/region_syncer/server.go index 14a5c75a78a..f811ed2a2fd 100644 --- a/server/region_syncer/server.go +++ b/server/region_syncer/server.go @@ -113,6 +113,7 @@ func (s *RegionSyncer) RunServer(ctx context.Context, regionNotifier <-chan *cor var stats []*pdpb.RegionStat var leaders []*metapb.Peer var buckets []*metapb.Buckets + var queryStats []*pdpb.QueryStats ticker := time.NewTicker(syncerKeepAliveInterval) defer func() { @@ -137,6 +138,7 @@ func (s *RegionSyncer) RunServer(ctx context.Context, regionNotifier <-chan *cor } buckets = append(buckets, bucket) leaders = append(leaders, first.GetLeader()) + queryStats = append(queryStats, first.QueryStats) startIndex := s.history.GetNextIndex() s.history.Record(first) pending := len(regionNotifier) @@ -151,6 +153,7 @@ func (s *RegionSyncer) RunServer(ctx context.Context, regionNotifier <-chan *cor } buckets = append(buckets, bucket) leaders = append(leaders, region.GetLeader()) + queryStats = append(queryStats, region.QueryStats) s.history.Record(region) } regions := &pdpb.SyncRegionResponse{ @@ -160,6 +163,7 @@ func (s *RegionSyncer) RunServer(ctx context.Context, regionNotifier <-chan *cor RegionStats: stats, RegionLeaders: leaders, Buckets: buckets, + QueryStats: queryStats, } s.broadcast(regions) case <-ticker.C: @@ -240,6 +244,7 @@ func (s *RegionSyncer) syncHistoryRegion(ctx context.Context, request *pdpb.Sync stats := make([]*pdpb.RegionStat, 0, maxSyncRegionBatchSize) leaders := make([]*metapb.Peer, 0, maxSyncRegionBatchSize) buckets := make([]*metapb.Buckets, 0, maxSyncRegionBatchSize) + queryStats := make([]*pdpb.QueryStats, 0, maxSyncRegionBatchSize) for syncedIndex, r := range regions { select { case <-ctx.Done(): @@ -263,6 +268,7 @@ func (s *RegionSyncer) syncHistoryRegion(ctx context.Context, request *pdpb.Sync bucket = r.GetBuckets() } buckets = append(buckets, bucket) + queryStats = append(queryStats, r.QueryStats) if len(metas) < maxSyncRegionBatchSize && syncedIndex < len(regions)-1 { continue } @@ -273,6 +279,7 @@ func (s *RegionSyncer) syncHistoryRegion(ctx context.Context, request *pdpb.Sync RegionStats: stats, RegionLeaders: leaders, Buckets: buckets, + QueryStats: queryStats, } s.limit.WaitN(ctx, resp.Size()) lastIndex += len(metas) @@ -301,6 +308,7 @@ func (s *RegionSyncer) syncHistoryRegion(ctx context.Context, request *pdpb.Sync stats := make([]*pdpb.RegionStat, len(records)) leaders := make([]*metapb.Peer, len(records)) buckets := make([]*metapb.Buckets, len(records)) + queryStats := make([]*pdpb.QueryStats, len(records)) for i, r := range records { regions[i] = r.GetMeta() stats[i] = r.GetStat() @@ -314,6 +322,7 @@ func (s *RegionSyncer) syncHistoryRegion(ctx context.Context, request *pdpb.Sync if r.GetBuckets() != nil { buckets[i] = r.GetBuckets() } + queryStats[i] = r.QueryStats } resp := &pdpb.SyncRegionResponse{ Header: &pdpb.ResponseHeader{ClusterId: s.server.ClusterID()}, @@ -322,6 +331,7 @@ func (s *RegionSyncer) syncHistoryRegion(ctx context.Context, request *pdpb.Sync RegionStats: stats, RegionLeaders: leaders, Buckets: buckets, + QueryStats: queryStats, } return stream.Send(resp) }