diff --git a/dm/config/task.go b/dm/config/task.go index 6eb3b4e68ec..de00c926b7c 100644 --- a/dm/config/task.go +++ b/dm/config/task.go @@ -404,6 +404,8 @@ type SyncerConfig struct { Compact bool `yaml:"compact" toml:"compact" json:"compact"` MultipleRows bool `yaml:"multiple-rows" toml:"multiple-rows" json:"multiple-rows"` + AutoIDCacheSize uint64 `yaml:"auto-id-cache-size" toml:"auto-id-cache-size" json:"auto-id-cache-size"` + // deprecated MaxRetry int `yaml:"max-retry" toml:"max-retry" json:"max-retry"` @@ -1175,6 +1177,7 @@ type SyncerConfigForDowngrade struct { SafeModeDuration string `yaml:"safe-mode-duration,omitempty"` Compact bool `yaml:"compact,omitempty"` MultipleRows bool `yaml:"multipleRows,omitempty"` + AutoIDCacheSize uint64 `yaml:"auto-id-cache-size,omitempty"` } // NewSyncerConfigsForDowngrade converts SyncerConfig to SyncerConfigForDowngrade. @@ -1195,6 +1198,7 @@ func NewSyncerConfigsForDowngrade(syncerConfigs map[string]*SyncerConfig) map[st EnableANSIQuotes: syncerConfig.EnableANSIQuotes, Compact: syncerConfig.Compact, MultipleRows: syncerConfig.MultipleRows, + AutoIDCacheSize: syncerConfig.AutoIDCacheSize, } syncerConfigsForDowngrade[configName] = newSyncerConfig } diff --git a/dm/config/task_converters.go b/dm/config/task_converters.go index cb8a1c83484..fac282810ab 100644 --- a/dm/config/task_converters.go +++ b/dm/config/task_converters.go @@ -270,6 +270,9 @@ func OpenAPITaskToSubTaskConfigs(task *openapi.Task, toDBCfg *dbconfig.DBConfig, if incrCfg.ReplBatch != nil { subTaskCfg.SyncerConfig.Batch = *incrCfg.ReplBatch } + if incrCfg.AutoIdCacheSize != nil { + subTaskCfg.SyncerConfig.AutoIDCacheSize = *incrCfg.AutoIdCacheSize + } } subTaskCfg.ValidatorCfg = defaultValidatorConfig() // set route,blockAllowList,filter config @@ -569,8 +572,9 @@ func SubTaskConfigsToOpenAPITask(subTaskConfigList []*SubTaskConfig) *openapi.Ta taskSourceConfig.FullMigrateConf.Consistency = &consistency } taskSourceConfig.IncrMigrateConf = &openapi.TaskIncrMigrateConf{ - ReplBatch: &oneSubtaskConfig.SyncerConfig.Batch, - ReplThreads: &oneSubtaskConfig.SyncerConfig.WorkerCount, + ReplBatch: &oneSubtaskConfig.SyncerConfig.Batch, + ReplThreads: &oneSubtaskConfig.SyncerConfig.WorkerCount, + AutoIdCacheSize: &oneSubtaskConfig.SyncerConfig.AutoIDCacheSize, } if oneSubtaskConfig.LoaderConfig.Security != nil { var certAllowedCN []string diff --git a/dm/config/task_test.go b/dm/config/task_test.go index 90c5b9c7daf..da249f4a264 100644 --- a/dm/config/task_test.go +++ b/dm/config/task_test.go @@ -1196,3 +1196,30 @@ func TestTaskYamlForDowngrade(t *testing.T) { require.NoError(t, err) require.Equal(t, originCfg.TargetDB.Password, decryptedPass) } + +func TestSyncerYamlForDowngrade(t *testing.T) { + syncerConfigName := "syncer-1" + originCfg := TaskConfig{ + Name: "test", + TaskMode: ModeFull, + MySQLInstances: []*MySQLInstance{ + { + SourceID: "mysql-3306", + SyncerConfigName: syncerConfigName, + }, + }, + TargetDB: &dbconfig.DBConfig{ + Password: "123456", + }, + Syncers: map[string]*SyncerConfig{ + syncerConfigName: { + AutoIDCacheSize: 100, + }, + }, + } + content, err := originCfg.YamlForDowngrade() + require.NoError(t, err) + newCfg := &TaskConfig{} + require.NoError(t, newCfg.FromYaml(content)) + require.Equal(t, originCfg.Syncers[syncerConfigName].AutoIDCacheSize, newCfg.Syncers[syncerConfigName].AutoIDCacheSize) +} diff --git a/dm/openapi/gen.server.go b/dm/openapi/gen.server.go index a9608ce1d33..9f45f102902 100644 --- a/dm/openapi/gen.server.go +++ b/dm/openapi/gen.server.go @@ -1248,115 +1248,116 @@ func RegisterHandlersWithOptions(router *gin.Engine, si ServerInterface, options // Base64 encoded, gzipped, json marshaled Swagger object var swaggerSpec = []string{ - "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", + "u9/u/i8AAP//pY4UJQK/AAA=", } // GetSwagger returns the content of the embedded swagger specification file diff --git a/dm/openapi/gen.types.go b/dm/openapi/gen.types.go index 4e747dfdf0d..1aef5b3b568 100644 --- a/dm/openapi/gen.types.go +++ b/dm/openapi/gen.types.go @@ -654,6 +654,9 @@ type TaskFullMigrateConfOnDuplicatePhysical string // configuration of incremental tasks type TaskIncrMigrateConf struct { + // AUTO_ID_CACHE size to use for incremental replication of new tables + AutoIdCacheSize *uint64 `json:"auto_id_cache_size,omitempty"` + // incremental synchronization of batch execution sql quantities ReplBatch *int `json:"repl_batch,omitempty"` diff --git a/dm/openapi/spec/dm.yaml b/dm/openapi/spec/dm.yaml index 69a082ea2cb..ff0b8b5c778 100644 --- a/dm/openapi/spec/dm.yaml +++ b/dm/openapi/spec/dm.yaml @@ -1779,6 +1779,11 @@ components: type: integer description: incremental synchronization of batch execution sql quantities default: 100 + auto_id_cache_size: + type: integer + format: uint64 + description: "AUTO_ID_CACHE size to use for incremental replication of new tables" + default: 0 TaskSourceConf: type: object properties: diff --git a/dm/syncer/ddl.go b/dm/syncer/ddl.go index 39bf3ba4f94..d9cfff9d0aa 100644 --- a/dm/syncer/ddl.go +++ b/dm/syncer/ddl.go @@ -77,6 +77,7 @@ type DDLWorker struct { tableRouter *regexprrouter.RouteTable sourceTableNamesFlavor conn.LowerCaseTableNamesFlavor collationCompatible string + autoIDCacheSize uint64 charsetAndDefaultCollation map[string]string idAndCollationMap map[int]string baList *filter.Filter @@ -106,6 +107,7 @@ func NewDDLWorker(pLogger *log.Logger, syncer *Syncer) *DDLWorker { tableRouter: syncer.tableRouter, sourceTableNamesFlavor: syncer.SourceTableNamesFlavor, collationCompatible: syncer.cfg.CollationCompatible, + autoIDCacheSize: syncer.cfg.AutoIDCacheSize, charsetAndDefaultCollation: syncer.charsetAndDefaultCollation, idAndCollationMap: syncer.idAndCollationMap, baList: syncer.baList, @@ -1322,6 +1324,8 @@ func (ddl *DDLWorker) genDDLInfo(qec *queryEventContext, sql string) (*ddlInfo, ddl.adjustCollation(ddlInfo, qec.eventStatusVars, ddl.charsetAndDefaultCollation, ddl.idAndCollationMap) } + ddl.adjustAutoIDCache(ddlInfo) + routedDDL, err := parserpkg.RenameDDLTable(ddlInfo.stmtCache, ddlInfo.targetTables) ddlInfo.routedDDL = routedDDL return ddlInfo, err @@ -1487,6 +1491,39 @@ ColumnLoop: } } +func (ddl *DDLWorker) adjustAutoIDCache(ddlInfo *ddlInfo) { + if ddl.autoIDCacheSize <= 0 { + return + } + + if createStmt, ok := ddlInfo.stmtCache.(*ast.CreateTableStmt); ok { + addAutoIDCache := false + for _, col := range createStmt.Cols { + for _, opt := range col.Options { + if opt.Tp == ast.ColumnOptionAutoIncrement { + addAutoIDCache = true + } + } + } + + for _, opt := range createStmt.Options { + switch opt.Tp { + case ast.TableOptionAutoIncrement: + addAutoIDCache = true + case ast.TableOptionAutoIdCache: + return + } + } + + if addAutoIDCache { + createStmt.Options = append(createStmt.Options, &ast.TableOption{ + Tp: ast.TableOptionAutoIdCache, + UintValue: ddl.autoIDCacheSize, + }) + } + } +} + type ddlInfo struct { originDDL string routedDDL string diff --git a/dm/syncer/ddl_test.go b/dm/syncer/ddl_test.go index 6e89c851a34..5720cf294df 100644 --- a/dm/syncer/ddl_test.go +++ b/dm/syncer/ddl_test.go @@ -789,6 +789,66 @@ func TestAdjustCollation(t *testing.T) { } } +func TestAdjustAutoIDCache(t *testing.T) { + cases := []struct { + sql string + expectedSQL string + cacheSize uint64 + }{ + { + "CREATE TABLE `test`.`t1` (`id` INT)", + "CREATE TABLE `test`.`t1` (`id` INT)", + 0, + }, + { + "CREATE TABLE `test`.`t1` (`id` INT AUTO_INCREMENT)", + "CREATE TABLE `test`.`t1` (`id` INT AUTO_INCREMENT)", + 0, + }, + { + "CREATE TABLE `test`.`t1` (`id` INT AUTO_INCREMENT)", + "CREATE TABLE `test`.`t1` (`id` INT AUTO_INCREMENT) /*T![auto_id_cache] AUTO_ID_CACHE = 1 */", + 1, + }, + { + "CREATE TABLE `test`.`t1` (`id` INT AUTO_INCREMENT)", + "CREATE TABLE `test`.`t1` (`id` INT AUTO_INCREMENT) /*T![auto_id_cache] AUTO_ID_CACHE = 30 */", + 30, + }, + } + + tctx := tcontext.Background().WithLogger(log.With(zap.String("test", "TestAdjustAutoIDCache"))) + p := parser.New() + tab := &filter.Table{ + Schema: "test", + Name: "t1", + } + + for _, cse := range cases { + syncer := NewSyncer(&config.SubTaskConfig{ + SyncerConfig: config.SyncerConfig{ + AutoIDCacheSize: cse.cacheSize, + }, + }, nil, nil) + syncer.tctx = tctx + ddlWorker := NewDDLWorker(&tctx.Logger, syncer) + ddlInfo := &ddlInfo{ + originDDL: cse.sql, + routedDDL: cse.sql, + sourceTables: []*filter.Table{tab}, + targetTables: []*filter.Table{tab}, + } + stmt, err := p.ParseOneStmt(cse.sql, "", "") + require.NoError(t, err) + require.NotNil(t, stmt) + ddlInfo.stmtCache = stmt + ddlWorker.adjustAutoIDCache(ddlInfo) + routedDDL, err := parserpkg.RenameDDLTable(ddlInfo.stmtCache, ddlInfo.targetTables) + require.NoError(t, err) + require.Equal(t, cse.expectedSQL, routedDDL) + } +} + type mockOnlinePlugin struct { toFinish map[string]struct{} } diff --git a/dm/tests/dmctl_basic/conf/get_task.yaml b/dm/tests/dmctl_basic/conf/get_task.yaml index d4ab9919fc8..472512c876b 100644 --- a/dm/tests/dmctl_basic/conf/get_task.yaml +++ b/dm/tests/dmctl_basic/conf/get_task.yaml @@ -141,6 +141,7 @@ syncers: checkpoint-flush-interval: 1 compact: true multiple-rows: true + auto-id-cache-size: 0 max-retry: 0 auto-fix-gtid: false enable-gtid: false diff --git a/dm/tests/import_v10x/conf/task.yaml b/dm/tests/import_v10x/conf/task.yaml index 07285965df5..bbcd32206a6 100644 --- a/dm/tests/import_v10x/conf/task.yaml +++ b/dm/tests/import_v10x/conf/task.yaml @@ -110,6 +110,7 @@ syncers: checkpoint-flush-interval: 30 compact: false multiple-rows: false + auto-id-cache-size: 0 max-retry: 0 auto-fix-gtid: false enable-gtid: false @@ -125,6 +126,7 @@ syncers: checkpoint-flush-interval: 30 compact: false multiple-rows: false + auto-id-cache-size: 0 max-retry: 0 auto-fix-gtid: false enable-gtid: true