From 1f333fb625f73fcb40b1cf3c0d16da60c03ce259 Mon Sep 17 00:00:00 2001 From: Jianjun Liao <36503113+Leavrth@users.noreply.github.com> Date: Fri, 23 May 2025 19:11:19 +0800 Subject: [PATCH] br: add retry for updating stats meta (#61179) close pingcap/tidb#61140 --- br/pkg/restore/snap_client/pipeline_items.go | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/br/pkg/restore/snap_client/pipeline_items.go b/br/pkg/restore/snap_client/pipeline_items.go index 26c741b772..27f2450fd9 100644 --- a/br/pkg/restore/snap_client/pipeline_items.go +++ b/br/pkg/restore/snap_client/pipeline_items.go @@ -341,7 +341,7 @@ func (buffer *statsMetaItemBuffer) UpdateMetasRest(ctx context.Context, statsHan if len(metaUpdates) == 0 { return nil } - return statsHandler.SaveMetaToStorage("br restore", false, metaUpdates...) + return buffer.saveMetaToStorageWithRetry(ctx, statsHandler, metaUpdates) } func (buffer *statsMetaItemBuffer) TryUpdateMetas(ctx context.Context, statsHandler *handle.Handle, physicalID, count int64) error { @@ -354,7 +354,23 @@ func (buffer *statsMetaItemBuffer) TryUpdateMetas(ctx context.Context, statsHand if len(metaUpdates) == 0 { return nil } - return statsHandler.SaveMetaToStorage("br restore", false, metaUpdates...) + return buffer.saveMetaToStorageWithRetry(ctx, statsHandler, metaUpdates) +} + +func (buffer *statsMetaItemBuffer) saveMetaToStorageWithRetry( + ctx context.Context, + statsHandler *handle.Handle, + metaUpdates []statstypes.MetaUpdate, +) error { + state := utils.InitialRetryState(8, 500*time.Millisecond, 500*time.Millisecond) + err := utils.WithRetry(ctx, func() error { + if err := statsHandler.SaveMetaToStorage("br restore", false, metaUpdates...); err != nil { + log.Error("failed to save meta to storage", zap.Error(err)) + return errors.Trace(err) + } + return nil + }, &state) + return errors.Trace(err) } func calculateRowCountForPhysicalTable(files []*backuppb.File) int64 {