From 9e3b12ffd4e30dd9b98b1f1881ec80e8fdf76ee6 Mon Sep 17 00:00:00 2001 From: Ti Chi Robot Date: Wed, 18 Jan 2023 18:05:51 +0800 Subject: [PATCH] restore: set config value to default when failed to get config from tikv (#36051) (#40253) close pingcap/tidb#36053 --- br/pkg/conn/conn.go | 8 +++++--- br/pkg/conn/conn_test.go | 35 +++++++++++++++++++++++++++++++++-- br/pkg/task/restore.go | 5 +---- br/pkg/task/restore_raw.go | 5 +---- 4 files changed, 40 insertions(+), 13 deletions(-) diff --git a/br/pkg/conn/conn.go b/br/pkg/conn/conn.go index 48d45e6070ffa..e3d8ca0b3aeca 100755 --- a/br/pkg/conn/conn.go +++ b/br/pkg/conn/conn.go @@ -471,7 +471,8 @@ func (mgr *Mgr) GetTS(ctx context.Context) (uint64, error) { } // GetMergeRegionSizeAndCount returns the tikv config `coprocessor.region-split-size` and `coprocessor.region-split-key`. -func (mgr *Mgr) GetMergeRegionSizeAndCount(ctx context.Context, client *http.Client) (uint64, uint64, error) { +// returns the default config when failed. +func (mgr *Mgr) GetMergeRegionSizeAndCount(ctx context.Context, client *http.Client) (uint64, uint64) { regionSplitSize := DefaultMergeRegionSizeBytes regionSplitKeys := DefaultMergeRegionKeyCount type coprocessor struct { @@ -500,9 +501,10 @@ func (mgr *Mgr) GetMergeRegionSizeAndCount(ctx context.Context, client *http.Cli return nil }) if err != nil { - return 0, 0, errors.Trace(err) + log.Warn("meet error when getting config from TiKV; using default", logutil.ShortError(err)) + return DefaultMergeRegionSizeBytes, DefaultMergeRegionKeyCount } - return regionSplitSize, regionSplitKeys, nil + return regionSplitSize, regionSplitKeys } // GetConfigFromTiKV get configs from all alive tikv stores. diff --git a/br/pkg/conn/conn_test.go b/br/pkg/conn/conn_test.go index ada9b25811d0b..2840601b2201b 100644 --- a/br/pkg/conn/conn_test.go +++ b/br/pkg/conn/conn_test.go @@ -291,6 +291,38 @@ func TestGetMergeRegionSizeAndCount(t *testing.T) { regionSplitSize: DefaultMergeRegionSizeBytes, regionSplitKeys: DefaultMergeRegionKeyCount, }, + { + stores: []*metapb.Store{ + { + Id: 1, + State: metapb.StoreState_Up, + Labels: []*metapb.StoreLabel{ + { + Key: "engine", + Value: "tiflash", + }, + }, + }, + { + Id: 2, + State: metapb.StoreState_Up, + Labels: []*metapb.StoreLabel{ + { + Key: "engine", + Value: "tikv", + }, + }, + }, + }, + content: []string{ + "", + // Assuming the TiKV has failed due to some reason. + "", + }, + // no tikv detected in this case + regionSplitSize: DefaultMergeRegionSizeBytes, + regionSplitKeys: DefaultMergeRegionKeyCount, + }, { stores: []*metapb.Store{ { @@ -387,8 +419,7 @@ func TestGetMergeRegionSizeAndCount(t *testing.T) { httpCli := mockServer.Client() mgr := &Mgr{PdController: &pdutil.PdController{}} mgr.PdController.SetPDClient(pdCli) - rs, rk, err := mgr.GetMergeRegionSizeAndCount(ctx, httpCli) - require.NoError(t, err) + rs, rk := mgr.GetMergeRegionSizeAndCount(ctx, httpCli) require.Equal(t, ca.regionSplitSize, rs) require.Equal(t, ca.regionSplitKeys, rk) mockServer.Close() diff --git a/br/pkg/task/restore.go b/br/pkg/task/restore.go index fc2f6616288e1..244af431a4c54 100644 --- a/br/pkg/task/restore.go +++ b/br/pkg/task/restore.go @@ -371,10 +371,7 @@ func RunRestore(c context.Context, g glue.Glue, cmdName string, cfg *RestoreConf // according to https://github.com/pingcap/tidb/issues/34167. // we should get the real config from tikv to adapt the dynamic region. httpCli := httputil.NewClient(mgr.GetTLSConfig()) - mergeRegionSize, mergeRegionCount, err = mgr.GetMergeRegionSizeAndCount(ctx, httpCli) - if err != nil { - return errors.Trace(err) - } + mergeRegionSize, mergeRegionCount = mgr.GetMergeRegionSizeAndCount(ctx, httpCli) } keepaliveCfg.PermitWithoutStream = true diff --git a/br/pkg/task/restore_raw.go b/br/pkg/task/restore_raw.go index 452cccfad8c42..86fb69e15ce37 100644 --- a/br/pkg/task/restore_raw.go +++ b/br/pkg/task/restore_raw.go @@ -80,10 +80,7 @@ func RunRestoreRaw(c context.Context, g glue.Glue, cmdName string, cfg *RestoreR // according to https://github.com/pingcap/tidb/issues/34167. // we should get the real config from tikv to adapt the dynamic region. httpCli := httputil.NewClient(mgr.GetTLSConfig()) - mergeRegionSize, mergeRegionCount, err = mgr.GetMergeRegionSizeAndCount(ctx, httpCli) - if err != nil { - return errors.Trace(err) - } + mergeRegionSize, mergeRegionCount = mgr.GetMergeRegionSizeAndCount(ctx, httpCli) } keepaliveCfg := GetKeepalive(&cfg.Config)