diff --git a/DEPS.bzl b/DEPS.bzl index cef7b15c5701e..d3f48cccc730b 100644 --- a/DEPS.bzl +++ b/DEPS.bzl @@ -5483,6 +5483,13 @@ def go_deps(): sum = "h1:xqgm/S+aQvhWFTtR0XK3Jvg7z8kGV8P4X14IzwN3Eqk=", version = "v1.2.0", ) + go_repository( + name = "org_uber_go_mock", + build_file_proto_mode = "disable", + importpath = "go.uber.org/mock", + sum = "h1:VcM4ZOtdbR4f6VXfiOpwpVJDL6lCReaZ6mw31wqh7KU=", + version = "v0.4.0", + ) go_repository( name = "org_uber_go_multierr", build_file_proto_mode = "disable_global", diff --git a/br/pkg/lightning/backend/BUILD.bazel b/br/pkg/lightning/backend/BUILD.bazel index 405d5bcc7ecd0..d2dd56338bf99 100644 --- a/br/pkg/lightning/backend/BUILD.bazel +++ b/br/pkg/lightning/backend/BUILD.bazel @@ -34,10 +34,10 @@ go_test( "//br/pkg/mock", "//parser/mysql", "@com_github_go_sql_driver_mysql//:mysql", - "@com_github_golang_mock//gomock", "@com_github_google_uuid//:uuid", "@com_github_pingcap_errors//:errors", "@com_github_stretchr_testify//require", "@com_github_tikv_client_go_v2//oracle", + "@org_uber_go_mock//gomock", ], ) diff --git a/br/pkg/lightning/backend/backend.go b/br/pkg/lightning/backend/backend.go index eac01a76662d2..4569b1beeded8 100644 --- a/br/pkg/lightning/backend/backend.go +++ b/br/pkg/lightning/backend/backend.go @@ -127,6 +127,10 @@ type CheckCtx struct { // TargetInfoGetter defines the interfaces to get target information. type TargetInfoGetter interface { + // FetchRemoteDBModels obtains the models of all databases. Currently, only + // the database name is filled. + FetchRemoteDBModels(ctx context.Context) ([]*model.DBInfo, error) + // FetchRemoteTableModels obtains the models of all tables given the schema // name. The returned table info does not need to be precise if the encoder, // is not requiring them, but must at least fill in the following fields for @@ -285,6 +289,10 @@ func (be Backend) FetchRemoteTableModels(ctx context.Context, schemaName string) return be.abstract.FetchRemoteTableModels(ctx, schemaName) } +func (be Backend) FetchRemoteDBModels(ctx context.Context) ([]*model.DBInfo, error) { + return be.abstract.FetchRemoteDBModels(ctx) +} + func (be Backend) FlushAll(ctx context.Context) error { return be.abstract.FlushAllEngines(ctx) } diff --git a/br/pkg/lightning/backend/backend_test.go b/br/pkg/lightning/backend/backend_test.go index 73adc91deff9f..d85df174938a0 100644 --- a/br/pkg/lightning/backend/backend_test.go +++ b/br/pkg/lightning/backend/backend_test.go @@ -7,7 +7,6 @@ import ( "time" gmysql "github.com/go-sql-driver/mysql" - "github.com/golang/mock/gomock" "github.com/google/uuid" "github.com/pingcap/errors" "github.com/pingcap/tidb/br/pkg/lightning/backend" @@ -16,18 +15,19 @@ import ( "github.com/pingcap/tidb/parser/mysql" "github.com/stretchr/testify/require" "github.com/tikv/client-go/v2/oracle" + "go.uber.org/mock/gomock" ) type backendSuite struct { controller *gomock.Controller - mockBackend *mock.MockBackend + mockBackend *mock.MockAbstractBackend backend backend.Backend ts uint64 } func createBackendSuite(c gomock.TestReporter) *backendSuite { controller := gomock.NewController(c) - mockBackend := mock.NewMockBackend(controller) + mockBackend := mock.NewMockAbstractBackend(controller) return &backendSuite{ controller: controller, mockBackend: mockBackend, diff --git a/br/pkg/lightning/backend/local/BUILD.bazel b/br/pkg/lightning/backend/local/BUILD.bazel index c17ad0b92ec1c..1865104c32863 100644 --- a/br/pkg/lightning/backend/local/BUILD.bazel +++ b/br/pkg/lightning/backend/local/BUILD.bazel @@ -128,7 +128,6 @@ go_test( "@com_github_cockroachdb_pebble//sstable", "@com_github_coreos_go_semver//semver", "@com_github_docker_go_units//:go-units", - "@com_github_golang_mock//gomock", "@com_github_google_uuid//:uuid", "@com_github_pingcap_errors//:errors", "@com_github_pingcap_failpoint//:failpoint", @@ -142,6 +141,7 @@ go_test( "@org_golang_google_grpc//codes", "@org_golang_google_grpc//status", "@org_uber_go_atomic//:atomic", + "@org_uber_go_mock//gomock", "@org_uber_go_zap//:zap", ], ) diff --git a/br/pkg/lightning/backend/local/local.go b/br/pkg/lightning/backend/local/local.go index d56f68a999bd5..336e57ccdc90e 100644 --- a/br/pkg/lightning/backend/local/local.go +++ b/br/pkg/lightning/backend/local/local.go @@ -247,6 +247,11 @@ func NewTargetInfoGetter(tls *common.TLS, g glue.Glue, pdCli pd.Client) backend. } } +// FetchRemoteDBModels implements the `backend.TargetInfoGetter` interface. +func (g *targetInfoGetter) FetchRemoteDBModels(ctx context.Context) ([]*model.DBInfo, error) { + return tikv.FetchRemoteDBModelsFromTLS(ctx, g.tls) +} + // FetchRemoteTableModels obtains the models of all tables given the schema name. // It implements the `TargetInfoGetter` interface. func (g *targetInfoGetter) FetchRemoteTableModels(ctx context.Context, schemaName string) ([]*model.TableInfo, error) { @@ -1950,6 +1955,10 @@ func (local *local) CheckRequirements(ctx context.Context, checkCtx *backend.Che return local.targetInfoGetter.CheckRequirements(ctx, checkCtx) } +func (local *local) FetchRemoteDBModels(ctx context.Context) ([]*model.DBInfo, error) { + return local.targetInfoGetter.FetchRemoteDBModels(ctx) +} + func (local *local) FetchRemoteTableModels(ctx context.Context, schemaName string) ([]*model.TableInfo, error) { return local.targetInfoGetter.FetchRemoteTableModels(ctx, schemaName) } diff --git a/br/pkg/lightning/backend/local/local_check_test.go b/br/pkg/lightning/backend/local/local_check_test.go index 8c16e88e9de4d..b8eeba26484f7 100644 --- a/br/pkg/lightning/backend/local/local_check_test.go +++ b/br/pkg/lightning/backend/local/local_check_test.go @@ -19,12 +19,12 @@ import ( "testing" "github.com/coreos/go-semver/semver" - "github.com/golang/mock/gomock" "github.com/pingcap/tidb/br/pkg/lightning/backend" "github.com/pingcap/tidb/br/pkg/lightning/backend/local" "github.com/pingcap/tidb/br/pkg/lightning/mydump" "github.com/pingcap/tidb/br/pkg/mock" "github.com/stretchr/testify/require" + "go.uber.org/mock/gomock" ) func TestCheckRequirementsTiFlash(t *testing.T) { diff --git a/br/pkg/lightning/backend/noop/noop.go b/br/pkg/lightning/backend/noop/noop.go index deb1d46ccab46..ed16feac2ca6b 100644 --- a/br/pkg/lightning/backend/noop/noop.go +++ b/br/pkg/lightning/backend/noop/noop.go @@ -93,6 +93,10 @@ func (b noopBackend) CheckRequirements(context.Context, *backend.CheckCtx) error return nil } +func (b noopBackend) FetchRemoteDBModels(ctx context.Context) ([]*model.DBInfo, error) { + return nil, nil +} + // FetchRemoteTableModels obtains the models of all tables given the schema // name. The returned table info does not need to be precise if the encoder, // is not requiring them, but must at least fill in the following fields for diff --git a/br/pkg/lightning/backend/tidb/tidb.go b/br/pkg/lightning/backend/tidb/tidb.go index 409e06c3d9ad8..f9938607080ec 100644 --- a/br/pkg/lightning/backend/tidb/tidb.go +++ b/br/pkg/lightning/backend/tidb/tidb.go @@ -126,6 +126,38 @@ func NewTargetInfoGetter(db *sql.DB) backend.TargetInfoGetter { } } +// FetchRemoteDBModels implements the `backend.TargetInfoGetter` interface. +func (b *targetInfoGetter) FetchRemoteDBModels(ctx context.Context) ([]*model.DBInfo, error) { + results := []*model.DBInfo{} + logger := log.FromContext(ctx) + s := common.SQLWithRetry{ + DB: b.db, + Logger: logger, + } + err := s.Transact(ctx, "fetch db models", func(_ context.Context, tx *sql.Tx) error { + results = results[:0] + + rows, e := tx.Query("SHOW DATABASES") + if e != nil { + return e + } + defer rows.Close() + + for rows.Next() { + var dbName string + if e := rows.Scan(&dbName); e != nil { + return e + } + dbInfo := &model.DBInfo{ + Name: model.NewCIStr(dbName), + } + results = append(results, dbInfo) + } + return rows.Err() + }) + return results, err +} + // FetchRemoteTableModels obtains the models of all tables given the schema name. // It implements the `backend.TargetInfoGetter` interface. // TODO: refactor @@ -753,6 +785,10 @@ func (be *tidbBackend) execStmts(ctx context.Context, stmtTasks []stmtTask, tabl return nil } +func (be *tidbBackend) FetchRemoteDBModels(ctx context.Context) ([]*model.DBInfo, error) { + return be.targetInfoGetter.FetchRemoteDBModels(ctx) +} + func (be *tidbBackend) FetchRemoteTableModels(ctx context.Context, schemaName string) ([]*model.TableInfo, error) { return be.targetInfoGetter.FetchRemoteTableModels(ctx, schemaName) } diff --git a/br/pkg/lightning/restore/BUILD.bazel b/br/pkg/lightning/restore/BUILD.bazel index 3c2be48b86e19..88358ae66f213 100644 --- a/br/pkg/lightning/restore/BUILD.bazel +++ b/br/pkg/lightning/restore/BUILD.bazel @@ -155,7 +155,6 @@ go_test( "@com_github_data_dog_go_sqlmock//:go-sqlmock", "@com_github_docker_go_units//:go-units", "@com_github_go_sql_driver_mysql//:mysql", - "@com_github_golang_mock//gomock", "@com_github_google_uuid//:uuid", "@com_github_pingcap_errors//:errors", "@com_github_pingcap_failpoint//:failpoint", @@ -173,6 +172,7 @@ go_test( "@io_etcd_go_etcd_client_v3//:client", "@io_etcd_go_etcd_tests_v3//integration", "@org_uber_go_atomic//:atomic", + "@org_uber_go_mock//gomock", "@org_uber_go_zap//:zap", ], ) diff --git a/br/pkg/lightning/restore/chunk_restore_test.go b/br/pkg/lightning/restore/chunk_restore_test.go index 452e82821c9fa..74ffc3a2efe66 100644 --- a/br/pkg/lightning/restore/chunk_restore_test.go +++ b/br/pkg/lightning/restore/chunk_restore_test.go @@ -25,7 +25,6 @@ import ( "sync" "testing" - "github.com/golang/mock/gomock" "github.com/pingcap/errors" "github.com/pingcap/failpoint" "github.com/pingcap/tidb/br/pkg/lightning/backend" @@ -50,6 +49,7 @@ import ( filter "github.com/pingcap/tidb/util/table-filter" "github.com/stretchr/testify/require" "github.com/stretchr/testify/suite" + "go.uber.org/mock/gomock" ) type chunkRestoreSuite struct { @@ -95,7 +95,7 @@ func (s *chunkRestoreSuite) TearDownTest() { func (s *chunkRestoreSuite) TestDeliverLoopCancel() { controller := gomock.NewController(s.T()) defer controller.Finish() - mockBackend := mock.NewMockBackend(controller) + mockBackend := mock.NewMockAbstractBackend(controller) mockBackend.EXPECT().MakeEmptyRows().Return(kv.MakeRowsFromKvPairs(nil)).AnyTimes() rc := &Controller{backend: backend.MakeBackend(mockBackend)} @@ -113,7 +113,7 @@ func (s *chunkRestoreSuite) TestDeliverLoopEmptyData() { controller := gomock.NewController(s.T()) defer controller.Finish() - mockBackend := mock.NewMockBackend(controller) + mockBackend := mock.NewMockAbstractBackend(controller) importer := backend.MakeBackend(mockBackend) mockBackend.EXPECT().OpenEngine(ctx, gomock.Any(), gomock.Any()).Return(nil).Times(2) @@ -168,7 +168,7 @@ func (s *chunkRestoreSuite) TestDeliverLoop() { controller := gomock.NewController(s.T()) defer controller.Finish() - mockBackend := mock.NewMockBackend(controller) + mockBackend := mock.NewMockAbstractBackend(controller) importer := backend.MakeBackend(mockBackend) mockBackend.EXPECT().OpenEngine(ctx, gomock.Any(), gomock.Any()).Return(nil).Times(2) @@ -627,7 +627,7 @@ func (s *chunkRestoreSuite) TestRestore() { controller := gomock.NewController(s.T()) defer controller.Finish() - mockBackend := mock.NewMockBackend(controller) + mockBackend := mock.NewMockAbstractBackend(controller) importer := backend.MakeBackend(mockBackend) mockBackend.EXPECT().OpenEngine(ctx, gomock.Any(), gomock.Any()).Return(nil).Times(2) diff --git a/br/pkg/lightning/restore/get_pre_info.go b/br/pkg/lightning/restore/get_pre_info.go index 7085202770bd1..4c30c05094e0b 100644 --- a/br/pkg/lightning/restore/get_pre_info.go +++ b/br/pkg/lightning/restore/get_pre_info.go @@ -86,6 +86,8 @@ type PreRestoreInfoGetter interface { // TargetInfoGetter defines the operations to get information from target. type TargetInfoGetter interface { + // FetchRemoteDBModels fetches the database structures from the remote target. + FetchRemoteDBModels(ctx context.Context) ([]*model.DBInfo, error) // FetchRemoteTableModels fetches the table structures from the remote target. FetchRemoteTableModels(ctx context.Context, schemaName string) ([]*model.TableInfo, error) // CheckVersionRequirements performs the check whether the target satisfies the version requirements. @@ -153,6 +155,11 @@ func NewTargetInfoGetterImpl( }, nil } +// FetchRemoteDBModels implements TargetInfoGetter. +func (g *TargetInfoGetterImpl) FetchRemoteDBModels(ctx context.Context) ([]*model.DBInfo, error) { + return g.backend.FetchRemoteDBModels(ctx) +} + // FetchRemoteTableModels fetches the table structures from the remote target. // It implements the TargetInfoGetter interface. func (g *TargetInfoGetterImpl) FetchRemoteTableModels(ctx context.Context, schemaName string) ([]*model.TableInfo, error) { @@ -785,6 +792,12 @@ func (p *PreRestoreInfoGetterImpl) IsTableEmpty(ctx context.Context, schemaName return p.targetInfoGetter.IsTableEmpty(ctx, schemaName, tableName) } +// FetchRemoteDBModels fetches the database structures from the remote target. +// It implements the PreImportInfoGetter interface. +func (p *PreRestoreInfoGetterImpl) FetchRemoteDBModels(ctx context.Context) ([]*model.DBInfo, error) { + return p.targetInfoGetter.FetchRemoteDBModels(ctx) +} + // FetchRemoteTableModels fetches the table structures from the remote target. // It implements the PreRestoreInfoGetter interface. func (p *PreRestoreInfoGetterImpl) FetchRemoteTableModels(ctx context.Context, schemaName string) ([]*model.TableInfo, error) { diff --git a/br/pkg/lightning/restore/mock/mock.go b/br/pkg/lightning/restore/mock/mock.go index 5556e1caf3363..248f6bbbbac52 100644 --- a/br/pkg/lightning/restore/mock/mock.go +++ b/br/pkg/lightning/restore/mock/mock.go @@ -211,6 +211,15 @@ func (t *MockTargetInfo) SetTableInfo(schemaName string, tableName string, tblIn t.dbTblInfoMap[schemaName][tableName] = tblInfo } +// FetchRemoteDBModels implements the TargetInfoGetter interface. +func (t *MockTargetInfo) FetchRemoteDBModels(_ context.Context) ([]*model.DBInfo, error) { + resultInfos := []*model.DBInfo{} + for dbName := range t.dbTblInfoMap { + resultInfos = append(resultInfos, &model.DBInfo{Name: model.NewCIStr(dbName)}) + } + return resultInfos, nil +} + // FetchRemoteTableModels fetches the table structures from the remote target. // It implements the TargetInfoGetter interface. func (t *MockTargetInfo) FetchRemoteTableModels(ctx context.Context, schemaName string) ([]*model.TableInfo, error) { diff --git a/br/pkg/lightning/restore/restore.go b/br/pkg/lightning/restore/restore.go index be5446f66d1f2..a8c5ddcdda2a6 100644 --- a/br/pkg/lightning/restore/restore.go +++ b/br/pkg/lightning/restore/restore.go @@ -550,29 +550,47 @@ type restoreSchemaWorker struct { func (worker *restoreSchemaWorker) addJob(sqlStr string, job *schemaJob) error { stmts, err := createIfNotExistsStmt(worker.glue.GetParser(), sqlStr, job.dbName, job.tblName) if err != nil { - worker.logger.Warn("failed to rewrite statement, will use raw input instead", - zap.String("db", job.dbName), - zap.String("table", job.tblName), - zap.String("statement", sqlStr), - zap.Error(err)) - job.stmts = []string{sqlStr} - } else { - job.stmts = stmts + return errors.Trace(err) } + job.stmts = stmts return worker.appendJob(job) } func (worker *restoreSchemaWorker) makeJobs( dbMetas []*mydump.MDDatabaseMeta, + getDBs func(context.Context) ([]*model.DBInfo, error), getTables func(context.Context, string) ([]*model.TableInfo, error), ) error { defer func() { close(worker.jobCh) worker.quit() }() - var err error + + if len(dbMetas) == 0 { + return nil + } + // 1. restore databases, execute statements concurrency + + dbs, err := getDBs(worker.ctx) + if err != nil { + worker.logger.Warn("get databases from downstream failed", zap.Error(err)) + } + dbSet := make(set.StringSet, len(dbs)) + for _, db := range dbs { + dbSet.Insert(db.Name.L) + } + for _, dbMeta := range dbMetas { + // if downstream already has this database, we can skip ddl job + if dbSet.Exist(strings.ToLower(dbMeta.Name)) { + worker.logger.Info( + "database already exists in downstream, skip processing the source file", + zap.String("db", dbMeta.Name), + ) + continue + } + sql := dbMeta.GetSchema(worker.ctx, worker.store) err = worker.addJob(sql, &schemaJob{ dbName: dbMeta.Name, @@ -587,18 +605,28 @@ func (worker *restoreSchemaWorker) makeJobs( if err != nil { return err } + // 2. restore tables, execute statements concurrency + for _, dbMeta := range dbMetas { // we can ignore error here, and let check failed later if schema not match - tables, _ := getTables(worker.ctx, dbMeta.Name) - tableMap := make(map[string]struct{}) + tables, err := getTables(worker.ctx, dbMeta.Name) + if err != nil { + worker.logger.Warn("get tables from downstream failed", zap.Error(err)) + } + tableSet := make(set.StringSet, len(tables)) for _, t := range tables { - tableMap[t.Name.L] = struct{}{} + tableSet.Insert(t.Name.L) } for _, tblMeta := range dbMeta.Tables { - if _, ok := tableMap[strings.ToLower(tblMeta.Name)]; ok { + if tableSet.Exist(strings.ToLower(tblMeta.Name)) { // we already has this table in TiDB. // we should skip ddl job and let SchemaValid check. + worker.logger.Info( + "table already exists in downstream, skip processing the source file", + zap.String("db", dbMeta.Name), + zap.String("table", tblMeta.Name), + ) continue } else if tblMeta.SchemaFile.FileMeta.Path == "" { return common.ErrSchemaNotExists.GenWithStackByArgs(dbMeta.Name, tblMeta.Name) @@ -797,7 +825,7 @@ func (rc *Controller) restoreSchema(ctx context.Context) error { for i := 0; i < concurrency; i++ { go worker.doJob() } - err := worker.makeJobs(rc.dbMetas, rc.preInfoGetter.FetchRemoteTableModels) + err := worker.makeJobs(rc.dbMetas, rc.preInfoGetter.FetchRemoteDBModels, rc.preInfoGetter.FetchRemoteTableModels) logTask.End(zap.ErrorLevel, err) if err != nil { return err diff --git a/br/pkg/lightning/restore/restore_schema_test.go b/br/pkg/lightning/restore/restore_schema_test.go index a0f962abec6d2..ffb80a8e75699 100644 --- a/br/pkg/lightning/restore/restore_schema_test.go +++ b/br/pkg/lightning/restore/restore_schema_test.go @@ -21,7 +21,6 @@ import ( "testing" "github.com/DATA-DOG/go-sqlmock" - "github.com/golang/mock/gomock" "github.com/pingcap/errors" "github.com/pingcap/tidb/br/pkg/lightning/backend" "github.com/pingcap/tidb/br/pkg/lightning/checkpoints" @@ -38,6 +37,7 @@ import ( filter "github.com/pingcap/tidb/util/table-filter" "github.com/stretchr/testify/require" "github.com/stretchr/testify/suite" + "go.uber.org/mock/gomock" ) type restoreSchemaSuite struct { @@ -133,7 +133,11 @@ func (s *restoreSchemaSuite) SetupSuite() { //nolint:interfacer // change test case signature might cause Check failed to find this test case? func (s *restoreSchemaSuite) SetupTest() { s.controller, s.ctx = gomock.WithContext(context.Background(), s.T()) - mockBackend := mock.NewMockBackend(s.controller) + mockBackend := mock.NewMockAbstractBackend(s.controller) + mockBackend.EXPECT(). + FetchRemoteDBModels(gomock.Any()). + AnyTimes(). + Return([]*model.DBInfo{{Name: model.NewCIStr("fakedb")}}, nil) mockBackend.EXPECT(). FetchRemoteTableModels(gomock.Any(), gomock.Any()). AnyTimes(). diff --git a/br/pkg/lightning/restore/table_restore_test.go b/br/pkg/lightning/restore/table_restore_test.go index 923e3fdd34115..df61ac871b926 100644 --- a/br/pkg/lightning/restore/table_restore_test.go +++ b/br/pkg/lightning/restore/table_restore_test.go @@ -30,7 +30,6 @@ import ( "github.com/DATA-DOG/go-sqlmock" "github.com/docker/go-units" - "github.com/golang/mock/gomock" "github.com/google/uuid" "github.com/pingcap/errors" "github.com/pingcap/failpoint" @@ -69,6 +68,7 @@ import ( "github.com/stretchr/testify/suite" "github.com/tikv/client-go/v2/testutils" pd "github.com/tikv/pd/client" + "go.uber.org/mock/gomock" ) type tableRestoreSuiteBase struct { @@ -333,7 +333,7 @@ func (w errorLocalWriter) Close(context.Context) (backend.ChunkFlushStatus, erro func (s *tableRestoreSuite) TestRestoreEngineFailed() { ctx := context.Background() ctrl := gomock.NewController(s.T()) - mockBackend := mock.NewMockBackend(ctrl) + mockBackend := mock.NewMockAbstractBackend(ctrl) rc := &Controller{ cfg: s.cfg, pauser: DeliverPauser, @@ -816,7 +816,7 @@ func (s *tableRestoreSuite) TestAnalyzeTable() { func (s *tableRestoreSuite) TestImportKVSuccess() { controller := gomock.NewController(s.T()) defer controller.Finish() - mockBackend := mock.NewMockBackend(controller) + mockBackend := mock.NewMockAbstractBackend(controller) importer := backend.MakeBackend(mockBackend) chptCh := make(chan saveCp) defer close(chptCh) @@ -851,7 +851,7 @@ func (s *tableRestoreSuite) TestImportKVSuccess() { func (s *tableRestoreSuite) TestImportKVFailure() { controller := gomock.NewController(s.T()) defer controller.Finish() - mockBackend := mock.NewMockBackend(controller) + mockBackend := mock.NewMockAbstractBackend(controller) importer := backend.MakeBackend(mockBackend) chptCh := make(chan saveCp) defer close(chptCh) @@ -1409,7 +1409,7 @@ func (s *tableRestoreSuite) TestEstimate() { ctx := context.Background() controller := gomock.NewController(s.T()) defer controller.Finish() - mockBackend := mock.NewMockBackend(controller) + mockBackend := mock.NewMockAbstractBackend(controller) idAlloc := kv.NewPanickingAllocators(0) tbl, err := tables.TableFromMeta(idAlloc, s.tableInfo.Core) require.NoError(s.T(), err) diff --git a/br/pkg/mock/BUILD.bazel b/br/pkg/mock/BUILD.bazel index d7bb24d4d3e04..55396da2476b0 100644 --- a/br/pkg/mock/BUILD.bazel +++ b/br/pkg/mock/BUILD.bazel @@ -47,6 +47,7 @@ go_library( "@io_opencensus_go//stats/view", "@org_golang_google_grpc//:grpc", "@org_golang_google_grpc//metadata", + "@org_uber_go_mock//gomock", "@org_uber_go_zap//:zap", ], ) diff --git a/br/pkg/mock/backend.go b/br/pkg/mock/backend.go index 291feee59272a..6900513ff2f57 100644 --- a/br/pkg/mock/backend.go +++ b/br/pkg/mock/backend.go @@ -1,6 +1,10 @@ // Code generated by MockGen. DO NOT EDIT. // Source: github.com/pingcap/tidb/br/pkg/lightning/backend (interfaces: AbstractBackend,EngineWriter) - +// +// Generated by this command: +// +// mockgen -package mock github.com/pingcap/tidb/br/pkg/lightning/backend AbstractBackend,EngineWriter +// // Package mock is a generated GoMock package. package mock @@ -9,40 +13,40 @@ import ( reflect "reflect" time "time" - gomock "github.com/golang/mock/gomock" uuid "github.com/google/uuid" backend "github.com/pingcap/tidb/br/pkg/lightning/backend" kv "github.com/pingcap/tidb/br/pkg/lightning/backend/kv" config "github.com/pingcap/tidb/br/pkg/lightning/config" model "github.com/pingcap/tidb/parser/model" table "github.com/pingcap/tidb/table" + gomock "go.uber.org/mock/gomock" ) -// MockBackend is a mock of AbstractBackend interface. -type MockBackend struct { +// MockAbstractBackend is a mock of AbstractBackend interface. +type MockAbstractBackend struct { ctrl *gomock.Controller - recorder *MockBackendMockRecorder + recorder *MockAbstractBackendMockRecorder } -// MockBackendMockRecorder is the mock recorder for MockBackend. -type MockBackendMockRecorder struct { - mock *MockBackend +// MockAbstractBackendMockRecorder is the mock recorder for MockAbstractBackend. +type MockAbstractBackendMockRecorder struct { + mock *MockAbstractBackend } -// NewMockBackend creates a new mock instance. -func NewMockBackend(ctrl *gomock.Controller) *MockBackend { - mock := &MockBackend{ctrl: ctrl} - mock.recorder = &MockBackendMockRecorder{mock} +// NewMockAbstractBackend creates a new mock instance. +func NewMockAbstractBackend(ctrl *gomock.Controller) *MockAbstractBackend { + mock := &MockAbstractBackend{ctrl: ctrl} + mock.recorder = &MockAbstractBackendMockRecorder{mock} return mock } // EXPECT returns an object that allows the caller to indicate expected use. -func (m *MockBackend) EXPECT() *MockBackendMockRecorder { +func (m *MockAbstractBackend) EXPECT() *MockAbstractBackendMockRecorder { return m.recorder } // CheckRequirements mocks base method. -func (m *MockBackend) CheckRequirements(arg0 context.Context, arg1 *backend.CheckCtx) error { +func (m *MockAbstractBackend) CheckRequirements(arg0 context.Context, arg1 *backend.CheckCtx) error { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "CheckRequirements", arg0, arg1) ret0, _ := ret[0].(error) @@ -50,13 +54,13 @@ func (m *MockBackend) CheckRequirements(arg0 context.Context, arg1 *backend.Chec } // CheckRequirements indicates an expected call of CheckRequirements. -func (mr *MockBackendMockRecorder) CheckRequirements(arg0, arg1 interface{}) *gomock.Call { +func (mr *MockAbstractBackendMockRecorder) CheckRequirements(arg0, arg1 any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CheckRequirements", reflect.TypeOf((*MockBackend)(nil).CheckRequirements), arg0, arg1) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CheckRequirements", reflect.TypeOf((*MockAbstractBackend)(nil).CheckRequirements), arg0, arg1) } // CleanupEngine mocks base method. -func (m *MockBackend) CleanupEngine(arg0 context.Context, arg1 uuid.UUID) error { +func (m *MockAbstractBackend) CleanupEngine(arg0 context.Context, arg1 uuid.UUID) error { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "CleanupEngine", arg0, arg1) ret0, _ := ret[0].(error) @@ -64,25 +68,25 @@ func (m *MockBackend) CleanupEngine(arg0 context.Context, arg1 uuid.UUID) error } // CleanupEngine indicates an expected call of CleanupEngine. -func (mr *MockBackendMockRecorder) CleanupEngine(arg0, arg1 interface{}) *gomock.Call { +func (mr *MockAbstractBackendMockRecorder) CleanupEngine(arg0, arg1 any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CleanupEngine", reflect.TypeOf((*MockBackend)(nil).CleanupEngine), arg0, arg1) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CleanupEngine", reflect.TypeOf((*MockAbstractBackend)(nil).CleanupEngine), arg0, arg1) } // Close mocks base method. -func (m *MockBackend) Close() { +func (m *MockAbstractBackend) Close() { m.ctrl.T.Helper() m.ctrl.Call(m, "Close") } // Close indicates an expected call of Close. -func (mr *MockBackendMockRecorder) Close() *gomock.Call { +func (mr *MockAbstractBackendMockRecorder) Close() *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Close", reflect.TypeOf((*MockBackend)(nil).Close)) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Close", reflect.TypeOf((*MockAbstractBackend)(nil).Close)) } // CloseEngine mocks base method. -func (m *MockBackend) CloseEngine(arg0 context.Context, arg1 *backend.EngineConfig, arg2 uuid.UUID) error { +func (m *MockAbstractBackend) CloseEngine(arg0 context.Context, arg1 *backend.EngineConfig, arg2 uuid.UUID) error { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "CloseEngine", arg0, arg1, arg2) ret0, _ := ret[0].(error) @@ -90,13 +94,13 @@ func (m *MockBackend) CloseEngine(arg0 context.Context, arg1 *backend.EngineConf } // CloseEngine indicates an expected call of CloseEngine. -func (mr *MockBackendMockRecorder) CloseEngine(arg0, arg1, arg2 interface{}) *gomock.Call { +func (mr *MockAbstractBackendMockRecorder) CloseEngine(arg0, arg1, arg2 any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CloseEngine", reflect.TypeOf((*MockBackend)(nil).CloseEngine), arg0, arg1, arg2) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CloseEngine", reflect.TypeOf((*MockAbstractBackend)(nil).CloseEngine), arg0, arg1, arg2) } // CollectLocalDuplicateRows mocks base method. -func (m *MockBackend) CollectLocalDuplicateRows(arg0 context.Context, arg1 table.Table, arg2 string, arg3 *kv.SessionOptions) (bool, error) { +func (m *MockAbstractBackend) CollectLocalDuplicateRows(arg0 context.Context, arg1 table.Table, arg2 string, arg3 *kv.SessionOptions) (bool, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "CollectLocalDuplicateRows", arg0, arg1, arg2, arg3) ret0, _ := ret[0].(bool) @@ -105,13 +109,13 @@ func (m *MockBackend) CollectLocalDuplicateRows(arg0 context.Context, arg1 table } // CollectLocalDuplicateRows indicates an expected call of CollectLocalDuplicateRows. -func (mr *MockBackendMockRecorder) CollectLocalDuplicateRows(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { +func (mr *MockAbstractBackendMockRecorder) CollectLocalDuplicateRows(arg0, arg1, arg2, arg3 any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CollectLocalDuplicateRows", reflect.TypeOf((*MockBackend)(nil).CollectLocalDuplicateRows), arg0, arg1, arg2, arg3) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CollectLocalDuplicateRows", reflect.TypeOf((*MockAbstractBackend)(nil).CollectLocalDuplicateRows), arg0, arg1, arg2, arg3) } // CollectRemoteDuplicateRows mocks base method. -func (m *MockBackend) CollectRemoteDuplicateRows(arg0 context.Context, arg1 table.Table, arg2 string, arg3 *kv.SessionOptions) (bool, error) { +func (m *MockAbstractBackend) CollectRemoteDuplicateRows(arg0 context.Context, arg1 table.Table, arg2 string, arg3 *kv.SessionOptions) (bool, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "CollectRemoteDuplicateRows", arg0, arg1, arg2, arg3) ret0, _ := ret[0].(bool) @@ -120,13 +124,13 @@ func (m *MockBackend) CollectRemoteDuplicateRows(arg0 context.Context, arg1 tabl } // CollectRemoteDuplicateRows indicates an expected call of CollectRemoteDuplicateRows. -func (mr *MockBackendMockRecorder) CollectRemoteDuplicateRows(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { +func (mr *MockAbstractBackendMockRecorder) CollectRemoteDuplicateRows(arg0, arg1, arg2, arg3 any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CollectRemoteDuplicateRows", reflect.TypeOf((*MockBackend)(nil).CollectRemoteDuplicateRows), arg0, arg1, arg2, arg3) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CollectRemoteDuplicateRows", reflect.TypeOf((*MockAbstractBackend)(nil).CollectRemoteDuplicateRows), arg0, arg1, arg2, arg3) } // EngineFileSizes mocks base method. -func (m *MockBackend) EngineFileSizes() []backend.EngineFileSize { +func (m *MockAbstractBackend) EngineFileSizes() []backend.EngineFileSize { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "EngineFileSizes") ret0, _ := ret[0].([]backend.EngineFileSize) @@ -134,13 +138,28 @@ func (m *MockBackend) EngineFileSizes() []backend.EngineFileSize { } // EngineFileSizes indicates an expected call of EngineFileSizes. -func (mr *MockBackendMockRecorder) EngineFileSizes() *gomock.Call { +func (mr *MockAbstractBackendMockRecorder) EngineFileSizes() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EngineFileSizes", reflect.TypeOf((*MockAbstractBackend)(nil).EngineFileSizes)) +} + +// FetchRemoteDBModels mocks base method. +func (m *MockAbstractBackend) FetchRemoteDBModels(arg0 context.Context) ([]*model.DBInfo, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "FetchRemoteDBModels", arg0) + ret0, _ := ret[0].([]*model.DBInfo) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// FetchRemoteDBModels indicates an expected call of FetchRemoteDBModels. +func (mr *MockAbstractBackendMockRecorder) FetchRemoteDBModels(arg0 any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EngineFileSizes", reflect.TypeOf((*MockBackend)(nil).EngineFileSizes)) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FetchRemoteDBModels", reflect.TypeOf((*MockAbstractBackend)(nil).FetchRemoteDBModels), arg0) } // FetchRemoteTableModels mocks base method. -func (m *MockBackend) FetchRemoteTableModels(arg0 context.Context, arg1 string) ([]*model.TableInfo, error) { +func (m *MockAbstractBackend) FetchRemoteTableModels(arg0 context.Context, arg1 string) ([]*model.TableInfo, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "FetchRemoteTableModels", arg0, arg1) ret0, _ := ret[0].([]*model.TableInfo) @@ -149,13 +168,13 @@ func (m *MockBackend) FetchRemoteTableModels(arg0 context.Context, arg1 string) } // FetchRemoteTableModels indicates an expected call of FetchRemoteTableModels. -func (mr *MockBackendMockRecorder) FetchRemoteTableModels(arg0, arg1 interface{}) *gomock.Call { +func (mr *MockAbstractBackendMockRecorder) FetchRemoteTableModels(arg0, arg1 any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FetchRemoteTableModels", reflect.TypeOf((*MockBackend)(nil).FetchRemoteTableModels), arg0, arg1) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FetchRemoteTableModels", reflect.TypeOf((*MockAbstractBackend)(nil).FetchRemoteTableModels), arg0, arg1) } // FlushAllEngines mocks base method. -func (m *MockBackend) FlushAllEngines(arg0 context.Context) error { +func (m *MockAbstractBackend) FlushAllEngines(arg0 context.Context) error { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "FlushAllEngines", arg0) ret0, _ := ret[0].(error) @@ -163,13 +182,13 @@ func (m *MockBackend) FlushAllEngines(arg0 context.Context) error { } // FlushAllEngines indicates an expected call of FlushAllEngines. -func (mr *MockBackendMockRecorder) FlushAllEngines(arg0 interface{}) *gomock.Call { +func (mr *MockAbstractBackendMockRecorder) FlushAllEngines(arg0 any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FlushAllEngines", reflect.TypeOf((*MockBackend)(nil).FlushAllEngines), arg0) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FlushAllEngines", reflect.TypeOf((*MockAbstractBackend)(nil).FlushAllEngines), arg0) } // FlushEngine mocks base method. -func (m *MockBackend) FlushEngine(arg0 context.Context, arg1 uuid.UUID) error { +func (m *MockAbstractBackend) FlushEngine(arg0 context.Context, arg1 uuid.UUID) error { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "FlushEngine", arg0, arg1) ret0, _ := ret[0].(error) @@ -177,13 +196,13 @@ func (m *MockBackend) FlushEngine(arg0 context.Context, arg1 uuid.UUID) error { } // FlushEngine indicates an expected call of FlushEngine. -func (mr *MockBackendMockRecorder) FlushEngine(arg0, arg1 interface{}) *gomock.Call { +func (mr *MockAbstractBackendMockRecorder) FlushEngine(arg0, arg1 any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FlushEngine", reflect.TypeOf((*MockBackend)(nil).FlushEngine), arg0, arg1) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FlushEngine", reflect.TypeOf((*MockAbstractBackend)(nil).FlushEngine), arg0, arg1) } // ImportEngine mocks base method. -func (m *MockBackend) ImportEngine(arg0 context.Context, arg1 uuid.UUID, arg2, arg3 int64) error { +func (m *MockAbstractBackend) ImportEngine(arg0 context.Context, arg1 uuid.UUID, arg2, arg3 int64) error { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "ImportEngine", arg0, arg1, arg2, arg3) ret0, _ := ret[0].(error) @@ -191,13 +210,13 @@ func (m *MockBackend) ImportEngine(arg0 context.Context, arg1 uuid.UUID, arg2, a } // ImportEngine indicates an expected call of ImportEngine. -func (mr *MockBackendMockRecorder) ImportEngine(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { +func (mr *MockAbstractBackendMockRecorder) ImportEngine(arg0, arg1, arg2, arg3 any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ImportEngine", reflect.TypeOf((*MockBackend)(nil).ImportEngine), arg0, arg1, arg2, arg3) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ImportEngine", reflect.TypeOf((*MockAbstractBackend)(nil).ImportEngine), arg0, arg1, arg2, arg3) } // LocalWriter mocks base method. -func (m *MockBackend) LocalWriter(arg0 context.Context, arg1 *backend.LocalWriterConfig, arg2 uuid.UUID) (backend.EngineWriter, error) { +func (m *MockAbstractBackend) LocalWriter(arg0 context.Context, arg1 *backend.LocalWriterConfig, arg2 uuid.UUID) (backend.EngineWriter, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "LocalWriter", arg0, arg1, arg2) ret0, _ := ret[0].(backend.EngineWriter) @@ -206,13 +225,13 @@ func (m *MockBackend) LocalWriter(arg0 context.Context, arg1 *backend.LocalWrite } // LocalWriter indicates an expected call of LocalWriter. -func (mr *MockBackendMockRecorder) LocalWriter(arg0, arg1, arg2 interface{}) *gomock.Call { +func (mr *MockAbstractBackendMockRecorder) LocalWriter(arg0, arg1, arg2 any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "LocalWriter", reflect.TypeOf((*MockBackend)(nil).LocalWriter), arg0, arg1, arg2) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "LocalWriter", reflect.TypeOf((*MockAbstractBackend)(nil).LocalWriter), arg0, arg1, arg2) } // MakeEmptyRows mocks base method. -func (m *MockBackend) MakeEmptyRows() kv.Rows { +func (m *MockAbstractBackend) MakeEmptyRows() kv.Rows { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "MakeEmptyRows") ret0, _ := ret[0].(kv.Rows) @@ -220,13 +239,13 @@ func (m *MockBackend) MakeEmptyRows() kv.Rows { } // MakeEmptyRows indicates an expected call of MakeEmptyRows. -func (mr *MockBackendMockRecorder) MakeEmptyRows() *gomock.Call { +func (mr *MockAbstractBackendMockRecorder) MakeEmptyRows() *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MakeEmptyRows", reflect.TypeOf((*MockBackend)(nil).MakeEmptyRows)) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MakeEmptyRows", reflect.TypeOf((*MockAbstractBackend)(nil).MakeEmptyRows)) } // NewEncoder mocks base method. -func (m *MockBackend) NewEncoder(arg0 context.Context, arg1 table.Table, arg2 *kv.SessionOptions) (kv.Encoder, error) { +func (m *MockAbstractBackend) NewEncoder(arg0 context.Context, arg1 table.Table, arg2 *kv.SessionOptions) (kv.Encoder, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "NewEncoder", arg0, arg1, arg2) ret0, _ := ret[0].(kv.Encoder) @@ -235,13 +254,13 @@ func (m *MockBackend) NewEncoder(arg0 context.Context, arg1 table.Table, arg2 *k } // NewEncoder indicates an expected call of NewEncoder. -func (mr *MockBackendMockRecorder) NewEncoder(arg0, arg1, arg2 interface{}) *gomock.Call { +func (mr *MockAbstractBackendMockRecorder) NewEncoder(arg0, arg1, arg2 any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NewEncoder", reflect.TypeOf((*MockBackend)(nil).NewEncoder), arg0, arg1, arg2) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NewEncoder", reflect.TypeOf((*MockAbstractBackend)(nil).NewEncoder), arg0, arg1, arg2) } // OpenEngine mocks base method. -func (m *MockBackend) OpenEngine(arg0 context.Context, arg1 *backend.EngineConfig, arg2 uuid.UUID) error { +func (m *MockAbstractBackend) OpenEngine(arg0 context.Context, arg1 *backend.EngineConfig, arg2 uuid.UUID) error { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "OpenEngine", arg0, arg1, arg2) ret0, _ := ret[0].(error) @@ -249,13 +268,13 @@ func (m *MockBackend) OpenEngine(arg0 context.Context, arg1 *backend.EngineConfi } // OpenEngine indicates an expected call of OpenEngine. -func (mr *MockBackendMockRecorder) OpenEngine(arg0, arg1, arg2 interface{}) *gomock.Call { +func (mr *MockAbstractBackendMockRecorder) OpenEngine(arg0, arg1, arg2 any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "OpenEngine", reflect.TypeOf((*MockBackend)(nil).OpenEngine), arg0, arg1, arg2) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "OpenEngine", reflect.TypeOf((*MockAbstractBackend)(nil).OpenEngine), arg0, arg1, arg2) } // ResetEngine mocks base method. -func (m *MockBackend) ResetEngine(arg0 context.Context, arg1 uuid.UUID) error { +func (m *MockAbstractBackend) ResetEngine(arg0 context.Context, arg1 uuid.UUID) error { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "ResetEngine", arg0, arg1) ret0, _ := ret[0].(error) @@ -263,13 +282,13 @@ func (m *MockBackend) ResetEngine(arg0 context.Context, arg1 uuid.UUID) error { } // ResetEngine indicates an expected call of ResetEngine. -func (mr *MockBackendMockRecorder) ResetEngine(arg0, arg1 interface{}) *gomock.Call { +func (mr *MockAbstractBackendMockRecorder) ResetEngine(arg0, arg1 any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ResetEngine", reflect.TypeOf((*MockBackend)(nil).ResetEngine), arg0, arg1) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ResetEngine", reflect.TypeOf((*MockAbstractBackend)(nil).ResetEngine), arg0, arg1) } // ResolveDuplicateRows mocks base method. -func (m *MockBackend) ResolveDuplicateRows(arg0 context.Context, arg1 table.Table, arg2 string, arg3 config.DuplicateResolutionAlgorithm) error { +func (m *MockAbstractBackend) ResolveDuplicateRows(arg0 context.Context, arg1 table.Table, arg2 string, arg3 config.DuplicateResolutionAlgorithm) error { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "ResolveDuplicateRows", arg0, arg1, arg2, arg3) ret0, _ := ret[0].(error) @@ -277,13 +296,13 @@ func (m *MockBackend) ResolveDuplicateRows(arg0 context.Context, arg1 table.Tabl } // ResolveDuplicateRows indicates an expected call of ResolveDuplicateRows. -func (mr *MockBackendMockRecorder) ResolveDuplicateRows(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { +func (mr *MockAbstractBackendMockRecorder) ResolveDuplicateRows(arg0, arg1, arg2, arg3 any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ResolveDuplicateRows", reflect.TypeOf((*MockBackend)(nil).ResolveDuplicateRows), arg0, arg1, arg2, arg3) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ResolveDuplicateRows", reflect.TypeOf((*MockAbstractBackend)(nil).ResolveDuplicateRows), arg0, arg1, arg2, arg3) } // RetryImportDelay mocks base method. -func (m *MockBackend) RetryImportDelay() time.Duration { +func (m *MockAbstractBackend) RetryImportDelay() time.Duration { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "RetryImportDelay") ret0, _ := ret[0].(time.Duration) @@ -291,13 +310,13 @@ func (m *MockBackend) RetryImportDelay() time.Duration { } // RetryImportDelay indicates an expected call of RetryImportDelay. -func (mr *MockBackendMockRecorder) RetryImportDelay() *gomock.Call { +func (mr *MockAbstractBackendMockRecorder) RetryImportDelay() *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RetryImportDelay", reflect.TypeOf((*MockBackend)(nil).RetryImportDelay)) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RetryImportDelay", reflect.TypeOf((*MockAbstractBackend)(nil).RetryImportDelay)) } // ShouldPostProcess mocks base method. -func (m *MockBackend) ShouldPostProcess() bool { +func (m *MockAbstractBackend) ShouldPostProcess() bool { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "ShouldPostProcess") ret0, _ := ret[0].(bool) @@ -305,9 +324,23 @@ func (m *MockBackend) ShouldPostProcess() bool { } // ShouldPostProcess indicates an expected call of ShouldPostProcess. -func (mr *MockBackendMockRecorder) ShouldPostProcess() *gomock.Call { +func (mr *MockAbstractBackendMockRecorder) ShouldPostProcess() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ShouldPostProcess", reflect.TypeOf((*MockAbstractBackend)(nil).ShouldPostProcess)) +} + +// TotalMemoryConsume mocks base method. +func (m *MockAbstractBackend) TotalMemoryConsume() int64 { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "TotalMemoryConsume") + ret0, _ := ret[0].(int64) + return ret0 +} + +// TotalMemoryConsume indicates an expected call of TotalMemoryConsume. +func (mr *MockAbstractBackendMockRecorder) TotalMemoryConsume() *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ShouldPostProcess", reflect.TypeOf((*MockBackend)(nil).ShouldPostProcess)) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "TotalMemoryConsume", reflect.TypeOf((*MockAbstractBackend)(nil).TotalMemoryConsume)) } // MockEngineWriter is a mock of EngineWriter interface. @@ -342,7 +375,7 @@ func (m *MockEngineWriter) AppendRows(arg0 context.Context, arg1 string, arg2 [] } // AppendRows indicates an expected call of AppendRows. -func (mr *MockEngineWriterMockRecorder) AppendRows(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { +func (mr *MockEngineWriterMockRecorder) AppendRows(arg0, arg1, arg2, arg3 any) *gomock.Call { mr.mock.ctrl.T.Helper() return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AppendRows", reflect.TypeOf((*MockEngineWriter)(nil).AppendRows), arg0, arg1, arg2, arg3) } @@ -357,7 +390,7 @@ func (m *MockEngineWriter) Close(arg0 context.Context) (backend.ChunkFlushStatus } // Close indicates an expected call of Close. -func (mr *MockEngineWriterMockRecorder) Close(arg0 interface{}) *gomock.Call { +func (mr *MockEngineWriterMockRecorder) Close(arg0 any) *gomock.Call { mr.mock.ctrl.T.Helper() return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Close", reflect.TypeOf((*MockEngineWriter)(nil).Close), arg0) } @@ -375,16 +408,3 @@ func (mr *MockEngineWriterMockRecorder) IsSynced() *gomock.Call { mr.mock.ctrl.T.Helper() return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "IsSynced", reflect.TypeOf((*MockEngineWriter)(nil).IsSynced)) } - -func (m *MockBackend) TotalMemoryConsume() int64 { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "TotalMemoryConsume") - ret0, _ := ret[0].(int64) - return ret0 -} - -// LocalWriter indicates an expected call of LocalWriter. -func (mr *MockBackendMockRecorder) TotalMemoryConsume() *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "TotalMemoryConsume", reflect.TypeOf((*MockBackend)(nil).OpenEngine)) -} diff --git a/br/pkg/mock/glue.go b/br/pkg/mock/glue.go index 444f73a7d1ad5..549e98f3f6bea 100644 --- a/br/pkg/mock/glue.go +++ b/br/pkg/mock/glue.go @@ -1,6 +1,10 @@ // Code generated by MockGen. DO NOT EDIT. -// Source: github.com/pingcap/tidb/br/pkg/lightning/glue/glue.go - +// Source: github.com/pingcap/tidb/br/pkg/lightning/glue (interfaces: Glue,SQLExecutor) +// +// Generated by this command: +// +// mockgen -package mock github.com/pingcap/tidb/br/pkg/lightning/glue Glue,SQLExecutor +// // Package mock is a generated GoMock package. package mock @@ -9,67 +13,39 @@ import ( sql "database/sql" reflect "reflect" - gomock "github.com/golang/mock/gomock" checkpoints "github.com/pingcap/tidb/br/pkg/lightning/checkpoints" config "github.com/pingcap/tidb/br/pkg/lightning/config" glue "github.com/pingcap/tidb/br/pkg/lightning/glue" log "github.com/pingcap/tidb/br/pkg/lightning/log" parser "github.com/pingcap/tidb/parser" model "github.com/pingcap/tidb/parser/model" + gomock "go.uber.org/mock/gomock" ) -// MockGlue is a mock of Glue interface +// MockGlue is a mock of Glue interface. type MockGlue struct { ctrl *gomock.Controller recorder *MockGlueMockRecorder } -// MockGlueMockRecorder is the mock recorder for MockGlue +// MockGlueMockRecorder is the mock recorder for MockGlue. type MockGlueMockRecorder struct { mock *MockGlue } -// NewMockGlue creates a new mock instance +// NewMockGlue creates a new mock instance. func NewMockGlue(ctrl *gomock.Controller) *MockGlue { mock := &MockGlue{ctrl: ctrl} mock.recorder = &MockGlueMockRecorder{mock} return mock } -// EXPECT returns an object that allows the caller to indicate expected use +// EXPECT returns an object that allows the caller to indicate expected use. func (m *MockGlue) EXPECT() *MockGlueMockRecorder { return m.recorder } -// OwnsSQLExecutor mocks base method -func (m *MockGlue) OwnsSQLExecutor() bool { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "OwnsSQLExecutor") - ret0, _ := ret[0].(bool) - return ret0 -} - -// OwnsSQLExecutor indicates an expected call of OwnsSQLExecutor -func (mr *MockGlueMockRecorder) OwnsSQLExecutor() *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "OwnsSQLExecutor", reflect.TypeOf((*MockGlue)(nil).OwnsSQLExecutor)) -} - -// GetSQLExecutor mocks base method -func (m *MockGlue) GetSQLExecutor() glue.SQLExecutor { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetSQLExecutor") - ret0, _ := ret[0].(glue.SQLExecutor) - return ret0 -} - -// GetSQLExecutor indicates an expected call of GetSQLExecutor -func (mr *MockGlueMockRecorder) GetSQLExecutor() *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetSQLExecutor", reflect.TypeOf((*MockGlue)(nil).GetSQLExecutor)) -} - -// GetDB mocks base method +// GetDB mocks base method. func (m *MockGlue) GetDB() (*sql.DB, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "GetDB") @@ -78,13 +54,13 @@ func (m *MockGlue) GetDB() (*sql.DB, error) { return ret0, ret1 } -// GetDB indicates an expected call of GetDB +// GetDB indicates an expected call of GetDB. func (mr *MockGlueMockRecorder) GetDB() *gomock.Call { mr.mock.ctrl.T.Helper() return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetDB", reflect.TypeOf((*MockGlue)(nil).GetDB)) } -// GetParser mocks base method +// GetParser mocks base method. func (m *MockGlue) GetParser() *parser.Parser { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "GetParser") @@ -92,28 +68,27 @@ func (m *MockGlue) GetParser() *parser.Parser { return ret0 } -// GetParser indicates an expected call of GetParser +// GetParser indicates an expected call of GetParser. func (mr *MockGlueMockRecorder) GetParser() *gomock.Call { mr.mock.ctrl.T.Helper() return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetParser", reflect.TypeOf((*MockGlue)(nil).GetParser)) } -// GetTables mocks base method -func (m *MockGlue) GetTables(arg0 context.Context, arg1 string) ([]*model.TableInfo, error) { +// GetSQLExecutor mocks base method. +func (m *MockGlue) GetSQLExecutor() glue.SQLExecutor { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetTables", arg0, arg1) - ret0, _ := ret[0].([]*model.TableInfo) - ret1, _ := ret[1].(error) - return ret0, ret1 + ret := m.ctrl.Call(m, "GetSQLExecutor") + ret0, _ := ret[0].(glue.SQLExecutor) + return ret0 } -// GetTables indicates an expected call of GetTables -func (mr *MockGlueMockRecorder) GetTables(arg0, arg1 interface{}) *gomock.Call { +// GetSQLExecutor indicates an expected call of GetSQLExecutor. +func (mr *MockGlueMockRecorder) GetSQLExecutor() *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetTables", reflect.TypeOf((*MockGlue)(nil).GetTables), arg0, arg1) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetSQLExecutor", reflect.TypeOf((*MockGlue)(nil).GetSQLExecutor)) } -// GetSession mocks base method +// GetSession mocks base method. func (m *MockGlue) GetSession(arg0 context.Context) (checkpoints.Session, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "GetSession", arg0) @@ -122,13 +97,28 @@ func (m *MockGlue) GetSession(arg0 context.Context) (checkpoints.Session, error) return ret0, ret1 } -// GetSession indicates an expected call of GetSession -func (mr *MockGlueMockRecorder) GetSession(arg0 interface{}) *gomock.Call { +// GetSession indicates an expected call of GetSession. +func (mr *MockGlueMockRecorder) GetSession(arg0 any) *gomock.Call { mr.mock.ctrl.T.Helper() return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetSession", reflect.TypeOf((*MockGlue)(nil).GetSession), arg0) } -// OpenCheckpointsDB mocks base method +// GetTables mocks base method. +func (m *MockGlue) GetTables(arg0 context.Context, arg1 string) ([]*model.TableInfo, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetTables", arg0, arg1) + ret0, _ := ret[0].([]*model.TableInfo) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetTables indicates an expected call of GetTables. +func (mr *MockGlueMockRecorder) GetTables(arg0, arg1 any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetTables", reflect.TypeOf((*MockGlue)(nil).GetTables), arg0, arg1) +} + +// OpenCheckpointsDB mocks base method. func (m *MockGlue) OpenCheckpointsDB(arg0 context.Context, arg1 *config.Config) (checkpoints.DB, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "OpenCheckpointsDB", arg0, arg1) @@ -137,99 +127,113 @@ func (m *MockGlue) OpenCheckpointsDB(arg0 context.Context, arg1 *config.Config) return ret0, ret1 } -// OpenCheckpointsDB indicates an expected call of OpenCheckpointsDB -func (mr *MockGlueMockRecorder) OpenCheckpointsDB(arg0, arg1 interface{}) *gomock.Call { +// OpenCheckpointsDB indicates an expected call of OpenCheckpointsDB. +func (mr *MockGlueMockRecorder) OpenCheckpointsDB(arg0, arg1 any) *gomock.Call { mr.mock.ctrl.T.Helper() return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "OpenCheckpointsDB", reflect.TypeOf((*MockGlue)(nil).OpenCheckpointsDB), arg0, arg1) } -// Record mocks base method +// OwnsSQLExecutor mocks base method. +func (m *MockGlue) OwnsSQLExecutor() bool { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "OwnsSQLExecutor") + ret0, _ := ret[0].(bool) + return ret0 +} + +// OwnsSQLExecutor indicates an expected call of OwnsSQLExecutor. +func (mr *MockGlueMockRecorder) OwnsSQLExecutor() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "OwnsSQLExecutor", reflect.TypeOf((*MockGlue)(nil).OwnsSQLExecutor)) +} + +// Record mocks base method. func (m *MockGlue) Record(arg0 string, arg1 uint64) { m.ctrl.T.Helper() m.ctrl.Call(m, "Record", arg0, arg1) } -// Record indicates an expected call of Record -func (mr *MockGlueMockRecorder) Record(arg0, arg1 interface{}) *gomock.Call { +// Record indicates an expected call of Record. +func (mr *MockGlueMockRecorder) Record(arg0, arg1 any) *gomock.Call { mr.mock.ctrl.T.Helper() return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Record", reflect.TypeOf((*MockGlue)(nil).Record), arg0, arg1) } -// MockSQLExecutor is a mock of SQLExecutor interface +// MockSQLExecutor is a mock of SQLExecutor interface. type MockSQLExecutor struct { ctrl *gomock.Controller recorder *MockSQLExecutorMockRecorder } -// MockSQLExecutorMockRecorder is the mock recorder for MockSQLExecutor +// MockSQLExecutorMockRecorder is the mock recorder for MockSQLExecutor. type MockSQLExecutorMockRecorder struct { mock *MockSQLExecutor } -// NewMockSQLExecutor creates a new mock instance +// NewMockSQLExecutor creates a new mock instance. func NewMockSQLExecutor(ctrl *gomock.Controller) *MockSQLExecutor { mock := &MockSQLExecutor{ctrl: ctrl} mock.recorder = &MockSQLExecutorMockRecorder{mock} return mock } -// EXPECT returns an object that allows the caller to indicate expected use +// EXPECT returns an object that allows the caller to indicate expected use. func (m *MockSQLExecutor) EXPECT() *MockSQLExecutorMockRecorder { return m.recorder } -// ExecuteWithLog mocks base method -func (m *MockSQLExecutor) ExecuteWithLog(ctx context.Context, query, purpose string, logger log.Logger) error { +// Close mocks base method. +func (m *MockSQLExecutor) Close() { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "ExecuteWithLog", ctx, query, purpose, logger) - ret0, _ := ret[0].(error) - return ret0 + m.ctrl.Call(m, "Close") } -// ExecuteWithLog indicates an expected call of ExecuteWithLog -func (mr *MockSQLExecutorMockRecorder) ExecuteWithLog(ctx, query, purpose, logger interface{}) *gomock.Call { +// Close indicates an expected call of Close. +func (mr *MockSQLExecutorMockRecorder) Close() *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ExecuteWithLog", reflect.TypeOf((*MockSQLExecutor)(nil).ExecuteWithLog), ctx, query, purpose, logger) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Close", reflect.TypeOf((*MockSQLExecutor)(nil).Close)) } -// ObtainStringWithLog mocks base method -func (m *MockSQLExecutor) ObtainStringWithLog(ctx context.Context, query, purpose string, logger log.Logger) (string, error) { +// ExecuteWithLog mocks base method. +func (m *MockSQLExecutor) ExecuteWithLog(arg0 context.Context, arg1, arg2 string, arg3 log.Logger) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "ObtainStringWithLog", ctx, query, purpose, logger) - ret0, _ := ret[0].(string) - ret1, _ := ret[1].(error) - return ret0, ret1 + ret := m.ctrl.Call(m, "ExecuteWithLog", arg0, arg1, arg2, arg3) + ret0, _ := ret[0].(error) + return ret0 } -// ObtainStringWithLog indicates an expected call of ObtainStringWithLog -func (mr *MockSQLExecutorMockRecorder) ObtainStringWithLog(ctx, query, purpose, logger interface{}) *gomock.Call { +// ExecuteWithLog indicates an expected call of ExecuteWithLog. +func (mr *MockSQLExecutorMockRecorder) ExecuteWithLog(arg0, arg1, arg2, arg3 any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ObtainStringWithLog", reflect.TypeOf((*MockSQLExecutor)(nil).ObtainStringWithLog), ctx, query, purpose, logger) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ExecuteWithLog", reflect.TypeOf((*MockSQLExecutor)(nil).ExecuteWithLog), arg0, arg1, arg2, arg3) } -// QueryStringsWithLog mocks base method -func (m *MockSQLExecutor) QueryStringsWithLog(ctx context.Context, query, purpose string, logger log.Logger) ([][]string, error) { +// ObtainStringWithLog mocks base method. +func (m *MockSQLExecutor) ObtainStringWithLog(arg0 context.Context, arg1, arg2 string, arg3 log.Logger) (string, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "QueryStringsWithLog", ctx, query, purpose, logger) - ret0, _ := ret[0].([][]string) + ret := m.ctrl.Call(m, "ObtainStringWithLog", arg0, arg1, arg2, arg3) + ret0, _ := ret[0].(string) ret1, _ := ret[1].(error) return ret0, ret1 } -// QueryStringsWithLog indicates an expected call of QueryStringsWithLog -func (mr *MockSQLExecutorMockRecorder) QueryStringsWithLog(ctx, query, purpose, logger interface{}) *gomock.Call { +// ObtainStringWithLog indicates an expected call of ObtainStringWithLog. +func (mr *MockSQLExecutorMockRecorder) ObtainStringWithLog(arg0, arg1, arg2, arg3 any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "QueryStringsWithLog", reflect.TypeOf((*MockSQLExecutor)(nil).QueryStringsWithLog), ctx, query, purpose, logger) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ObtainStringWithLog", reflect.TypeOf((*MockSQLExecutor)(nil).ObtainStringWithLog), arg0, arg1, arg2, arg3) } -// Close mocks base method -func (m *MockSQLExecutor) Close() { +// QueryStringsWithLog mocks base method. +func (m *MockSQLExecutor) QueryStringsWithLog(arg0 context.Context, arg1, arg2 string, arg3 log.Logger) ([][]string, error) { m.ctrl.T.Helper() - m.ctrl.Call(m, "Close") + ret := m.ctrl.Call(m, "QueryStringsWithLog", arg0, arg1, arg2, arg3) + ret0, _ := ret[0].([][]string) + ret1, _ := ret[1].(error) + return ret0, ret1 } -// Close indicates an expected call of Close -func (mr *MockSQLExecutorMockRecorder) Close() *gomock.Call { +// QueryStringsWithLog indicates an expected call of QueryStringsWithLog. +func (mr *MockSQLExecutorMockRecorder) QueryStringsWithLog(arg0, arg1, arg2, arg3 any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Close", reflect.TypeOf((*MockSQLExecutor)(nil).Close)) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "QueryStringsWithLog", reflect.TypeOf((*MockSQLExecutor)(nil).QueryStringsWithLog), arg0, arg1, arg2, arg3) } diff --git a/br/pkg/mock/kv.go b/br/pkg/mock/kv.go index 137775b075026..d3382d81552e9 100644 --- a/br/pkg/mock/kv.go +++ b/br/pkg/mock/kv.go @@ -9,11 +9,11 @@ package mock import ( reflect "reflect" - gomock "github.com/golang/mock/gomock" kv "github.com/pingcap/tidb/br/pkg/lightning/backend/kv" log "github.com/pingcap/tidb/br/pkg/lightning/log" verification "github.com/pingcap/tidb/br/pkg/lightning/verification" types "github.com/pingcap/tidb/types" + gomock "go.uber.org/mock/gomock" ) // MockEncoder is a mock of Encoder interface. diff --git a/br/tests/lightning_character_sets/run.sh b/br/tests/lightning_character_sets/run.sh index d1a7ea5728d16..4c09185853f95 100755 --- a/br/tests/lightning_character_sets/run.sh +++ b/br/tests/lightning_character_sets/run.sh @@ -78,6 +78,8 @@ check_contains 's: 5291' # test about unsupported charset in UTF-8 encoding dump files # test local backend run_lightning --config "tests/$TEST_NAME/greek.toml" -d "tests/$TEST_NAME/greek" 2>&1 | grep -q "Unknown character set: 'greek'" +# check TiDB does not receive the DDL +check_not_contains "greek" $TEST_DIR/tidb.log run_sql 'DROP DATABASE IF EXISTS charsets;' run_sql 'CREATE DATABASE charsets;' run_sql 'CREATE TABLE charsets.greek (c VARCHAR(20) PRIMARY KEY);' diff --git a/go.mod b/go.mod index 7ff5056442207..4eeff4546cba1 100644 --- a/go.mod +++ b/go.mod @@ -108,6 +108,7 @@ require ( go.uber.org/atomic v1.10.0 go.uber.org/automaxprocs v1.5.3 go.uber.org/goleak v1.2.0 + go.uber.org/mock v0.4.0 go.uber.org/multierr v1.8.0 go.uber.org/zap v1.23.0 golang.org/x/exp v0.0.0-20221023144134-a1e5550cf13e diff --git a/go.sum b/go.sum index 49c8217ace654..168708f81d990 100644 --- a/go.sum +++ b/go.sum @@ -1064,6 +1064,8 @@ go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/goleak v1.2.0 h1:xqgm/S+aQvhWFTtR0XK3Jvg7z8kGV8P4X14IzwN3Eqk= go.uber.org/goleak v1.2.0/go.mod h1:XJYK+MuIchqpmGmUSAzotztawfKvYLUIgg7guXrwVUo= +go.uber.org/mock v0.4.0 h1:VcM4ZOtdbR4f6VXfiOpwpVJDL6lCReaZ6mw31wqh7KU= +go.uber.org/mock v0.4.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= go.uber.org/multierr v1.4.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4=