From ee52a5f2f441c1661de5b5f06557eeccf857495f Mon Sep 17 00:00:00 2001 From: 3pointer Date: Wed, 7 Feb 2024 16:07:27 +0800 Subject: [PATCH] br: skip fresh check when user has specified --filter in restore full (#51010) close pingcap/tidb#51009 --- br/pkg/restore/client.go | 4 ++-- br/pkg/restore/client_test.go | 18 +++++++++--------- br/pkg/task/restore.go | 2 +- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/br/pkg/restore/client.go b/br/pkg/restore/client.go index c207e694d320f..4bce7b8336c0c 100644 --- a/br/pkg/restore/client.go +++ b/br/pkg/restore/client.go @@ -1072,8 +1072,8 @@ func (rc *Client) createTablesInWorkerPool(ctx context.Context, dom *domain.Doma } // NeedCheckFreshCluster is every time. except restore from a checkpoint or user has not set filter argument. -func (rc *Client) NeedCheckFreshCluster(ExplicitFilter bool, checkpointsMap map[int64]map[string]struct{}) bool { - return rc.IsFull() && !ExplicitFilter && len(checkpointsMap) == 0 +func (rc *Client) NeedCheckFreshCluster(ExplicitFilter bool, firstRun bool) bool { + return rc.IsFull() && !ExplicitFilter && firstRun } // CheckTargetClusterFresh check whether the target cluster is fresh or not diff --git a/br/pkg/restore/client_test.go b/br/pkg/restore/client_test.go index 3141b807fb1c7..adc1ec9d03472 100644 --- a/br/pkg/restore/client_test.go +++ b/br/pkg/restore/client_test.go @@ -134,24 +134,24 @@ func TestNeedCheckTargetClusterFresh(t *testing.T) { err := client.Init(g, cluster.Storage) require.NoError(t, err) - require.True(t, client.NeedCheckFreshCluster(false, nil)) + // not set filter and first run with checkpoint + require.True(t, client.NeedCheckFreshCluster(false, true)) - checkpointsMap := make(map[int64]map[string]struct{}) - require.True(t, client.NeedCheckFreshCluster(false, checkpointsMap)) + // skip check when has checkpoint + require.False(t, client.NeedCheckFreshCluster(false, false)) - // skip check when has checkpoints - checkpointsMap[1] = make(map[string]struct{}) - require.False(t, client.NeedCheckFreshCluster(false, checkpointsMap)) + // skip check when set --filter + require.False(t, client.NeedCheckFreshCluster(true, false)) - // skip check when has set --filter - require.False(t, client.NeedCheckFreshCluster(true, checkpointsMap)) + // skip check when has set --filter and has checkpoint + require.False(t, client.NeedCheckFreshCluster(true, true)) require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/br/pkg/restore/mock-incr-backup-data", "return(false)")) defer func() { require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/br/pkg/restore/mock-incr-backup-data")) }() // skip check when increment backup - require.False(t, client.NeedCheckFreshCluster(false, nil)) + require.False(t, client.NeedCheckFreshCluster(false, true)) } func TestCheckTargetClusterFresh(t *testing.T) { diff --git a/br/pkg/task/restore.go b/br/pkg/task/restore.go index 34e24580d3665..f8e5de0ad1df3 100644 --- a/br/pkg/task/restore.go +++ b/br/pkg/task/restore.go @@ -771,7 +771,7 @@ func runRestore(c context.Context, g glue.Glue, cmdName string, cfg *RestoreConf } if isFullRestore(cmdName) { - if client.NeedCheckFreshCluster(cfg.ExplicitFilter, checkpointSetWithTableID) { + if client.NeedCheckFreshCluster(cfg.ExplicitFilter, checkpointFirstRun) { if err = client.CheckTargetClusterFresh(ctx); err != nil { return errors.Trace(err) }