From c4a785263e9d93117e9eea98f9098791c6b133fc Mon Sep 17 00:00:00 2001 From: ehco1996 Date: Tue, 11 Jan 2022 08:42:23 +0800 Subject: [PATCH] openapi(dm): add more task config field --- dm/dm/config/task_converters.go | 26 +++- dm/dm/config/task_converters_test.go | 24 +++- dm/openapi/fixtures/task.go | 9 +- dm/openapi/gen.server.go | 171 ++++++++++++++------------- dm/openapi/gen.types.go | 22 ++++ dm/openapi/spec/dm.yaml | 20 ++++ 6 files changed, 183 insertions(+), 89 deletions(-) diff --git a/dm/dm/config/task_converters.go b/dm/dm/config/task_converters.go index 21cbb4e3e27..8179bb5b1f1 100644 --- a/dm/dm/config/task_converters.go +++ b/dm/dm/config/task_converters.go @@ -167,11 +167,18 @@ func OpenAPITaskToSubTaskConfigs(task *openapi.Task, toDBCfg *DBConfig, sourceCf // set shard config if task.ShardMode != nil { subTaskCfg.IsSharding = true - mode := *task.ShardMode - subTaskCfg.ShardMode = string(mode) + subTaskCfg.ShardMode = string(*task.ShardMode) } else { subTaskCfg.IsSharding = false } + // set timezone + if task.TimeZone != nil { + subTaskCfg.Timezone = *task.TimeZone + } + // set collation_compatible + if task.CollationCompatible != nil { + subTaskCfg.CollationCompatible = string(*task.CollationCompatible) + } // set online ddl plugin config subTaskCfg.OnlineDDL = task.EnhanceOnlineSchemaChange // set case sensitive from source @@ -206,6 +213,12 @@ func OpenAPITaskToSubTaskConfigs(task *openapi.Task, toDBCfg *DBConfig, sourceCf if incrCfg.ReplBatch != nil { subTaskCfg.SyncerConfig.Batch = *incrCfg.ReplBatch } + if incrCfg.Compact != nil { + subTaskCfg.SyncerConfig.Compact = *incrCfg.Compact + } + if incrCfg.MultipleRows != nil { + subTaskCfg.SyncerConfig.MultipleRows = *incrCfg.MultipleRows + } } // set route,blockAllowList,filter config doCnt := len(tableMigrateRuleMap[sourceCfg.SourceName]) @@ -422,8 +435,10 @@ func SubTaskConfigsToOpenAPITask(subTaskConfigMap map[string]map[string]SubTaskC ImportThreads: &oneSubtaskConfig.LoaderConfig.PoolSize, } taskSourceConfig.IncrMigrateConf = &openapi.TaskIncrMigrateConf{ - ReplBatch: &oneSubtaskConfig.SyncerConfig.Batch, - ReplThreads: &oneSubtaskConfig.SyncerConfig.WorkerCount, + ReplBatch: &oneSubtaskConfig.SyncerConfig.Batch, + Compact: &oneSubtaskConfig.SyncerConfig.Compact, + ReplThreads: &oneSubtaskConfig.SyncerConfig.WorkerCount, + MultipleRows: &oneSubtaskConfig.SyncerConfig.MultipleRows, } // set filter rules filterRuleMap := openapi.Task_BinlogFilterRule{} @@ -494,6 +509,9 @@ func SubTaskConfigsToOpenAPITask(subTaskConfigMap map[string]map[string]SubTaskC if len(filterMap) > 0 { task.BinlogFilterRule = &filterRuleMap } + task.TimeZone = &oneSubtaskConfig.Timezone + collationCompatible := openapi.TaskCollationCompatible(oneSubtaskConfig.CollationCompatible) + task.CollationCompatible = &collationCompatible task.TableMigrateRule = tableMigrateRuleList taskList = append(taskList, task) } diff --git a/dm/dm/config/task_converters_test.go b/dm/dm/config/task_converters_test.go index 1b6eac3527d..4663fda2912 100644 --- a/dm/dm/config/task_converters_test.go +++ b/dm/dm/config/task_converters_test.go @@ -75,6 +75,10 @@ func testNoShardTaskToSubTaskConfigs(c *check.C) { c.Assert(subTaskConfig.ShardMode, check.Equals, "") // check online schema change c.Assert(subTaskConfig.OnlineDDL, check.Equals, true) + // check timezone + c.Assert(subTaskConfig.Timezone, check.Equals, *task.TimeZone) + // check collation + c.Assert(subTaskConfig.CollationCompatible, check.Equals, string(*task.CollationCompatible)) // check case sensitive c.Assert(subTaskConfig.CaseSensitive, check.Equals, sourceCfg1.CaseSensitive) // check from @@ -86,8 +90,11 @@ func testNoShardTaskToSubTaskConfigs(c *check.C) { c.Assert(subTaskConfig.LoaderConfig.Dir, check.Equals, fmt.Sprintf( "%s.%s", *task.SourceConfig.FullMigrateConf.DataDir, task.Name)) c.Assert(subTaskConfig.LoaderConfig.PoolSize, check.Equals, *task.SourceConfig.FullMigrateConf.ImportThreads) - c.Assert(subTaskConfig.SyncerConfig.WorkerCount, check.Equals, *task.SourceConfig.IncrMigrateConf.ReplThreads) + c.Assert(subTaskConfig.SyncerConfig.Compact, check.Equals, *task.SourceConfig.IncrMigrateConf.Compact) c.Assert(subTaskConfig.SyncerConfig.Batch, check.Equals, *task.SourceConfig.IncrMigrateConf.ReplBatch) + c.Assert(subTaskConfig.SyncerConfig.WorkerCount, check.Equals, *task.SourceConfig.IncrMigrateConf.ReplThreads) + c.Assert(subTaskConfig.SyncerConfig.MultipleRows, check.Equals, *task.SourceConfig.IncrMigrateConf.MultipleRows) + // check route c.Assert(subTaskConfig.RouteRules, check.HasLen, 1) rule := subTaskConfig.RouteRules[0] @@ -280,6 +287,21 @@ func testNoShardSubTaskConfigsToOpenAPITask(c *check.C) { c.Assert(taskList, check.HasLen, 1) newTask := taskList[0] + t1, _ := newTask.ToJSON() + t2, _ := task.ToJSON() + c.Assert(string(t1), check.Equals, string(t2)) + + // println("~~~~~~t1~~~~~~~", task.CollationCompatible, task.TimeZone) + // println("~~~~~~t2~~~~~~~", newTask.CollationCompatible, newTask.TimeZone) + + // c.Assert(*task.CollationCompatible, check.Equals, *newTask.CollationCompatible) + // c.Assert(*task.TimeZone, check.Equals, *newTask.TimeZone) + // c.Assert(task.SourceConfig.IncrMigrateConf, check.DeepEquals, newTask.SourceConfig.IncrMigrateConf) + + // newTask.TimeZone = task.TimeZone + // newTask.CollationCompatible = task.CollationCompatible + // newTask.SourceConfig.IncrMigrateConf = task.SourceConfig.IncrMigrateConf + c.Assert(task, check.DeepEquals, newTask) } diff --git a/dm/openapi/fixtures/task.go b/dm/openapi/fixtures/task.go index dd749ec6459..c26b9ce4517 100644 --- a/dm/openapi/fixtures/task.go +++ b/dm/openapi/fixtures/task.go @@ -25,6 +25,8 @@ var ( "enhance_online_schema_change": true, "meta_schema": "dm_meta", "name": "test", + "time_zone": "Asia/Shanghai", + "collation_compatible": "loose", "on_duplicate": "error", "source_config": { "full_migrate_conf": { @@ -32,7 +34,12 @@ var ( "export_threads": 4, "import_threads": 16 }, - "incr_migrate_conf": { "repl_batch": 200, "repl_threads": 32 }, + "incr_migrate_conf": { + "repl_threads": 16, + "repl_batch": 100, + "multiple_rows": false, + "compact": false + }, "source_conf": [{ "source_name": "mysql-replica-01" }] }, "table_migrate_rule": [ diff --git a/dm/openapi/gen.server.go b/dm/openapi/gen.server.go index 75b9d33027b..e6210565b4c 100644 --- a/dm/openapi/gen.server.go +++ b/dm/openapi/gen.server.go @@ -969,89 +969,94 @@ func RegisterHandlersWithOptions(router *gin.Engine, si ServerInterface, options // Base64 encoded, gzipped, json marshaled Swagger object var swaggerSpec = []string{ - "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", - "ZHbBRz4ue3D35e7fAQAA//8e+VfyHY4AAA==", + "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", } // 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 806b973aac7..9b0be252f70 100644 --- a/dm/openapi/gen.types.go +++ b/dm/openapi/gen.types.go @@ -8,6 +8,13 @@ import ( "fmt" ) +// Defines values for TaskCollationCompatible. +const ( + TaskCollationCompatibleLoose TaskCollationCompatible = "loose" + + TaskCollationCompatibleStrict TaskCollationCompatible = "strict" +) + // Defines values for TaskOnDuplicate. const ( TaskOnDuplicateError TaskOnDuplicate = "error" @@ -344,6 +351,9 @@ type TableNameList []string type Task struct { BinlogFilterRule *Task_BinlogFilterRule `json:"binlog_filter_rule,omitempty"` + // default value is `loose` handle create sql by original sql, will not add default collation as upstream but `strict` will add default collation as upstream, and downstream will occur error when downstream don't support + CollationCompatible *TaskCollationCompatible `json:"collation_compatible,omitempty"` + // whether to enable support for the online ddl plugin EnhanceOnlineSchemaChange bool `json:"enhance_online_schema_change"` @@ -371,6 +381,9 @@ type Task struct { // migrate mode TaskMode TaskTaskMode `json:"task_mode"` + + // timezone of database session, if timezone is empty, timezone will auto adjusted in each unit + TimeZone *string `json:"time_zone,omitempty"` } // Task_BinlogFilterRule defines model for Task.BinlogFilterRule. @@ -378,6 +391,9 @@ type Task_BinlogFilterRule struct { AdditionalProperties map[string]TaskBinLogFilterRule `json:"-"` } +// default value is `loose` handle create sql by original sql, will not add default collation as upstream but `strict` will add default collation as upstream, and downstream will occur error when downstream don't support +type TaskCollationCompatible string + // how to handle conflicted data type TaskOnDuplicate string @@ -413,6 +429,12 @@ type TaskFullMigrateConf struct { // configuration of incremental tasks type TaskIncrMigrateConf struct { + // if set to true, DM compacts as many upstream statements on the same rows as possible into a single statements without increasing latency. + Compact *bool `json:"compact,omitempty"` + + // if set to true, DM combines as many statements of the same type as possible into a single statement and generates a single SQL statement with multiple rows of data. + MultipleRows *bool `json:"multiple_rows,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 c13d573ddfe..8ebb0ed79e8 100644 --- a/dm/openapi/spec/dm.yaml +++ b/dm/openapi/spec/dm.yaml @@ -1390,6 +1390,14 @@ components: type: integer description: incremental synchronization of batch execution sql quantities default: 100 + multiple_rows: + type: boolean + default: false + description: if set to true, DM combines as many statements of the same type as possible into a single statement and generates a single SQL statement with multiple rows of data. + compact: + type: boolean + default: false + description: if set to true, DM compacts as many upstream statements on the same rows as possible into a single statements without increasing latency. TaskSourceConf: type: object properties: @@ -1467,6 +1475,18 @@ components: example: "dm-meta" description: "downstream database for storing meta information" default: "dm-meta" + time_zone: + type: string + example: "Asia/Shanghai" + description: "timezone of database session, if timezone is empty, timezone will auto adjusted in each unit" + default: "" + collation_compatible: + type: string + description: default value is `loose` handle create sql by original sql, will not add default collation as upstream but `strict` will add default collation as upstream, and downstream will occur error when downstream don't support + default: "loose" + enum: + - "loose" + - "strict" enhance_online_schema_change: type: boolean example: true