From a90e13e9adbd18920baf98105dc86cb3b79383e8 Mon Sep 17 00:00:00 2001 From: Ping Yu Date: Thu, 18 Jan 2024 00:33:16 +0800 Subject: [PATCH] server: tolerate no leader on report bucket (#7720) close tikv/pd#7719 server: tolerate no leader on handling report buckets. Signed-off-by: Ping Yu Co-authored-by: ti-chi-bot[bot] <108142056+ti-chi-bot[bot]@users.noreply.github.com> --- server/grpc_service.go | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/server/grpc_service.go b/server/grpc_service.go index a238cc780aa..ef7020f7fee 100644 --- a/server/grpc_service.go +++ b/server/grpc_service.go @@ -1139,12 +1139,19 @@ func (s *GrpcServer) ReportBuckets(stream pdpb.PD_ReportBucketsServer) error { if buckets == nil || len(buckets.Keys) == 0 { continue } + var ( + storeLabel string + storeAddress string + ) store := rc.GetLeaderStoreByRegionID(buckets.GetRegionId()) if store == nil { - return errors.Errorf("the store of the bucket in region %v is not found ", buckets.GetRegionId()) + // As TiKV report buckets just after the region heartbeat, for new created region, PD may receive buckets report before the first region heartbeat is handled. + // So we should not return error here. + log.Warn("the store of the bucket in region is not found ", zap.Uint64("region-id", buckets.GetRegionId())) + } else { + storeLabel = strconv.FormatUint(store.GetID(), 10) + storeAddress = store.GetAddress() } - storeLabel := strconv.FormatUint(store.GetID(), 10) - storeAddress := store.GetAddress() bucketReportCounter.WithLabelValues(storeAddress, storeLabel, "report", "recv").Inc() start := time.Now()