Skip to content

Commit d1f2671

Browse files
gc: delete TiFlash placement rules in batch (#54071)
close #54068
1 parent c455119 commit d1f2671

File tree

3 files changed

+16
-18
lines changed

3 files changed

+16
-18
lines changed

pkg/domain/infosync/info.go

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1155,14 +1155,20 @@ func SetTiFlashPlacementRule(ctx context.Context, rule pdhttp.Rule) error {
11551155
return is.tiflashReplicaManager.SetPlacementRule(ctx, &rule)
11561156
}
11571157

1158-
// DeleteTiFlashPlacementRule is to delete placement rule for certain group.
1159-
func DeleteTiFlashPlacementRule(ctx context.Context, group string, ruleID string) error {
1158+
// DeleteTiFlashPlacementRules is a helper function to delete TiFlash placement rules of given physical table IDs.
1159+
func DeleteTiFlashPlacementRules(ctx context.Context, physicalTableIDs []int64) error {
11601160
is, err := getGlobalInfoSyncer()
11611161
if err != nil {
11621162
return errors.Trace(err)
11631163
}
1164-
logutil.BgLogger().Info("DeleteTiFlashPlacementRule", zap.String("ruleID", ruleID))
1165-
return is.tiflashReplicaManager.DeletePlacementRule(ctx, group, ruleID)
1164+
logutil.BgLogger().Info("DeleteTiFlashPlacementRules", zap.Int64s("physicalTableIDs", physicalTableIDs))
1165+
rules := make([]*pdhttp.Rule, 0, len(physicalTableIDs))
1166+
for _, id := range physicalTableIDs {
1167+
// make a rule with count 0 to delete the rule
1168+
rule := MakeNewRule(id, 0, nil)
1169+
rules = append(rules, &rule)
1170+
}
1171+
return is.tiflashReplicaManager.SetPlacementRuleBatch(ctx, rules)
11661172
}
11671173

11681174
// GetTiFlashGroupRules to get all placement rule in a certain group.

pkg/domain/infosync/info_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -242,8 +242,8 @@ func TestTiFlashManager(t *testing.T) {
242242
require.NoError(t, err)
243243
require.Equal(t, 1, stats.Count)
244244

245-
// DeleteTiFlashPlacementRule
246-
require.NoError(t, DeleteTiFlashPlacementRule(ctx, "tiflash", rule.ID))
245+
// DeleteTiFlashPlacementRules
246+
require.NoError(t, DeleteTiFlashPlacementRules(ctx, []int64{1}))
247247
rules, err = GetTiFlashGroupRules(ctx, "tiflash")
248248
require.NoError(t, err)
249249
require.Equal(t, 0, len(rules))

pkg/store/gcworker/gc_worker.go

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -932,7 +932,7 @@ func (w *GCWorker) redoDeleteRanges(ctx context.Context, safePoint uint64, concu
932932
return nil
933933
}
934934

935-
func (w *GCWorker) doUnsafeDestroyRangeRequest(ctx context.Context, startKey []byte, endKey []byte, concurrency int) error {
935+
func (w *GCWorker) doUnsafeDestroyRangeRequest(ctx context.Context, startKey []byte, endKey []byte, _ int) error {
936936
// Get all stores every time deleting a region. So the store list is less probably to be stale.
937937
stores, err := w.getStoresForGC(ctx)
938938
if err != nil {
@@ -1489,7 +1489,7 @@ func (w *GCWorker) saveValueToSysTable(key, value string) error {
14891489
// GC placement rules when the partitions are removed by the GC worker.
14901490
// Placement rules cannot be removed immediately after drop table / truncate table,
14911491
// because the tables can be flashed back or recovered.
1492-
func (w *GCWorker) doGCPlacementRules(se sessiontypes.Session, safePoint uint64, dr util.DelRangeTask, gcPlacementRuleCache map[int64]any) (err error) {
1492+
func (w *GCWorker) doGCPlacementRules(se sessiontypes.Session, _ uint64, dr util.DelRangeTask, gcPlacementRuleCache map[int64]any) (err error) {
14931493
// Get the job from the job history
14941494
var historyJob *model.Job
14951495
failpoint.Inject("mockHistoryJobForGC", func(v failpoint.Value) {
@@ -1544,16 +1544,8 @@ func (w *GCWorker) doGCPlacementRules(se sessiontypes.Session, safePoint uint64,
15441544
return
15451545
}
15461546

1547-
for _, id := range physicalTableIDs {
1548-
// Delete pd rule
1549-
failpoint.Inject("gcDeletePlacementRuleCounter", func() {})
1550-
logutil.BgLogger().Info("try delete TiFlash pd rule",
1551-
zap.Int64("tableID", id), zap.String("endKey", string(dr.EndKey)), zap.Uint64("safePoint", safePoint))
1552-
ruleID := infosync.MakeRuleID(id)
1553-
if err := infosync.DeleteTiFlashPlacementRule(context.Background(), "tiflash", ruleID); err != nil {
1554-
logutil.BgLogger().Error("delete TiFlash pd rule failed when gc",
1555-
zap.Error(err), zap.String("ruleID", ruleID), zap.Uint64("safePoint", safePoint))
1556-
}
1547+
if err := infosync.DeleteTiFlashPlacementRules(context.Background(), physicalTableIDs); err != nil {
1548+
logutil.BgLogger().Error("delete placement rules failed", zap.Error(err), zap.Int64s("tableIDs", physicalTableIDs))
15571549
}
15581550
bundles := make([]*placement.Bundle, 0, len(physicalTableIDs))
15591551
for _, id := range physicalTableIDs {

0 commit comments

Comments
 (0)