From 3a40ddb38809ecc5d10cb0f23fc1f8bf277c3c3c Mon Sep 17 00:00:00 2001 From: Ti Chi Robot Date: Thu, 1 Jun 2023 20:12:42 +0800 Subject: [PATCH] store/gcworker: reduce "full config reset" log on pd side (#44331) (#44336) close pingcap/tidb#33069 --- store/gcworker/gc_worker.go | 36 +++++++++++++++++++++++------------- 1 file changed, 23 insertions(+), 13 deletions(-) diff --git a/store/gcworker/gc_worker.go b/store/gcworker/gc_worker.go index 7d45ffd25dd49..b2a5d3bbbbb6e 100644 --- a/store/gcworker/gc_worker.go +++ b/store/gcworker/gc_worker.go @@ -2008,20 +2008,20 @@ func (w *GCWorker) doGCPlacementRules(se session.Session, safePoint uint64, dr u } } - if len(physicalTableIDs) == 0 { - return + // Skip table ids that's already successfully handled. + tmp := physicalTableIDs[:0] + for _, id := range physicalTableIDs { + if _, ok := gcPlacementRuleCache[id]; !ok { + tmp = append(tmp, id) + } } + physicalTableIDs = tmp - bundles := make([]*placement.Bundle, 0, len(physicalTableIDs)) - for _, id := range physicalTableIDs { - bundles = append(bundles, placement.NewBundle(id)) + if len(physicalTableIDs) == 0 { + return } for _, id := range physicalTableIDs { - // Skip table ids that's already successfully deleted. - if _, ok := gcPlacementRuleCache[id]; ok { - continue - } // Delete pd rule failpoint.Inject("gcDeletePlacementRuleCounter", func() {}) logutil.BgLogger().Info("try delete TiFlash pd rule", @@ -2030,12 +2030,22 @@ func (w *GCWorker) doGCPlacementRules(se session.Session, safePoint uint64, dr u if err := infosync.DeleteTiFlashPlacementRule(context.Background(), "tiflash", ruleID); err != nil { logutil.BgLogger().Error("delete TiFlash pd rule failed when gc", zap.Error(err), zap.String("ruleID", ruleID), zap.Uint64("safePoint", safePoint)) - } else { - // Cache the table id if its related rule are deleted successfully. - gcPlacementRuleCache[id] = struct{}{} } } - return infosync.PutRuleBundlesWithDefaultRetry(context.TODO(), bundles) + bundles := make([]*placement.Bundle, 0, len(physicalTableIDs)) + for _, id := range physicalTableIDs { + bundles = append(bundles, placement.NewBundle(id)) + } + err = infosync.PutRuleBundlesWithDefaultRetry(context.TODO(), bundles) + if err != nil { + return + } + + // Cache the table id if its related rule are deleted successfully. + for _, id := range physicalTableIDs { + gcPlacementRuleCache[id] = struct{}{} + } + return nil } func (w *GCWorker) doGCLabelRules(dr util.DelRangeTask) (err error) {