From 0fa5ce148f628194b9c84adcbf5a414b38de1f65 Mon Sep 17 00:00:00 2001 From: gmhdbjd Date: Thu, 27 Oct 2022 13:49:48 +0800 Subject: [PATCH 01/16] remove concurrency --- .github/workflows/dataflow_engine_chaos.yaml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/.github/workflows/dataflow_engine_chaos.yaml b/.github/workflows/dataflow_engine_chaos.yaml index 44e5d21071f..0e9db737251 100644 --- a/.github/workflows/dataflow_engine_chaos.yaml +++ b/.github/workflows/dataflow_engine_chaos.yaml @@ -10,11 +10,6 @@ on: required: true default: '' -# See: https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#concurrency. -concurrency: - group: ${{ github.ref }}-${{ github.workflow }} - cancel-in-progress: true - # A workflow run is made up of one or more jobs that can run sequentially or in parallel jobs: # This workflow contains a single job called "base" From ed56c20129a4fa4fb766a9aeb070f492e410e989 Mon Sep 17 00:00:00 2001 From: gmhdbjd Date: Thu, 1 Jun 2023 17:30:53 +0800 Subject: [PATCH 02/16] add error code --- dm/_utils/terror_gen/errors_release.txt | 1 + dm/errors.toml | 6 ++++++ dm/pkg/terror/error_list.go | 2 ++ 3 files changed, 9 insertions(+) diff --git a/dm/_utils/terror_gen/errors_release.txt b/dm/_utils/terror_gen/errors_release.txt index 604b35343b7..dedff631b9f 100644 --- a/dm/_utils/terror_gen/errors_release.txt +++ b/dm/_utils/terror_gen/errors_release.txt @@ -198,6 +198,7 @@ ErrConfigInvalidPhysicalDuplicateResolution,[code=20062:class=config:scope=inter ErrConfigInvalidPhysicalChecksum,[code=20063:class=config:scope=internal:level=medium], "Message: invalid load checksum-physical option '%s', Workaround: Please choose a valid value in ['required', 'optional', 'off'] or leave it empty." ErrConfigColumnMappingDeprecated,[code=20064:class=config:scope=internal:level=high], "Message: column-mapping is not supported since v6.6.0, Workaround: Please use extract-table/extract-schema/extract-source to handle data conflict when merge tables. See https://docs.pingcap.com/tidb/v6.4/task-configuration-file-full#task-configuration-file-template-advanced" ErrConfigInvalidLoadAnalyze,[code=20065:class=config:scope=internal:level=medium], "Message: invalid load analyze option '%s', Workaround: Please choose a valid value in ['required', 'optional', 'off'] or leave it empty." +ErrConfigStrictOptimisticShardMode,[code=20066:class=config:scope=internal:level=medium], "Message: cannot enable `strict-optimistic-shard-mode` while `shard-mode` is not `optimistic`, Workaround: Please set `shard-mode` to `optimistic` if you want to enable `strict-optimistic-shard-mode`." ErrBinlogExtractPosition,[code=22001:class=binlog-op:scope=internal:level=high] ErrBinlogInvalidFilename,[code=22002:class=binlog-op:scope=internal:level=high], "Message: invalid binlog filename" ErrBinlogParsePosFromStr,[code=22003:class=binlog-op:scope=internal:level=high] diff --git a/dm/errors.toml b/dm/errors.toml index 8359853af67..28018bbc5dc 100644 --- a/dm/errors.toml +++ b/dm/errors.toml @@ -1204,6 +1204,12 @@ description = "" workaround = "Please choose a valid value in ['required', 'optional', 'off'] or leave it empty." tags = ["internal", "medium"] +[error.DM-config-20066] +message = "cannot enable `strict-optimistic-shard-mode` while `shard-mode` is not `optimistic`" +description = "" +workaround = "Please set `shard-mode` to `optimistic` if you want to enable `strict-optimistic-shard-mode`." +tags = ["internal", "medium"] + [error.DM-binlog-op-22001] message = "" description = "" diff --git a/dm/pkg/terror/error_list.go b/dm/pkg/terror/error_list.go index bc45512b439..1239b7901d6 100644 --- a/dm/pkg/terror/error_list.go +++ b/dm/pkg/terror/error_list.go @@ -270,6 +270,7 @@ const ( codeConfigInvalidLoadPhysicalChecksum codeConfigColumnMappingDeprecated codeConfigInvalidLoadAnalyze + codeConfigStrictOptimisticShardMode ) // Binlog operation error code list. @@ -981,6 +982,7 @@ var ( ErrConfigInvalidPhysicalChecksum = New(codeConfigInvalidLoadPhysicalChecksum, ClassConfig, ScopeInternal, LevelMedium, "invalid load checksum-physical option '%s'", "Please choose a valid value in ['required', 'optional', 'off'] or leave it empty.") ErrConfigColumnMappingDeprecated = New(codeConfigColumnMappingDeprecated, ClassConfig, ScopeInternal, LevelHigh, "column-mapping is not supported since v6.6.0", "Please use extract-table/extract-schema/extract-source to handle data conflict when merge tables. See https://docs.pingcap.com/tidb/v6.4/task-configuration-file-full#task-configuration-file-template-advanced") ErrConfigInvalidLoadAnalyze = New(codeConfigInvalidLoadAnalyze, ClassConfig, ScopeInternal, LevelMedium, "invalid load analyze option '%s'", "Please choose a valid value in ['required', 'optional', 'off'] or leave it empty.") + ErrConfigStrictOptimisticShardMode = New(codeConfigStrictOptimisticShardMode, ClassConfig, ScopeInternal, LevelMedium, "cannot enable `strict-optimistic-shard-mode` while `shard-mode` is not `optimistic`", "Please set `shard-mode` to `optimistic` if you want to enable `strict-optimistic-shard-mode`.") // Binlog operation error. ErrBinlogExtractPosition = New(codeBinlogExtractPosition, ClassBinlogOp, ScopeInternal, LevelHigh, "", "") From 2453b328ff3847f3b4655a6725d67d9298c9ffe9 Mon Sep 17 00:00:00 2001 From: gmhdbjd Date: Thu, 1 Jun 2023 17:31:11 +0800 Subject: [PATCH 03/16] add strict-optimistic-shard-mode --- dm/config/subtask.go | 10 +++++++--- dm/config/task.go | 12 ++++++++---- dm/config/task_converters.go | 2 ++ dm/syncer/ddl.go | 5 +++++ 4 files changed, 22 insertions(+), 7 deletions(-) diff --git a/dm/config/subtask.go b/dm/config/subtask.go index 4955b7ad07d..7c20a501b07 100644 --- a/dm/config/subtask.go +++ b/dm/config/subtask.go @@ -84,9 +84,10 @@ type SubTaskConfig struct { flagSet *flag.FlagSet // when in sharding, multi dm-workers do one task - IsSharding bool `toml:"is-sharding" json:"is-sharding"` - ShardMode string `toml:"shard-mode" json:"shard-mode"` - OnlineDDL bool `toml:"online-ddl" json:"online-ddl"` + IsSharding bool `toml:"is-sharding" json:"is-sharding"` + ShardMode string `toml:"shard-mode" json:"shard-mode"` + StrictOptimisticShardMode bool `toml:"strict-optimistic-shard-mode" json:"strict-optimistic-shard-mode"` + OnlineDDL bool `toml:"online-ddl" json:"online-ddl"` // pt/gh-ost name rule, support regex ShadowTableRules []string `yaml:"shadow-table-rules" toml:"shadow-table-rules" json:"shadow-table-rules"` @@ -288,6 +289,9 @@ func (c *SubTaskConfig) Adjust(verifyDecryptPassword bool) error { } else if c.ShardMode == "" && c.IsSharding { c.ShardMode = ShardPessimistic // use the pessimistic mode as default for back compatible. } + if c.StrictOptimisticShardMode && c.ShardMode != ShardOptimistic { + return terror.ErrConfigStrictOptimisticShardMode.Generate() + } if len(c.ColumnMappingRules) > 0 { return terror.ErrConfigColumnMappingDeprecated.Generate() diff --git a/dm/config/task.go b/dm/config/task.go index e4dc9ca4561..d3b5daea652 100644 --- a/dm/config/task.go +++ b/dm/config/task.go @@ -503,10 +503,11 @@ func defaultValidatorConfig() ValidatorConfig { type TaskConfig struct { *flag.FlagSet `yaml:"-" toml:"-" json:"-"` - Name string `yaml:"name" toml:"name" json:"name"` - TaskMode string `yaml:"task-mode" toml:"task-mode" json:"task-mode"` - IsSharding bool `yaml:"is-sharding" toml:"is-sharding" json:"is-sharding"` - ShardMode string `yaml:"shard-mode" toml:"shard-mode" json:"shard-mode"` // when `shard-mode` set, we always enable sharding support. + Name string `yaml:"name" toml:"name" json:"name"` + TaskMode string `yaml:"task-mode" toml:"task-mode" json:"task-mode"` + IsSharding bool `yaml:"is-sharding" toml:"is-sharding" json:"is-sharding"` + ShardMode string `yaml:"shard-mode" toml:"shard-mode" json:"shard-mode"` // when `shard-mode` set, we always enable sharding support. + StrictOptimisticShardMode bool `yaml:"strict-optimistic-shard-mode" toml:"strict-optimistic-shard-mode" json:"strict-optimistic-shard-mode"` // treat it as hidden configuration IgnoreCheckingItems []string `yaml:"ignore-checking-items" toml:"ignore-checking-items" json:"ignore-checking-items"` // we store detail status in meta @@ -682,6 +683,9 @@ func (c *TaskConfig) adjust() error { } else if c.ShardMode == "" && c.IsSharding { c.ShardMode = ShardPessimistic // use the pessimistic mode as default for back compatible. } + if c.StrictOptimisticShardMode && c.ShardMode != ShardOptimistic { + return terror.ErrConfigStrictOptimisticShardMode.Generate() + } if len(c.ColumnMappings) > 0 { return terror.ErrConfigColumnMappingDeprecated.Generate() diff --git a/dm/config/task_converters.go b/dm/config/task_converters.go index 9e1ff99adef..8beb7dc90c7 100644 --- a/dm/config/task_converters.go +++ b/dm/config/task_converters.go @@ -42,6 +42,7 @@ func TaskConfigToSubTaskConfigs(c *TaskConfig, sources map[string]dbconfig.DBCon cfg := NewSubTaskConfig() cfg.IsSharding = c.IsSharding cfg.ShardMode = c.ShardMode + cfg.StrictOptimisticShardMode = c.StrictOptimisticShardMode cfg.OnlineDDL = c.OnlineDDL cfg.TrashTableRules = c.TrashTableRules cfg.ShadowTableRules = c.ShadowTableRules @@ -314,6 +315,7 @@ func SubTaskConfigsToTaskConfig(stCfgs ...*SubTaskConfig) *TaskConfig { c.TaskMode = stCfg0.Mode c.IsSharding = stCfg0.IsSharding c.ShardMode = stCfg0.ShardMode + c.StrictOptimisticShardMode = stCfg0.StrictOptimisticShardMode c.IgnoreCheckingItems = stCfg0.IgnoreCheckingItems c.MetaSchema = stCfg0.MetaSchema c.EnableHeartbeat = stCfg0.EnableHeartbeat diff --git a/dm/syncer/ddl.go b/dm/syncer/ddl.go index 0c7acebdd27..b8304c3b036 100644 --- a/dm/syncer/ddl.go +++ b/dm/syncer/ddl.go @@ -187,6 +187,7 @@ type Optimist struct { getTableInfo func(tctx *tcontext.Context, sourceTable, targetTable *filter.Table) (*model.TableInfo, error) execError *atomic.Error optimist *shardddl.Optimist // shard DDL optimist + strict bool } func NewOptimistDDL(pLogger *log.Logger, syncer *Syncer) *Optimist { @@ -203,6 +204,7 @@ func NewOptimistDDL(pLogger *log.Logger, syncer *Syncer) *Optimist { getTableInfo: syncer.getTableInfo, execError: &syncer.execError, optimist: syncer.optimist, + strict: syncer.cfg.StrictOptimisticShardMode, } } @@ -861,6 +863,9 @@ func (ddl *Optimist) handleDDL(qec *queryEventContext) error { // To do this, we append this table to osgk to prevent the following ddl/dmls from being executed. // conflict location must be the start location for current received ddl event. case optimism.ConflictSkipWaitRedirect: + if ddl.strict { + return terror.ErrSyncerShardDDLConflict.Generate(qec.needHandleDDLs, "") + } // TODO: check if we don't need Clone for startLocation first := ddl.osgk.appendConflictTable(upTable, downTable, qec.startLocation.Clone(), ddl.flavor, ddl.enableGTID) if first { From 9deba6556fa435f21fcd08fcf93ba6cf90bf918d Mon Sep 17 00:00:00 2001 From: gmhdbjd Date: Thu, 1 Jun 2023 17:44:08 +0800 Subject: [PATCH 04/16] add downgrade item --- dm/config/task.go | 70 ++++++++++++++++++++++++----------------------- 1 file changed, 36 insertions(+), 34 deletions(-) diff --git a/dm/config/task.go b/dm/config/task.go index d3b5daea652..9f7765dfbe0 100644 --- a/dm/config/task.go +++ b/dm/config/task.go @@ -1241,45 +1241,47 @@ type TaskConfigForDowngrade struct { EnableANSIQuotes bool `yaml:"ansi-quotes"` RemoveMeta bool `yaml:"remove-meta"` // new config item - MySQLInstances []*MySQLInstanceForDowngrade `yaml:"mysql-instances"` - ExprFilter map[string]*ExpressionFilter `yaml:"expression-filter,omitempty"` - OnlineDDL bool `yaml:"online-ddl,omitempty"` - ShadowTableRules []string `yaml:"shadow-table-rules,omitempty"` - TrashTableRules []string `yaml:"trash-table-rules,omitempty"` + MySQLInstances []*MySQLInstanceForDowngrade `yaml:"mysql-instances"` + ExprFilter map[string]*ExpressionFilter `yaml:"expression-filter,omitempty"` + OnlineDDL bool `yaml:"online-ddl,omitempty"` + ShadowTableRules []string `yaml:"shadow-table-rules,omitempty"` + TrashTableRules []string `yaml:"trash-table-rules,omitempty"` + StrictOptimisticShardMode bool `yaml:"strict-optimistic-shard-mode,omitempty"` } // NewTaskConfigForDowngrade create new TaskConfigForDowngrade. func NewTaskConfigForDowngrade(taskConfig *TaskConfig) *TaskConfigForDowngrade { return &TaskConfigForDowngrade{ - Name: taskConfig.Name, - TaskMode: taskConfig.TaskMode, - IsSharding: taskConfig.IsSharding, - ShardMode: taskConfig.ShardMode, - IgnoreCheckingItems: taskConfig.IgnoreCheckingItems, - MetaSchema: taskConfig.MetaSchema, - EnableHeartbeat: taskConfig.EnableHeartbeat, - HeartbeatUpdateInterval: taskConfig.HeartbeatUpdateInterval, - HeartbeatReportInterval: taskConfig.HeartbeatReportInterval, - Timezone: taskConfig.Timezone, - CaseSensitive: taskConfig.CaseSensitive, - TargetDB: taskConfig.TargetDB, - OnlineDDLScheme: taskConfig.OnlineDDLScheme, - Routes: taskConfig.Routes, - Filters: taskConfig.Filters, - ColumnMappings: taskConfig.ColumnMappings, - BWList: taskConfig.BWList, - BAList: taskConfig.BAList, - Mydumpers: taskConfig.Mydumpers, - Loaders: NewLoaderConfigForDowngrade(taskConfig.Loaders), - Syncers: NewSyncerConfigsForDowngrade(taskConfig.Syncers), - CleanDumpFile: taskConfig.CleanDumpFile, - EnableANSIQuotes: taskConfig.EnableANSIQuotes, - RemoveMeta: taskConfig.RemoveMeta, - MySQLInstances: NewMySQLInstancesForDowngrade(taskConfig.MySQLInstances), - ExprFilter: taskConfig.ExprFilter, - OnlineDDL: taskConfig.OnlineDDL, - ShadowTableRules: taskConfig.ShadowTableRules, - TrashTableRules: taskConfig.TrashTableRules, + Name: taskConfig.Name, + TaskMode: taskConfig.TaskMode, + IsSharding: taskConfig.IsSharding, + ShardMode: taskConfig.ShardMode, + StrictOptimisticShardMode: taskConfig.StrictOptimisticShardMode, + IgnoreCheckingItems: taskConfig.IgnoreCheckingItems, + MetaSchema: taskConfig.MetaSchema, + EnableHeartbeat: taskConfig.EnableHeartbeat, + HeartbeatUpdateInterval: taskConfig.HeartbeatUpdateInterval, + HeartbeatReportInterval: taskConfig.HeartbeatReportInterval, + Timezone: taskConfig.Timezone, + CaseSensitive: taskConfig.CaseSensitive, + TargetDB: taskConfig.TargetDB, + OnlineDDLScheme: taskConfig.OnlineDDLScheme, + Routes: taskConfig.Routes, + Filters: taskConfig.Filters, + ColumnMappings: taskConfig.ColumnMappings, + BWList: taskConfig.BWList, + BAList: taskConfig.BAList, + Mydumpers: taskConfig.Mydumpers, + Loaders: NewLoaderConfigForDowngrade(taskConfig.Loaders), + Syncers: NewSyncerConfigsForDowngrade(taskConfig.Syncers), + CleanDumpFile: taskConfig.CleanDumpFile, + EnableANSIQuotes: taskConfig.EnableANSIQuotes, + RemoveMeta: taskConfig.RemoveMeta, + MySQLInstances: NewMySQLInstancesForDowngrade(taskConfig.MySQLInstances), + ExprFilter: taskConfig.ExprFilter, + OnlineDDL: taskConfig.OnlineDDL, + ShadowTableRules: taskConfig.ShadowTableRules, + TrashTableRules: taskConfig.TrashTableRules, } } From a45c15b1776fa3ba8b5b3fc0b605bf36be17ac9d Mon Sep 17 00:00:00 2001 From: gmhdbjd Date: Thu, 1 Jun 2023 18:04:13 +0800 Subject: [PATCH 05/16] add openapi config --- dm/config/task_converters.go | 4 + dm/openapi/gen.server.go | 193 ++++++++++++++++++----------------- dm/openapi/gen.types.go | 5 +- dm/openapi/spec/dm.yaml | 5 + 4 files changed, 110 insertions(+), 97 deletions(-) diff --git a/dm/config/task_converters.go b/dm/config/task_converters.go index 8beb7dc90c7..261d1ccdb34 100644 --- a/dm/config/task_converters.go +++ b/dm/config/task_converters.go @@ -182,6 +182,9 @@ func OpenAPITaskToSubTaskConfigs(task *openapi.Task, toDBCfg *dbconfig.DBConfig, } else { subTaskCfg.IsSharding = false } + if task.StrictOptimisticShardMode != nil { + subTaskCfg.StrictOptimisticShardMode = *task.StrictOptimisticShardMode + } // set online ddl plugin config subTaskCfg.OnlineDDL = task.EnhanceOnlineSchemaChange // set case sensitive from source @@ -613,6 +616,7 @@ func SubTaskConfigsToOpenAPITask(subTaskConfigList []*SubTaskConfig) *openapi.Ta taskShardMode := openapi.TaskShardMode(oneSubtaskConfig.ShardMode) task.ShardMode = &taskShardMode } + task.StrictOptimisticShardMode = &oneSubtaskConfig.StrictOptimisticShardMode if len(filterMap) > 0 { task.BinlogFilterRule = &filterRuleMap } diff --git a/dm/openapi/gen.server.go b/dm/openapi/gen.server.go index bf40d67a7d9..4060295efc7 100644 --- a/dm/openapi/gen.server.go +++ b/dm/openapi/gen.server.go @@ -1255,102 +1255,103 @@ var swaggerSpec = []string{ "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", + "2/8LAAD//xNoTUdjtwAA", } // 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 25731a6c3ff..7867255bb6d 100644 --- a/dm/openapi/gen.types.go +++ b/dm/openapi/gen.types.go @@ -75,7 +75,7 @@ type ClusterWorker struct { // address of the current master node Addr string `json:"addr"` - // bound source name of this worker node + // source name bound to this worker node BoundSourceName string `json:"bound_source_name"` // bound stage of this worker node @@ -501,6 +501,9 @@ type Task struct { SourceConfig TaskSourceConfig `json:"source_config"` StatusList *[]SubTaskStatus `json:"status_list,omitempty"` + // whether to enable strict optimistic shard mode + StrictOptimisticShardMode *bool `json:"strict_optimistic_shard_mode,omitempty"` + // table migrate rule TableMigrateRule []TaskTableMigrateRule `json:"table_migrate_rule"` diff --git a/dm/openapi/spec/dm.yaml b/dm/openapi/spec/dm.yaml index 07e6772acba..f3ef606a92d 100644 --- a/dm/openapi/spec/dm.yaml +++ b/dm/openapi/spec/dm.yaml @@ -1775,6 +1775,11 @@ components: enum: - "pessimistic" - "optimistic" + strict_optimistic_shard_mode: + type: boolean + example: true + description: "whether to enable strict optimistic shard mode" + default: false meta_schema: type: string example: "dm-meta" From 15747f83c68a48979b288dc2ccf12143bcd10348 Mon Sep 17 00:00:00 2001 From: gmhdbjd Date: Thu, 1 Jun 2023 18:11:22 +0800 Subject: [PATCH 06/16] add engine config --- engine/jobmaster/dm/config/config.go | 34 +++++++++++++++------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/engine/jobmaster/dm/config/config.go b/engine/jobmaster/dm/config/config.go index e4b44b3a8b8..eceaa3fdb56 100644 --- a/engine/jobmaster/dm/config/config.go +++ b/engine/jobmaster/dm/config/config.go @@ -79,22 +79,23 @@ func (u *UpstreamCfg) adjust() error { // It represents a DM subtask with multiple source configs embedded as Upstreams. // DISCUSS: support command line args. e.g. --start-time. type JobCfg struct { - TaskMode string `yaml:"task-mode" toml:"task-mode" json:"task-mode"` - ShardMode string `yaml:"shard-mode" toml:"shard-mode" json:"shard-mode"` // when `shard-mode` set, we always enable sharding support. - IgnoreCheckingItems []string `yaml:"ignore-checking-items" toml:"ignore-checking-items" json:"ignore-checking-items"` - Timezone string `yaml:"timezone" toml:"timezone" json:"timezone"` - CollationCompatible string `yaml:"collation_compatible" toml:"collation_compatible" json:"collation_compatible"` - TargetDB *dbconfig.DBConfig `yaml:"target-database" toml:"target-database" json:"target-database"` - ShadowTableRules []string `yaml:"shadow-table-rules" toml:"shadow-table-rules" json:"shadow-table-rules"` - TrashTableRules []string `yaml:"trash-table-rules" toml:"trash-table-rules" json:"trash-table-rules"` - Filters map[string]*bf.BinlogEventRule `yaml:"filters" toml:"filters" json:"filters"` - ExprFilter map[string]*dmconfig.ExpressionFilter `yaml:"expression-filter" toml:"expression-filter" json:"expression-filter"` - BAList map[string]*filter.Rules `yaml:"block-allow-list" toml:"block-allow-list" json:"block-allow-list"` - Mydumpers map[string]*dmconfig.MydumperConfig `yaml:"mydumpers" toml:"mydumpers" json:"mydumpers"` - Loaders map[string]*dmconfig.LoaderConfig `yaml:"loaders" toml:"loaders" json:"loaders"` - Syncers map[string]*dmconfig.SyncerConfig `yaml:"syncers" toml:"syncers" json:"syncers"` - Routes map[string]*router.TableRule `yaml:"routes" toml:"routes" json:"routes"` - Validators map[string]*dmconfig.ValidatorConfig `yaml:"validators" toml:"validators" json:"validators"` + TaskMode string `yaml:"task-mode" toml:"task-mode" json:"task-mode"` + ShardMode string `yaml:"shard-mode" toml:"shard-mode" json:"shard-mode"` // when `shard-mode` set, we always enable sharding support. + StrictOptimisticShardMode bool `yaml:"strict-optimistic-shard-mode" toml:"strict-optimistic-shard-mode" json:"strict-optimistic-shard-mode"` + IgnoreCheckingItems []string `yaml:"ignore-checking-items" toml:"ignore-checking-items" json:"ignore-checking-items"` + Timezone string `yaml:"timezone" toml:"timezone" json:"timezone"` + CollationCompatible string `yaml:"collation_compatible" toml:"collation_compatible" json:"collation_compatible"` + TargetDB *dbconfig.DBConfig `yaml:"target-database" toml:"target-database" json:"target-database"` + ShadowTableRules []string `yaml:"shadow-table-rules" toml:"shadow-table-rules" json:"shadow-table-rules"` + TrashTableRules []string `yaml:"trash-table-rules" toml:"trash-table-rules" json:"trash-table-rules"` + Filters map[string]*bf.BinlogEventRule `yaml:"filters" toml:"filters" json:"filters"` + ExprFilter map[string]*dmconfig.ExpressionFilter `yaml:"expression-filter" toml:"expression-filter" json:"expression-filter"` + BAList map[string]*filter.Rules `yaml:"block-allow-list" toml:"block-allow-list" json:"block-allow-list"` + Mydumpers map[string]*dmconfig.MydumperConfig `yaml:"mydumpers" toml:"mydumpers" json:"mydumpers"` + Loaders map[string]*dmconfig.LoaderConfig `yaml:"loaders" toml:"loaders" json:"loaders"` + Syncers map[string]*dmconfig.SyncerConfig `yaml:"syncers" toml:"syncers" json:"syncers"` + Routes map[string]*router.TableRule `yaml:"routes" toml:"routes" json:"routes"` + Validators map[string]*dmconfig.ValidatorConfig `yaml:"validators" toml:"validators" json:"validators"` // remove source config, use db config instead. Upstreams []*UpstreamCfg `yaml:"upstreams" toml:"upstreams" json:"upstreams"` @@ -281,6 +282,7 @@ func (c *TaskCfg) ToJobCfg() *JobCfg { func (c *TaskCfg) ToDMSubTaskCfg(jobID string) *dmconfig.SubTaskConfig { cfg := &dmconfig.SubTaskConfig{} cfg.ShardMode = c.ShardMode + cfg.StrictOptimisticShardMode = c.StrictOptimisticShardMode cfg.OnlineDDL = c.OnlineDDL cfg.ShadowTableRules = c.ShadowTableRules cfg.TrashTableRules = c.TrashTableRules From a903591d2d0a16fe6bcdb5972831387d5a6c55d8 Mon Sep 17 00:00:00 2001 From: gmhdbjd Date: Thu, 1 Jun 2023 18:18:15 +0800 Subject: [PATCH 07/16] Revert "remove concurrency" This reverts commit 0fa5ce148f628194b9c84adcbf5a414b38de1f65. --- .github/workflows/dataflow_engine_chaos.yaml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/dataflow_engine_chaos.yaml b/.github/workflows/dataflow_engine_chaos.yaml index 0e9db737251..44e5d21071f 100644 --- a/.github/workflows/dataflow_engine_chaos.yaml +++ b/.github/workflows/dataflow_engine_chaos.yaml @@ -10,6 +10,11 @@ on: required: true default: '' +# See: https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#concurrency. +concurrency: + group: ${{ github.ref }}-${{ github.workflow }} + cancel-in-progress: true + # A workflow run is made up of one or more jobs that can run sequentially or in parallel jobs: # This workflow contains a single job called "base" From 518013150fb4f5e00e46f2d72a5bbb1968036650 Mon Sep 17 00:00:00 2001 From: gmhdbjd Date: Thu, 1 Jun 2023 20:32:53 +0800 Subject: [PATCH 08/16] fix error --- dm/pkg/terror/errcode_string.go | 776 ++++++++++++++++---------------- 1 file changed, 389 insertions(+), 387 deletions(-) diff --git a/dm/pkg/terror/errcode_string.go b/dm/pkg/terror/errcode_string.go index 9d164d28a19..092d481a692 100644 --- a/dm/pkg/terror/errcode_string.go +++ b/dm/pkg/terror/errcode_string.go @@ -209,6 +209,7 @@ func _() { _ = x[codeConfigInvalidLoadPhysicalChecksum-20063] _ = x[codeConfigColumnMappingDeprecated-20064] _ = x[codeConfigInvalidLoadAnalyze-20065] + _ = x[codeConfigStrictOptimisticShardMode-20066] _ = x[codeBinlogExtractPosition-22001] _ = x[codeBinlogInvalidFilename-22002] _ = x[codeBinlogParsePosFromStr-22003] @@ -597,7 +598,7 @@ func _() { _ = x[codeNotSet-50000] } -const _ErrCode_name = "DBDriverErrorDBBadConnDBInvalidConnDBUnExpectDBQueryFailedDBExecuteFailedParseMydumperMetaGetFileSizeDropMultipleTablesRenameMultipleTablesAlterMultipleTablesParseSQLUnknownTypeDDLRestoreASTNodeParseGTIDNotSupportedFlavorNotMySQLGTIDNotMariaDBGTIDNotUUIDStringMariaDBDomainIDInvalidServerIDGetSQLModeFromStrVerifySQLOperateArgsStatFileSizeReaderAlreadyRunningReaderAlreadyStartedReaderStateCannotCloseReaderShouldStartSyncEmptyRelayDirReadDirBaseFileNotFoundBinFileCmpCondNotSupportBinlogFileNotValidBinlogFilesNotFoundGetRelayLogStatAddWatchForRelayLogDirWatcherStartWatcherChanClosedWatcherChanRecvErrorRelayLogFileSizeSmallerBinlogFileNotSpecifiedNoRelayLogMatchPosFirstRelayLogNotMatchPosParserParseRelayLogNoSubdirToSwitchNeedSyncAgainSyncClosedSchemaTableNameNotValidGenTableRouterEncryptSecretKeyNotValidEncryptGenCipherEncryptGenIVCiphertextLenNotValidCiphertextContextNotValidInvalidBinlogPosStrEncCipherTextBase64DecodeBinlogWriteBinaryDataBinlogWriteDataToBufferBinlogHeaderLengthNotValidBinlogEventDecodeBinlogEmptyNextBinNameBinlogParseSIDBinlogEmptyGTIDBinlogGTIDSetNotValidBinlogGTIDMySQLNotValidBinlogGTIDMariaDBNotValidBinlogMariaDBServerIDMismatchBinlogOnlyOneGTIDSupportBinlogOnlyOneIntervalInUUIDBinlogIntervalValueNotValidBinlogEmptyQueryBinlogTableMapEvNotValidBinlogExpectFormatDescEvBinlogExpectTableMapEvBinlogExpectRowsEvBinlogUnexpectedEvBinlogParseSingleEvBinlogEventTypeNotValidBinlogEventNoRowsBinlogEventNoColumnsBinlogEventRowLengthNotEqBinlogColumnTypeNotSupportBinlogGoMySQLTypeNotSupportBinlogColumnTypeMisMatchBinlogDummyEvSizeTooSmallBinlogFlavorNotSupportBinlogDMLEmptyDataBinlogLatestGTIDNotInPrevBinlogReadFileByGTIDBinlogWriterNotStateNewBinlogWriterStateCannotCloseBinlogWriterNeedStartBinlogWriterOpenFileBinlogWriterGetFileStatBinlogWriterWriteDataLenBinlogWriterFileNotOpenedBinlogWriterFileSyncBinlogPrevGTIDEvNotValidBinlogDecodeMySQLGTIDSetBinlogNeedMariaDBGTIDSetBinlogParseMariaDBGTIDSetBinlogMariaDBAddGTIDSetTracingEventDataNotValidTracingUploadDataTracingEventTypeNotValidTracingGetTraceCodeTracingDataChecksumTracingGetTSOBackoffArgsNotValidInitLoggerFailGTIDTruncateInvalidRelayLogGivenPosTooBigElectionCampaignFailElectionGetLeaderIDFailBinlogInvalidFilenameWithUUIDSuffixDecodeEtcdKeyFailShardDDLOptimismTrySyncFailConnInvalidTLSConfigConnRegistryTLSConfigUpgradeVersionEtcdFailInvalidV1WorkerMetaPathFailUpdateV1DBSchemaBinlogStatusVarsParseVerifyHandleErrorArgsRewriteSQLNoUUIDDirMatchGTIDNoRelayPosMatchGTIDReaderReachEndOfFileMetadataNoBinlogLocPreviousGTIDNotExistNoMasterStatusBinlogNotLogColumnShardDDLOptimismNeedSkipAndRedirectShardDDLOptimismAddNotFullyDroppedColumnSyncerCancelledDDLIncorrectReturnColumnsNumConfigCheckItemNotSupportConfigTomlTransformConfigYamlTransformConfigTaskNameEmptyConfigEmptySourceIDConfigTooLongSourceIDConfigOnlineSchemeNotSupportConfigInvalidTimezoneConfigParseFlagSetConfigDecryptDBPasswordConfigMetaInvalidConfigMySQLInstNotFoundConfigMySQLInstsAtLeastOneConfigMySQLInstSameSourceIDConfigMydumperCfgConflictConfigLoaderCfgConflictConfigSyncerCfgConflictConfigReadCfgFromFileConfigNeedUniqueTaskNameConfigInvalidTaskModeConfigNeedTargetDBConfigMetadataNotSetConfigRouteRuleNotFoundConfigFilterRuleNotFoundConfigColumnMappingNotFoundConfigBAListNotFoundConfigMydumperCfgNotFoundConfigMydumperPathNotValidConfigLoaderCfgNotFoundConfigSyncerCfgNotFoundConfigSourceIDNotFoundConfigDuplicateCfgItemConfigShardModeNotSupportConfigMoreThanOneConfigEtcdParseConfigMissingForBoundConfigBinlogEventFilterConfigGlobalConfigsUnusedConfigExprFilterManyExprConfigExprFilterNotFoundConfigExprFilterWrongGrammarConfigExprFilterEmptyNameConfigCheckerMaxTooSmallConfigGenBAListConfigGenTableRouterConfigGenColumnMappingConfigInvalidChunkFileSizeConfigOnlineDDLInvalidRegexConfigOnlineDDLMistakeRegexConfigOpenAPITaskConfigExistConfigOpenAPITaskConfigNotExistCollationCompatibleNotSupportConfigInvalidLoadModeConfigInvalidLoadDuplicateResolutionConfigValidationModeContinuousValidatorCfgNotFoundConfigStartTimeTooLateConfigLoaderDirInvalidConfigLoaderS3NotSupportConfigInvalidSafeModeDurationConfigConfictSafeModeDurationAndSafeModeConfigInvalidLoadPhysicalDuplicateResolutionConfigInvalidLoadPhysicalChecksumConfigColumnMappingDeprecatedConfigInvalidLoadAnalyzeBinlogExtractPositionBinlogInvalidFilenameBinlogParsePosFromStrCheckpointInvalidTaskModeCheckpointSaveInvalidPosCheckpointInvalidTableFileCheckpointDBNotExistInFileCheckpointTableNotExistInFileCheckpointRestoreCountGreaterTaskCheckSameTableNameTaskCheckFailedOpenDBTaskCheckGenTableRouterTaskCheckGenColumnMappingTaskCheckSyncConfigErrorTaskCheckGenBAListSourceCheckGTIDRelayParseUUIDIndexRelayParseUUIDSuffixRelayUUIDWithSuffixNotFoundRelayGenFakeRotateEventRelayNoValidRelaySubDirRelayUUIDSuffixNotValidRelayUUIDSuffixLessThanPrevRelayLoadMetaDataRelayBinlogNameNotValidRelayNoCurrentUUIDRelayFlushLocalMetaRelayUpdateIndexFileRelayLogDirpathEmptyRelayReaderNotStateNewRelayReaderStateCannotCloseRelayReaderNeedStartRelayTCPReaderStartSyncRelayTCPReaderNilGTIDRelayTCPReaderStartSyncGTIDRelayTCPReaderGetEventRelayWriterNotStateNewRelayWriterStateCannotCloseRelayWriterNeedStartRelayWriterNotOpenedRelayWriterExpectRotateEvRelayWriterRotateEvWithNoWriterRelayWriterStatusNotValidRelayWriterGetFileStatRelayWriterLatestPosGTFileSizeRelayWriterFileOperateRelayCheckBinlogFileHeaderExistRelayCheckFormatDescEventExistRelayCheckFormatDescEventParseEvRelayCheckIsDuplicateEventRelayUpdateGTIDRelayNeedPrevGTIDEvBeforeGTIDEvRelayNeedMaGTIDListEvBeforeGTIDEvRelayMkdirRelaySwitchMasterNeedGTIDRelayThisStrategyIsPurgingRelayOtherStrategyIsPurgingRelayPurgeIsForbiddenRelayNoActiveRelayLogRelayPurgeRequestNotValidRelayTrimUUIDNotFoundRelayRemoveFileFailRelayPurgeArgsNotValidPreviousGTIDsNotValidRotateEventWithDifferentServerIDDumpUnitRuntimeDumpUnitGenTableRouterDumpUnitGenBAListDumpUnitGlobalLockLoadUnitCreateSchemaFileLoadUnitInvalidFileEndingLoadUnitParseQuoteValuesLoadUnitDoColumnMappingLoadUnitReadSchemaFileLoadUnitParseStatementLoadUnitNotCreateTableLoadUnitDispatchSQLFromFileLoadUnitInvalidInsertSQLLoadUnitGenTableRouterLoadUnitGenColumnMappingLoadUnitNoDBFileLoadUnitNoTableFileLoadUnitDumpDirNotFoundLoadUnitDuplicateTableFileLoadUnitGenBAListLoadTaskWorkerNotMatchLoadCheckPointNotMatchLoadLightningRuntimeLoadLightningHasDupLoadLightningChecksumSyncerUnitPanicSyncUnitInvalidTableNameSyncUnitTableNameQuerySyncUnitNotSupportedDMLSyncUnitAddTableInShardingSyncUnitDropSchemaTableInShardingSyncUnitInvalidShardMetaSyncUnitDDLWrongSequenceSyncUnitDDLActiveIndexLargerSyncUnitDupTableGroupSyncUnitShardingGroupNotFoundSyncUnitSafeModeSetCountSyncUnitCausalityConflictSyncUnitDMLStatementFoundSyncerUnitBinlogEventFilterSyncerUnitInvalidReplicaEventSyncerUnitParseStmtSyncerUnitUUIDNotLatestSyncerUnitDDLExecChanCloseOrBusySyncerUnitDDLChanDoneSyncerUnitDDLChanCanceledSyncerUnitDDLOnMultipleTableSyncerUnitInjectDDLOnlySyncerUnitInjectDDLWithoutSchemaSyncerUnitNotSupportedOperateSyncerUnitNilOperatorReqSyncerUnitDMLColumnNotMatchSyncerUnitDMLOldNewValueMismatchSyncerUnitDMLPruneColumnMismatchSyncerUnitGenBinlogEventFilterSyncerUnitGenTableRouterSyncerUnitGenColumnMappingSyncerUnitDoColumnMappingSyncerUnitCacheKeyNotFoundSyncerUnitHeartbeatCheckConfigSyncerUnitHeartbeatRecordExistsSyncerUnitHeartbeatRecordNotFoundSyncerUnitHeartbeatRecordNotValidSyncerUnitOnlineDDLInvalidMetaSyncerUnitOnlineDDLSchemeNotSupportSyncerUnitOnlineDDLOnMultipleTableSyncerUnitGhostApplyEmptyTableSyncerUnitGhostRenameTableNotValidSyncerUnitGhostRenameToGhostTableSyncerUnitGhostRenameGhostTblToOtherSyncerUnitGhostOnlineDDLOnGhostTblSyncerUnitPTApplyEmptyTableSyncerUnitPTRenameTableNotValidSyncerUnitPTRenameToPTTableSyncerUnitPTRenamePTTblToOtherSyncerUnitPTOnlineDDLOnPTTblSyncerUnitRemoteSteamerWithGTIDSyncerUnitRemoteSteamerStartSyncSyncerUnitGetTableFromDBSyncerUnitFirstEndPosNotFoundSyncerUnitResolveCasualityFailSyncerUnitReopenStreamNotSupportSyncerUnitUpdateConfigInShardingSyncerUnitExecWithNoBlockingDDLSyncerUnitGenBAListSyncerUnitHandleDDLFailedSyncerShardDDLConflictSyncerFailpointSyncerEventSyncerOperatorNotExistSyncerEventNotExistSyncerParseDDLSyncerUnsupportedStmtSyncerGetEventSyncerDownstreamTableNotFoundSyncerReprocessWithSafeModeFailMasterSQLOpNilRequestMasterSQLOpNotSupportMasterSQLOpWithoutShardingMasterGRPCCreateConnMasterGRPCSendOnCloseConnMasterGRPCClientCloseMasterGRPCInvalidReqTypeMasterGRPCRequestErrorMasterDeployMapperVerifyMasterConfigParseFlagSetMasterConfigUnknownItemMasterConfigInvalidFlagMasterConfigTomlTransformMasterConfigTimeoutParseMasterConfigUpdateCfgFileMasterShardingDDLDiffMasterStartServiceMasterNoEmitTokenMasterLockNotFoundMasterLockIsResolvingMasterWorkerCliNotFoundMasterWorkerNotWaitLockMasterHandleSQLReqFailMasterOwnerExecDDLMasterPartWorkerExecDDLFailMasterWorkerExistDDLLockMasterGetWorkerCfgExtractorMasterTaskConfigExtractorMasterWorkerArgsExtractorMasterQueryWorkerConfigMasterOperNotFoundMasterOperRespNotSuccessMasterOperRequestTimeoutMasterHandleHTTPApisMasterHostPortNotValidMasterGetHostnameFailMasterGenEmbedEtcdConfigFailMasterStartEmbedEtcdFailMasterParseURLFailMasterJoinEmbedEtcdFailMasterInvalidOperateOpMasterAdvertiseAddrNotValidMasterRequestIsNotForwardToLeaderMasterIsNotAsyncRequestMasterFailToGetExpectResultMasterPessimistNotStartedMasterOptimistNotStartedMasterMasterNameNotExistMasterInvalidOfflineTypeMasterAdvertisePeerURLsNotValidMasterTLSConfigNotValidMasterBoundChangingMasterFailToImportFromV10xMasterInconsistentOptimistDDLsAndInfoMasterOptimisticTableInfobeforeNotExistMasterOptimisticDownstreamMetaNotFoundMasterInvalidClusterIDMasterStartTaskWorkerParseFlagSetWorkerInvalidFlagWorkerDecodeConfigFromFileWorkerUndecodedItemFromFileWorkerNeedSourceIDWorkerTooLongSourceIDWorkerRelayBinlogNameWorkerWriteConfigFileWorkerLogInvalidHandlerWorkerLogPointerInvalidWorkerLogFetchPointerWorkerLogUnmarshalPointerWorkerLogClearPointerWorkerLogTaskKeyNotValidWorkerLogUnmarshalTaskKeyWorkerLogFetchLogIterWorkerLogGetTaskLogWorkerLogUnmarshalBinaryWorkerLogForwardPointerWorkerLogMarshalTaskWorkerLogSaveTaskWorkerLogDeleteKVWorkerLogDeleteKVIterWorkerLogUnmarshalTaskMetaWorkerLogFetchTaskFromMetaWorkerLogVerifyTaskMetaWorkerLogSaveTaskMetaWorkerLogGetTaskMetaWorkerLogDeleteTaskMetaWorkerMetaTomlTransformWorkerMetaOldFileStatWorkerMetaOldReadFileWorkerMetaEncodeTaskWorkerMetaRemoveOldDirWorkerMetaTaskLogNotFoundWorkerMetaHandleTaskOrderWorkerMetaOpenTxnWorkerMetaCommitTxnWorkerRelayStageNotValidWorkerRelayOperNotSupportWorkerOpenKVDBFileWorkerUpgradeCheckKVDirWorkerMarshalVerBinaryWorkerUnmarshalVerBinaryWorkerGetVersionFromKVWorkerSaveVersionToKVWorkerVerAutoDowngradeWorkerStartServiceWorkerAlreadyClosedWorkerNotRunningStageWorkerNotPausedStageWorkerUpdateTaskStageWorkerMigrateStopRelayWorkerSubTaskNotFoundWorkerSubTaskExistsWorkerOperSyncUnitOnlyWorkerRelayUnitStageWorkerNoSyncerRunningWorkerCannotUpdateSourceIDWorkerNoAvailUnitsWorkerDDLLockInfoNotFoundWorkerDDLLockInfoExistsWorkerCacheDDLInfoExistsWorkerExecSkipDDLConflictWorkerExecDDLSyncerOnlyWorkerExecDDLTimeoutWorkerWaitRelayCatchupTimeoutWorkerRelayIsPurgingWorkerHostPortNotValidWorkerNoStartWorkerAlreadyStartedWorkerSourceNotMatchWorkerFailToGetSubtaskConfigFromEtcdWorkerFailToGetSourceConfigFromEtcdWorkerDDLLockOpNotFoundWorkerTLSConfigNotValidWorkerFailConnectMasterWorkerWaitRelayCatchupGTIDWorkerRelayConfigChangingWorkerRouteTableDupMatchWorkerUpdateSubTaskConfigWorkerValidatorNotPausedWorkerServerClosedTracerParseFlagSetTracerConfigTomlTransformTracerConfigInvalidFlagTracerTraceEventNotFoundTracerTraceIDNotProvidedTracerParamNotValidTracerPostMethodOnlyTracerEventAssertionFailTracerEventTypeNotValidTracerStartServiceHAFailTxnOperationHAInvalidItemHAFailWatchEtcdHAFailLeaseOperationHAFailKeepaliveValidatorLoadPersistedDataValidatorPersistDataValidatorGetEventValidatorProcessRowEventValidatorValidateChangeValidatorNotFoundValidatorPanicValidatorTooMuchPendingSchemaTrackerInvalidJSONSchemaTrackerCannotCreateSchemaSchemaTrackerCannotCreateTableSchemaTrackerCannotSerializeSchemaTrackerCannotGetTableSchemaTrackerCannotExecDDLSchemaTrackerCannotFetchDownstreamTableSchemaTrackerCannotParseDownstreamTableSchemaTrackerInvalidCreateTableStmtSchemaTrackerRestoreStmtFailSchemaTrackerCannotDropTableSchemaTrackerInitSchemaTrackerMarshalJSONSchemaTrackerUnMarshalJSONSchemaTrackerUnSchemaNotExistSchemaTrackerCannotSetDownstreamSQLModeSchemaTrackerCannotInitDownstreamParserSchemaTrackerCannotMockDownstreamTableSchemaTrackerCannotFetchDownstreamCreateTableStmtSchemaTrackerIsClosedSchedulerNotStartedSchedulerStartedSchedulerWorkerExistSchedulerWorkerNotExistSchedulerWorkerOnlineSchedulerWorkerInvalidTransSchedulerSourceCfgExistSchedulerSourceCfgNotExistSchedulerSourcesUnboundSchedulerSourceOpTaskExistSchedulerRelayStageInvalidUpdateSchedulerRelayStageSourceNotExistSchedulerMultiTaskSchedulerSubTaskExistSchedulerSubTaskStageInvalidUpdateSchedulerSubTaskOpTaskNotExistSchedulerSubTaskOpSourceNotExistSchedulerTaskNotExistSchedulerRequireRunningTaskInSyncUnitSchedulerRelayWorkersBusySchedulerRelayWorkersBoundSchedulerRelayWorkersWrongRelaySchedulerSourceOpRelayExistSchedulerLatchInUseSchedulerSourceCfgUpdateSchedulerWrongWorkerInputSchedulerCantTransferToRelayWorkerSchedulerStartRelayOnSpecifiedSchedulerStopRelayOnSpecifiedSchedulerStartRelayOnBoundSchedulerStopRelayOnBoundSchedulerPauseTaskForTransferSourceSchedulerWorkerNotFreeSchedulerSubTaskNotExistSchedulerSubTaskCfgUpdateCtlGRPCCreateConnCtlInvalidTLSCfgCtlLoadTLSCfgOpenAPICommonOpenAPITaskSourceNotFoundNotSet" +const _ErrCode_name = "DBDriverErrorDBBadConnDBInvalidConnDBUnExpectDBQueryFailedDBExecuteFailedParseMydumperMetaGetFileSizeDropMultipleTablesRenameMultipleTablesAlterMultipleTablesParseSQLUnknownTypeDDLRestoreASTNodeParseGTIDNotSupportedFlavorNotMySQLGTIDNotMariaDBGTIDNotUUIDStringMariaDBDomainIDInvalidServerIDGetSQLModeFromStrVerifySQLOperateArgsStatFileSizeReaderAlreadyRunningReaderAlreadyStartedReaderStateCannotCloseReaderShouldStartSyncEmptyRelayDirReadDirBaseFileNotFoundBinFileCmpCondNotSupportBinlogFileNotValidBinlogFilesNotFoundGetRelayLogStatAddWatchForRelayLogDirWatcherStartWatcherChanClosedWatcherChanRecvErrorRelayLogFileSizeSmallerBinlogFileNotSpecifiedNoRelayLogMatchPosFirstRelayLogNotMatchPosParserParseRelayLogNoSubdirToSwitchNeedSyncAgainSyncClosedSchemaTableNameNotValidGenTableRouterEncryptSecretKeyNotValidEncryptGenCipherEncryptGenIVCiphertextLenNotValidCiphertextContextNotValidInvalidBinlogPosStrEncCipherTextBase64DecodeBinlogWriteBinaryDataBinlogWriteDataToBufferBinlogHeaderLengthNotValidBinlogEventDecodeBinlogEmptyNextBinNameBinlogParseSIDBinlogEmptyGTIDBinlogGTIDSetNotValidBinlogGTIDMySQLNotValidBinlogGTIDMariaDBNotValidBinlogMariaDBServerIDMismatchBinlogOnlyOneGTIDSupportBinlogOnlyOneIntervalInUUIDBinlogIntervalValueNotValidBinlogEmptyQueryBinlogTableMapEvNotValidBinlogExpectFormatDescEvBinlogExpectTableMapEvBinlogExpectRowsEvBinlogUnexpectedEvBinlogParseSingleEvBinlogEventTypeNotValidBinlogEventNoRowsBinlogEventNoColumnsBinlogEventRowLengthNotEqBinlogColumnTypeNotSupportBinlogGoMySQLTypeNotSupportBinlogColumnTypeMisMatchBinlogDummyEvSizeTooSmallBinlogFlavorNotSupportBinlogDMLEmptyDataBinlogLatestGTIDNotInPrevBinlogReadFileByGTIDBinlogWriterNotStateNewBinlogWriterStateCannotCloseBinlogWriterNeedStartBinlogWriterOpenFileBinlogWriterGetFileStatBinlogWriterWriteDataLenBinlogWriterFileNotOpenedBinlogWriterFileSyncBinlogPrevGTIDEvNotValidBinlogDecodeMySQLGTIDSetBinlogNeedMariaDBGTIDSetBinlogParseMariaDBGTIDSetBinlogMariaDBAddGTIDSetTracingEventDataNotValidTracingUploadDataTracingEventTypeNotValidTracingGetTraceCodeTracingDataChecksumTracingGetTSOBackoffArgsNotValidInitLoggerFailGTIDTruncateInvalidRelayLogGivenPosTooBigElectionCampaignFailElectionGetLeaderIDFailBinlogInvalidFilenameWithUUIDSuffixDecodeEtcdKeyFailShardDDLOptimismTrySyncFailConnInvalidTLSConfigConnRegistryTLSConfigUpgradeVersionEtcdFailInvalidV1WorkerMetaPathFailUpdateV1DBSchemaBinlogStatusVarsParseVerifyHandleErrorArgsRewriteSQLNoUUIDDirMatchGTIDNoRelayPosMatchGTIDReaderReachEndOfFileMetadataNoBinlogLocPreviousGTIDNotExistNoMasterStatusBinlogNotLogColumnShardDDLOptimismNeedSkipAndRedirectShardDDLOptimismAddNotFullyDroppedColumnSyncerCancelledDDLIncorrectReturnColumnsNumConfigCheckItemNotSupportConfigTomlTransformConfigYamlTransformConfigTaskNameEmptyConfigEmptySourceIDConfigTooLongSourceIDConfigOnlineSchemeNotSupportConfigInvalidTimezoneConfigParseFlagSetConfigDecryptDBPasswordConfigMetaInvalidConfigMySQLInstNotFoundConfigMySQLInstsAtLeastOneConfigMySQLInstSameSourceIDConfigMydumperCfgConflictConfigLoaderCfgConflictConfigSyncerCfgConflictConfigReadCfgFromFileConfigNeedUniqueTaskNameConfigInvalidTaskModeConfigNeedTargetDBConfigMetadataNotSetConfigRouteRuleNotFoundConfigFilterRuleNotFoundConfigColumnMappingNotFoundConfigBAListNotFoundConfigMydumperCfgNotFoundConfigMydumperPathNotValidConfigLoaderCfgNotFoundConfigSyncerCfgNotFoundConfigSourceIDNotFoundConfigDuplicateCfgItemConfigShardModeNotSupportConfigMoreThanOneConfigEtcdParseConfigMissingForBoundConfigBinlogEventFilterConfigGlobalConfigsUnusedConfigExprFilterManyExprConfigExprFilterNotFoundConfigExprFilterWrongGrammarConfigExprFilterEmptyNameConfigCheckerMaxTooSmallConfigGenBAListConfigGenTableRouterConfigGenColumnMappingConfigInvalidChunkFileSizeConfigOnlineDDLInvalidRegexConfigOnlineDDLMistakeRegexConfigOpenAPITaskConfigExistConfigOpenAPITaskConfigNotExistCollationCompatibleNotSupportConfigInvalidLoadModeConfigInvalidLoadDuplicateResolutionConfigValidationModeContinuousValidatorCfgNotFoundConfigStartTimeTooLateConfigLoaderDirInvalidConfigLoaderS3NotSupportConfigInvalidSafeModeDurationConfigConfictSafeModeDurationAndSafeModeConfigInvalidLoadPhysicalDuplicateResolutionConfigInvalidLoadPhysicalChecksumConfigColumnMappingDeprecatedConfigInvalidLoadAnalyzeConfigStrictOptimisticShardModeBinlogExtractPositionBinlogInvalidFilenameBinlogParsePosFromStrCheckpointInvalidTaskModeCheckpointSaveInvalidPosCheckpointInvalidTableFileCheckpointDBNotExistInFileCheckpointTableNotExistInFileCheckpointRestoreCountGreaterTaskCheckSameTableNameTaskCheckFailedOpenDBTaskCheckGenTableRouterTaskCheckGenColumnMappingTaskCheckSyncConfigErrorTaskCheckGenBAListSourceCheckGTIDRelayParseUUIDIndexRelayParseUUIDSuffixRelayUUIDWithSuffixNotFoundRelayGenFakeRotateEventRelayNoValidRelaySubDirRelayUUIDSuffixNotValidRelayUUIDSuffixLessThanPrevRelayLoadMetaDataRelayBinlogNameNotValidRelayNoCurrentUUIDRelayFlushLocalMetaRelayUpdateIndexFileRelayLogDirpathEmptyRelayReaderNotStateNewRelayReaderStateCannotCloseRelayReaderNeedStartRelayTCPReaderStartSyncRelayTCPReaderNilGTIDRelayTCPReaderStartSyncGTIDRelayTCPReaderGetEventRelayWriterNotStateNewRelayWriterStateCannotCloseRelayWriterNeedStartRelayWriterNotOpenedRelayWriterExpectRotateEvRelayWriterRotateEvWithNoWriterRelayWriterStatusNotValidRelayWriterGetFileStatRelayWriterLatestPosGTFileSizeRelayWriterFileOperateRelayCheckBinlogFileHeaderExistRelayCheckFormatDescEventExistRelayCheckFormatDescEventParseEvRelayCheckIsDuplicateEventRelayUpdateGTIDRelayNeedPrevGTIDEvBeforeGTIDEvRelayNeedMaGTIDListEvBeforeGTIDEvRelayMkdirRelaySwitchMasterNeedGTIDRelayThisStrategyIsPurgingRelayOtherStrategyIsPurgingRelayPurgeIsForbiddenRelayNoActiveRelayLogRelayPurgeRequestNotValidRelayTrimUUIDNotFoundRelayRemoveFileFailRelayPurgeArgsNotValidPreviousGTIDsNotValidRotateEventWithDifferentServerIDDumpUnitRuntimeDumpUnitGenTableRouterDumpUnitGenBAListDumpUnitGlobalLockLoadUnitCreateSchemaFileLoadUnitInvalidFileEndingLoadUnitParseQuoteValuesLoadUnitDoColumnMappingLoadUnitReadSchemaFileLoadUnitParseStatementLoadUnitNotCreateTableLoadUnitDispatchSQLFromFileLoadUnitInvalidInsertSQLLoadUnitGenTableRouterLoadUnitGenColumnMappingLoadUnitNoDBFileLoadUnitNoTableFileLoadUnitDumpDirNotFoundLoadUnitDuplicateTableFileLoadUnitGenBAListLoadTaskWorkerNotMatchLoadCheckPointNotMatchLoadLightningRuntimeLoadLightningHasDupLoadLightningChecksumSyncerUnitPanicSyncUnitInvalidTableNameSyncUnitTableNameQuerySyncUnitNotSupportedDMLSyncUnitAddTableInShardingSyncUnitDropSchemaTableInShardingSyncUnitInvalidShardMetaSyncUnitDDLWrongSequenceSyncUnitDDLActiveIndexLargerSyncUnitDupTableGroupSyncUnitShardingGroupNotFoundSyncUnitSafeModeSetCountSyncUnitCausalityConflictSyncUnitDMLStatementFoundSyncerUnitBinlogEventFilterSyncerUnitInvalidReplicaEventSyncerUnitParseStmtSyncerUnitUUIDNotLatestSyncerUnitDDLExecChanCloseOrBusySyncerUnitDDLChanDoneSyncerUnitDDLChanCanceledSyncerUnitDDLOnMultipleTableSyncerUnitInjectDDLOnlySyncerUnitInjectDDLWithoutSchemaSyncerUnitNotSupportedOperateSyncerUnitNilOperatorReqSyncerUnitDMLColumnNotMatchSyncerUnitDMLOldNewValueMismatchSyncerUnitDMLPruneColumnMismatchSyncerUnitGenBinlogEventFilterSyncerUnitGenTableRouterSyncerUnitGenColumnMappingSyncerUnitDoColumnMappingSyncerUnitCacheKeyNotFoundSyncerUnitHeartbeatCheckConfigSyncerUnitHeartbeatRecordExistsSyncerUnitHeartbeatRecordNotFoundSyncerUnitHeartbeatRecordNotValidSyncerUnitOnlineDDLInvalidMetaSyncerUnitOnlineDDLSchemeNotSupportSyncerUnitOnlineDDLOnMultipleTableSyncerUnitGhostApplyEmptyTableSyncerUnitGhostRenameTableNotValidSyncerUnitGhostRenameToGhostTableSyncerUnitGhostRenameGhostTblToOtherSyncerUnitGhostOnlineDDLOnGhostTblSyncerUnitPTApplyEmptyTableSyncerUnitPTRenameTableNotValidSyncerUnitPTRenameToPTTableSyncerUnitPTRenamePTTblToOtherSyncerUnitPTOnlineDDLOnPTTblSyncerUnitRemoteSteamerWithGTIDSyncerUnitRemoteSteamerStartSyncSyncerUnitGetTableFromDBSyncerUnitFirstEndPosNotFoundSyncerUnitResolveCasualityFailSyncerUnitReopenStreamNotSupportSyncerUnitUpdateConfigInShardingSyncerUnitExecWithNoBlockingDDLSyncerUnitGenBAListSyncerUnitHandleDDLFailedSyncerShardDDLConflictSyncerFailpointSyncerEventSyncerOperatorNotExistSyncerEventNotExistSyncerParseDDLSyncerUnsupportedStmtSyncerGetEventSyncerDownstreamTableNotFoundSyncerReprocessWithSafeModeFailMasterSQLOpNilRequestMasterSQLOpNotSupportMasterSQLOpWithoutShardingMasterGRPCCreateConnMasterGRPCSendOnCloseConnMasterGRPCClientCloseMasterGRPCInvalidReqTypeMasterGRPCRequestErrorMasterDeployMapperVerifyMasterConfigParseFlagSetMasterConfigUnknownItemMasterConfigInvalidFlagMasterConfigTomlTransformMasterConfigTimeoutParseMasterConfigUpdateCfgFileMasterShardingDDLDiffMasterStartServiceMasterNoEmitTokenMasterLockNotFoundMasterLockIsResolvingMasterWorkerCliNotFoundMasterWorkerNotWaitLockMasterHandleSQLReqFailMasterOwnerExecDDLMasterPartWorkerExecDDLFailMasterWorkerExistDDLLockMasterGetWorkerCfgExtractorMasterTaskConfigExtractorMasterWorkerArgsExtractorMasterQueryWorkerConfigMasterOperNotFoundMasterOperRespNotSuccessMasterOperRequestTimeoutMasterHandleHTTPApisMasterHostPortNotValidMasterGetHostnameFailMasterGenEmbedEtcdConfigFailMasterStartEmbedEtcdFailMasterParseURLFailMasterJoinEmbedEtcdFailMasterInvalidOperateOpMasterAdvertiseAddrNotValidMasterRequestIsNotForwardToLeaderMasterIsNotAsyncRequestMasterFailToGetExpectResultMasterPessimistNotStartedMasterOptimistNotStartedMasterMasterNameNotExistMasterInvalidOfflineTypeMasterAdvertisePeerURLsNotValidMasterTLSConfigNotValidMasterBoundChangingMasterFailToImportFromV10xMasterInconsistentOptimistDDLsAndInfoMasterOptimisticTableInfobeforeNotExistMasterOptimisticDownstreamMetaNotFoundMasterInvalidClusterIDMasterStartTaskWorkerParseFlagSetWorkerInvalidFlagWorkerDecodeConfigFromFileWorkerUndecodedItemFromFileWorkerNeedSourceIDWorkerTooLongSourceIDWorkerRelayBinlogNameWorkerWriteConfigFileWorkerLogInvalidHandlerWorkerLogPointerInvalidWorkerLogFetchPointerWorkerLogUnmarshalPointerWorkerLogClearPointerWorkerLogTaskKeyNotValidWorkerLogUnmarshalTaskKeyWorkerLogFetchLogIterWorkerLogGetTaskLogWorkerLogUnmarshalBinaryWorkerLogForwardPointerWorkerLogMarshalTaskWorkerLogSaveTaskWorkerLogDeleteKVWorkerLogDeleteKVIterWorkerLogUnmarshalTaskMetaWorkerLogFetchTaskFromMetaWorkerLogVerifyTaskMetaWorkerLogSaveTaskMetaWorkerLogGetTaskMetaWorkerLogDeleteTaskMetaWorkerMetaTomlTransformWorkerMetaOldFileStatWorkerMetaOldReadFileWorkerMetaEncodeTaskWorkerMetaRemoveOldDirWorkerMetaTaskLogNotFoundWorkerMetaHandleTaskOrderWorkerMetaOpenTxnWorkerMetaCommitTxnWorkerRelayStageNotValidWorkerRelayOperNotSupportWorkerOpenKVDBFileWorkerUpgradeCheckKVDirWorkerMarshalVerBinaryWorkerUnmarshalVerBinaryWorkerGetVersionFromKVWorkerSaveVersionToKVWorkerVerAutoDowngradeWorkerStartServiceWorkerAlreadyClosedWorkerNotRunningStageWorkerNotPausedStageWorkerUpdateTaskStageWorkerMigrateStopRelayWorkerSubTaskNotFoundWorkerSubTaskExistsWorkerOperSyncUnitOnlyWorkerRelayUnitStageWorkerNoSyncerRunningWorkerCannotUpdateSourceIDWorkerNoAvailUnitsWorkerDDLLockInfoNotFoundWorkerDDLLockInfoExistsWorkerCacheDDLInfoExistsWorkerExecSkipDDLConflictWorkerExecDDLSyncerOnlyWorkerExecDDLTimeoutWorkerWaitRelayCatchupTimeoutWorkerRelayIsPurgingWorkerHostPortNotValidWorkerNoStartWorkerAlreadyStartedWorkerSourceNotMatchWorkerFailToGetSubtaskConfigFromEtcdWorkerFailToGetSourceConfigFromEtcdWorkerDDLLockOpNotFoundWorkerTLSConfigNotValidWorkerFailConnectMasterWorkerWaitRelayCatchupGTIDWorkerRelayConfigChangingWorkerRouteTableDupMatchWorkerUpdateSubTaskConfigWorkerValidatorNotPausedWorkerServerClosedTracerParseFlagSetTracerConfigTomlTransformTracerConfigInvalidFlagTracerTraceEventNotFoundTracerTraceIDNotProvidedTracerParamNotValidTracerPostMethodOnlyTracerEventAssertionFailTracerEventTypeNotValidTracerStartServiceHAFailTxnOperationHAInvalidItemHAFailWatchEtcdHAFailLeaseOperationHAFailKeepaliveValidatorLoadPersistedDataValidatorPersistDataValidatorGetEventValidatorProcessRowEventValidatorValidateChangeValidatorNotFoundValidatorPanicValidatorTooMuchPendingSchemaTrackerInvalidJSONSchemaTrackerCannotCreateSchemaSchemaTrackerCannotCreateTableSchemaTrackerCannotSerializeSchemaTrackerCannotGetTableSchemaTrackerCannotExecDDLSchemaTrackerCannotFetchDownstreamTableSchemaTrackerCannotParseDownstreamTableSchemaTrackerInvalidCreateTableStmtSchemaTrackerRestoreStmtFailSchemaTrackerCannotDropTableSchemaTrackerInitSchemaTrackerMarshalJSONSchemaTrackerUnMarshalJSONSchemaTrackerUnSchemaNotExistSchemaTrackerCannotSetDownstreamSQLModeSchemaTrackerCannotInitDownstreamParserSchemaTrackerCannotMockDownstreamTableSchemaTrackerCannotFetchDownstreamCreateTableStmtSchemaTrackerIsClosedSchedulerNotStartedSchedulerStartedSchedulerWorkerExistSchedulerWorkerNotExistSchedulerWorkerOnlineSchedulerWorkerInvalidTransSchedulerSourceCfgExistSchedulerSourceCfgNotExistSchedulerSourcesUnboundSchedulerSourceOpTaskExistSchedulerRelayStageInvalidUpdateSchedulerRelayStageSourceNotExistSchedulerMultiTaskSchedulerSubTaskExistSchedulerSubTaskStageInvalidUpdateSchedulerSubTaskOpTaskNotExistSchedulerSubTaskOpSourceNotExistSchedulerTaskNotExistSchedulerRequireRunningTaskInSyncUnitSchedulerRelayWorkersBusySchedulerRelayWorkersBoundSchedulerRelayWorkersWrongRelaySchedulerSourceOpRelayExistSchedulerLatchInUseSchedulerSourceCfgUpdateSchedulerWrongWorkerInputSchedulerCantTransferToRelayWorkerSchedulerStartRelayOnSpecifiedSchedulerStopRelayOnSpecifiedSchedulerStartRelayOnBoundSchedulerStopRelayOnBoundSchedulerPauseTaskForTransferSourceSchedulerWorkerNotFreeSchedulerSubTaskNotExistSchedulerSubTaskCfgUpdateCtlGRPCCreateConnCtlInvalidTLSCfgCtlLoadTLSCfgOpenAPICommonOpenAPITaskSourceNotFoundNotSet" var _ErrCode_map = map[ErrCode]string{ 10001: _ErrCode_name[0:13], @@ -801,392 +802,393 @@ var _ErrCode_map = map[ErrCode]string{ 20063: _ErrCode_name[4155:4188], 20064: _ErrCode_name[4188:4217], 20065: _ErrCode_name[4217:4241], - 22001: _ErrCode_name[4241:4262], - 22002: _ErrCode_name[4262:4283], - 22003: _ErrCode_name[4283:4304], - 24001: _ErrCode_name[4304:4329], - 24002: _ErrCode_name[4329:4353], - 24003: _ErrCode_name[4353:4379], - 24004: _ErrCode_name[4379:4405], - 24005: _ErrCode_name[4405:4434], - 24006: _ErrCode_name[4434:4463], - 26001: _ErrCode_name[4463:4485], - 26002: _ErrCode_name[4485:4506], - 26003: _ErrCode_name[4506:4529], - 26004: _ErrCode_name[4529:4554], - 26005: _ErrCode_name[4554:4578], - 26006: _ErrCode_name[4578:4596], - 26007: _ErrCode_name[4596:4611], - 28001: _ErrCode_name[4611:4630], - 28002: _ErrCode_name[4630:4650], - 28003: _ErrCode_name[4650:4677], - 28004: _ErrCode_name[4677:4700], - 28005: _ErrCode_name[4700:4723], - 30001: _ErrCode_name[4723:4746], - 30002: _ErrCode_name[4746:4773], - 30003: _ErrCode_name[4773:4790], - 30004: _ErrCode_name[4790:4813], - 30005: _ErrCode_name[4813:4831], - 30006: _ErrCode_name[4831:4850], - 30007: _ErrCode_name[4850:4870], - 30008: _ErrCode_name[4870:4890], - 30009: _ErrCode_name[4890:4912], - 30010: _ErrCode_name[4912:4939], - 30011: _ErrCode_name[4939:4959], - 30012: _ErrCode_name[4959:4982], - 30013: _ErrCode_name[4982:5003], - 30014: _ErrCode_name[5003:5030], - 30015: _ErrCode_name[5030:5052], - 30016: _ErrCode_name[5052:5074], - 30017: _ErrCode_name[5074:5101], - 30018: _ErrCode_name[5101:5121], - 30019: _ErrCode_name[5121:5141], - 30020: _ErrCode_name[5141:5166], - 30021: _ErrCode_name[5166:5197], - 30022: _ErrCode_name[5197:5222], - 30023: _ErrCode_name[5222:5244], - 30024: _ErrCode_name[5244:5274], - 30025: _ErrCode_name[5274:5296], - 30026: _ErrCode_name[5296:5327], - 30027: _ErrCode_name[5327:5357], - 30028: _ErrCode_name[5357:5389], - 30029: _ErrCode_name[5389:5415], - 30030: _ErrCode_name[5415:5430], - 30031: _ErrCode_name[5430:5461], - 30032: _ErrCode_name[5461:5494], - 30033: _ErrCode_name[5494:5504], - 30034: _ErrCode_name[5504:5529], - 30035: _ErrCode_name[5529:5555], - 30036: _ErrCode_name[5555:5582], - 30037: _ErrCode_name[5582:5603], - 30038: _ErrCode_name[5603:5624], - 30039: _ErrCode_name[5624:5649], - 30040: _ErrCode_name[5649:5670], - 30041: _ErrCode_name[5670:5689], - 30042: _ErrCode_name[5689:5711], - 30043: _ErrCode_name[5711:5732], - 30044: _ErrCode_name[5732:5764], - 32001: _ErrCode_name[5764:5779], - 32002: _ErrCode_name[5779:5801], - 32003: _ErrCode_name[5801:5818], - 32004: _ErrCode_name[5818:5836], - 34001: _ErrCode_name[5836:5860], - 34002: _ErrCode_name[5860:5885], - 34003: _ErrCode_name[5885:5909], - 34004: _ErrCode_name[5909:5932], - 34005: _ErrCode_name[5932:5954], - 34006: _ErrCode_name[5954:5976], - 34007: _ErrCode_name[5976:5998], - 34008: _ErrCode_name[5998:6025], - 34009: _ErrCode_name[6025:6049], - 34010: _ErrCode_name[6049:6071], - 34011: _ErrCode_name[6071:6095], - 34012: _ErrCode_name[6095:6111], - 34013: _ErrCode_name[6111:6130], - 34014: _ErrCode_name[6130:6153], - 34015: _ErrCode_name[6153:6179], - 34016: _ErrCode_name[6179:6196], - 34017: _ErrCode_name[6196:6218], - 34018: _ErrCode_name[6218:6240], - 34019: _ErrCode_name[6240:6260], - 34020: _ErrCode_name[6260:6279], - 34021: _ErrCode_name[6279:6300], - 36001: _ErrCode_name[6300:6315], - 36002: _ErrCode_name[6315:6339], - 36003: _ErrCode_name[6339:6361], - 36004: _ErrCode_name[6361:6384], - 36005: _ErrCode_name[6384:6410], - 36006: _ErrCode_name[6410:6443], - 36007: _ErrCode_name[6443:6467], - 36008: _ErrCode_name[6467:6491], - 36009: _ErrCode_name[6491:6519], - 36010: _ErrCode_name[6519:6540], - 36011: _ErrCode_name[6540:6569], - 36012: _ErrCode_name[6569:6593], - 36013: _ErrCode_name[6593:6618], - 36014: _ErrCode_name[6618:6643], - 36015: _ErrCode_name[6643:6670], - 36016: _ErrCode_name[6670:6699], - 36017: _ErrCode_name[6699:6718], - 36018: _ErrCode_name[6718:6741], - 36019: _ErrCode_name[6741:6773], - 36020: _ErrCode_name[6773:6794], - 36021: _ErrCode_name[6794:6819], - 36022: _ErrCode_name[6819:6847], - 36023: _ErrCode_name[6847:6870], - 36024: _ErrCode_name[6870:6902], - 36025: _ErrCode_name[6902:6931], - 36026: _ErrCode_name[6931:6955], - 36027: _ErrCode_name[6955:6982], - 36028: _ErrCode_name[6982:7014], - 36029: _ErrCode_name[7014:7046], - 36030: _ErrCode_name[7046:7076], - 36031: _ErrCode_name[7076:7100], - 36032: _ErrCode_name[7100:7126], - 36033: _ErrCode_name[7126:7151], - 36034: _ErrCode_name[7151:7177], - 36035: _ErrCode_name[7177:7207], - 36036: _ErrCode_name[7207:7238], - 36037: _ErrCode_name[7238:7271], - 36038: _ErrCode_name[7271:7304], - 36039: _ErrCode_name[7304:7334], - 36040: _ErrCode_name[7334:7369], - 36041: _ErrCode_name[7369:7403], - 36042: _ErrCode_name[7403:7433], - 36043: _ErrCode_name[7433:7467], - 36044: _ErrCode_name[7467:7500], - 36045: _ErrCode_name[7500:7536], - 36046: _ErrCode_name[7536:7570], - 36047: _ErrCode_name[7570:7597], - 36048: _ErrCode_name[7597:7628], - 36049: _ErrCode_name[7628:7655], - 36050: _ErrCode_name[7655:7685], - 36051: _ErrCode_name[7685:7713], - 36052: _ErrCode_name[7713:7744], - 36053: _ErrCode_name[7744:7776], - 36054: _ErrCode_name[7776:7800], - 36055: _ErrCode_name[7800:7829], - 36056: _ErrCode_name[7829:7859], - 36057: _ErrCode_name[7859:7891], - 36058: _ErrCode_name[7891:7923], - 36059: _ErrCode_name[7923:7954], - 36060: _ErrCode_name[7954:7973], - 36061: _ErrCode_name[7973:7998], - 36062: _ErrCode_name[7998:8020], - 36063: _ErrCode_name[8020:8035], - 36064: _ErrCode_name[8035:8046], - 36065: _ErrCode_name[8046:8068], - 36066: _ErrCode_name[8068:8087], - 36067: _ErrCode_name[8087:8101], - 36068: _ErrCode_name[8101:8122], - 36069: _ErrCode_name[8122:8136], - 36070: _ErrCode_name[8136:8165], - 36071: _ErrCode_name[8165:8196], - 38001: _ErrCode_name[8196:8217], - 38002: _ErrCode_name[8217:8238], - 38003: _ErrCode_name[8238:8264], - 38004: _ErrCode_name[8264:8284], - 38005: _ErrCode_name[8284:8309], - 38006: _ErrCode_name[8309:8330], - 38007: _ErrCode_name[8330:8354], - 38008: _ErrCode_name[8354:8376], - 38009: _ErrCode_name[8376:8400], - 38010: _ErrCode_name[8400:8424], - 38011: _ErrCode_name[8424:8447], - 38012: _ErrCode_name[8447:8470], - 38013: _ErrCode_name[8470:8495], - 38014: _ErrCode_name[8495:8519], - 38015: _ErrCode_name[8519:8544], - 38016: _ErrCode_name[8544:8565], - 38017: _ErrCode_name[8565:8583], - 38018: _ErrCode_name[8583:8600], - 38019: _ErrCode_name[8600:8618], - 38020: _ErrCode_name[8618:8639], - 38021: _ErrCode_name[8639:8662], - 38022: _ErrCode_name[8662:8685], - 38023: _ErrCode_name[8685:8707], - 38024: _ErrCode_name[8707:8725], - 38025: _ErrCode_name[8725:8752], - 38026: _ErrCode_name[8752:8776], - 38027: _ErrCode_name[8776:8803], - 38028: _ErrCode_name[8803:8828], - 38029: _ErrCode_name[8828:8853], - 38030: _ErrCode_name[8853:8876], - 38031: _ErrCode_name[8876:8894], - 38032: _ErrCode_name[8894:8918], - 38033: _ErrCode_name[8918:8942], - 38034: _ErrCode_name[8942:8962], - 38035: _ErrCode_name[8962:8984], - 38036: _ErrCode_name[8984:9005], - 38037: _ErrCode_name[9005:9033], - 38038: _ErrCode_name[9033:9057], - 38039: _ErrCode_name[9057:9075], - 38040: _ErrCode_name[9075:9098], - 38041: _ErrCode_name[9098:9120], - 38042: _ErrCode_name[9120:9147], - 38043: _ErrCode_name[9147:9180], - 38044: _ErrCode_name[9180:9203], - 38045: _ErrCode_name[9203:9230], - 38046: _ErrCode_name[9230:9255], - 38047: _ErrCode_name[9255:9279], - 38048: _ErrCode_name[9279:9303], - 38049: _ErrCode_name[9303:9327], - 38050: _ErrCode_name[9327:9358], - 38051: _ErrCode_name[9358:9381], - 38052: _ErrCode_name[9381:9400], - 38053: _ErrCode_name[9400:9426], - 38054: _ErrCode_name[9426:9463], - 38055: _ErrCode_name[9463:9502], - 38056: _ErrCode_name[9502:9540], - 38057: _ErrCode_name[9540:9562], - 38058: _ErrCode_name[9562:9577], - 40001: _ErrCode_name[9577:9595], - 40002: _ErrCode_name[9595:9612], - 40003: _ErrCode_name[9612:9638], - 40004: _ErrCode_name[9638:9665], - 40005: _ErrCode_name[9665:9683], - 40006: _ErrCode_name[9683:9704], - 40007: _ErrCode_name[9704:9725], - 40008: _ErrCode_name[9725:9746], - 40009: _ErrCode_name[9746:9769], - 40010: _ErrCode_name[9769:9792], - 40011: _ErrCode_name[9792:9813], - 40012: _ErrCode_name[9813:9838], - 40013: _ErrCode_name[9838:9859], - 40014: _ErrCode_name[9859:9883], - 40015: _ErrCode_name[9883:9908], - 40016: _ErrCode_name[9908:9929], - 40017: _ErrCode_name[9929:9948], - 40018: _ErrCode_name[9948:9972], - 40019: _ErrCode_name[9972:9995], - 40020: _ErrCode_name[9995:10015], - 40021: _ErrCode_name[10015:10032], - 40022: _ErrCode_name[10032:10049], - 40023: _ErrCode_name[10049:10070], - 40024: _ErrCode_name[10070:10096], - 40025: _ErrCode_name[10096:10122], - 40026: _ErrCode_name[10122:10145], - 40027: _ErrCode_name[10145:10166], - 40028: _ErrCode_name[10166:10186], - 40029: _ErrCode_name[10186:10209], - 40030: _ErrCode_name[10209:10232], - 40031: _ErrCode_name[10232:10253], - 40032: _ErrCode_name[10253:10274], - 40033: _ErrCode_name[10274:10294], - 40034: _ErrCode_name[10294:10316], - 40035: _ErrCode_name[10316:10341], - 40036: _ErrCode_name[10341:10366], - 40037: _ErrCode_name[10366:10383], - 40038: _ErrCode_name[10383:10402], - 40039: _ErrCode_name[10402:10426], - 40040: _ErrCode_name[10426:10451], - 40041: _ErrCode_name[10451:10469], - 40042: _ErrCode_name[10469:10492], - 40043: _ErrCode_name[10492:10514], - 40044: _ErrCode_name[10514:10538], - 40045: _ErrCode_name[10538:10560], - 40046: _ErrCode_name[10560:10581], - 40047: _ErrCode_name[10581:10603], - 40048: _ErrCode_name[10603:10621], - 40049: _ErrCode_name[10621:10640], - 40050: _ErrCode_name[10640:10661], - 40051: _ErrCode_name[10661:10681], - 40052: _ErrCode_name[10681:10702], - 40053: _ErrCode_name[10702:10724], - 40054: _ErrCode_name[10724:10745], - 40055: _ErrCode_name[10745:10764], - 40056: _ErrCode_name[10764:10786], - 40057: _ErrCode_name[10786:10806], - 40058: _ErrCode_name[10806:10827], - 40059: _ErrCode_name[10827:10853], - 40060: _ErrCode_name[10853:10871], - 40061: _ErrCode_name[10871:10896], - 40062: _ErrCode_name[10896:10919], - 40063: _ErrCode_name[10919:10943], - 40064: _ErrCode_name[10943:10968], - 40065: _ErrCode_name[10968:10991], - 40066: _ErrCode_name[10991:11011], - 40067: _ErrCode_name[11011:11040], - 40068: _ErrCode_name[11040:11060], - 40069: _ErrCode_name[11060:11082], - 40070: _ErrCode_name[11082:11095], - 40071: _ErrCode_name[11095:11115], - 40072: _ErrCode_name[11115:11135], - 40073: _ErrCode_name[11135:11171], - 40074: _ErrCode_name[11171:11206], - 40075: _ErrCode_name[11206:11229], - 40076: _ErrCode_name[11229:11252], - 40077: _ErrCode_name[11252:11275], - 40078: _ErrCode_name[11275:11301], - 40079: _ErrCode_name[11301:11326], - 40080: _ErrCode_name[11326:11350], - 40081: _ErrCode_name[11350:11375], - 40082: _ErrCode_name[11375:11399], - 40083: _ErrCode_name[11399:11417], - 42001: _ErrCode_name[11417:11435], - 42002: _ErrCode_name[11435:11460], - 42003: _ErrCode_name[11460:11483], - 42004: _ErrCode_name[11483:11507], - 42005: _ErrCode_name[11507:11531], - 42006: _ErrCode_name[11531:11550], - 42007: _ErrCode_name[11550:11570], - 42008: _ErrCode_name[11570:11594], - 42009: _ErrCode_name[11594:11617], - 42010: _ErrCode_name[11617:11635], - 42501: _ErrCode_name[11635:11653], - 42502: _ErrCode_name[11653:11666], - 42503: _ErrCode_name[11666:11681], - 42504: _ErrCode_name[11681:11701], - 42505: _ErrCode_name[11701:11716], - 43001: _ErrCode_name[11716:11742], - 43002: _ErrCode_name[11742:11762], - 43003: _ErrCode_name[11762:11779], - 43004: _ErrCode_name[11779:11803], - 43005: _ErrCode_name[11803:11826], - 43006: _ErrCode_name[11826:11843], - 43007: _ErrCode_name[11843:11857], - 43008: _ErrCode_name[11857:11880], - 44001: _ErrCode_name[11880:11904], - 44002: _ErrCode_name[11904:11935], - 44003: _ErrCode_name[11935:11965], - 44004: _ErrCode_name[11965:11993], - 44005: _ErrCode_name[11993:12020], - 44006: _ErrCode_name[12020:12046], - 44007: _ErrCode_name[12046:12085], - 44008: _ErrCode_name[12085:12124], - 44009: _ErrCode_name[12124:12159], - 44010: _ErrCode_name[12159:12187], - 44011: _ErrCode_name[12187:12215], - 44012: _ErrCode_name[12215:12232], - 44013: _ErrCode_name[12232:12256], - 44014: _ErrCode_name[12256:12282], - 44015: _ErrCode_name[12282:12311], - 44016: _ErrCode_name[12311:12350], - 44017: _ErrCode_name[12350:12389], - 44018: _ErrCode_name[12389:12427], - 44019: _ErrCode_name[12427:12476], - 44020: _ErrCode_name[12476:12497], - 46001: _ErrCode_name[12497:12516], - 46002: _ErrCode_name[12516:12532], - 46003: _ErrCode_name[12532:12552], - 46004: _ErrCode_name[12552:12575], - 46005: _ErrCode_name[12575:12596], - 46006: _ErrCode_name[12596:12623], - 46007: _ErrCode_name[12623:12646], - 46008: _ErrCode_name[12646:12672], - 46009: _ErrCode_name[12672:12695], - 46010: _ErrCode_name[12695:12721], - 46011: _ErrCode_name[12721:12753], - 46012: _ErrCode_name[12753:12786], - 46013: _ErrCode_name[12786:12804], - 46014: _ErrCode_name[12804:12825], - 46015: _ErrCode_name[12825:12859], - 46016: _ErrCode_name[12859:12889], - 46017: _ErrCode_name[12889:12921], - 46018: _ErrCode_name[12921:12942], - 46019: _ErrCode_name[12942:12979], - 46020: _ErrCode_name[12979:13004], - 46021: _ErrCode_name[13004:13030], - 46022: _ErrCode_name[13030:13061], - 46023: _ErrCode_name[13061:13088], - 46024: _ErrCode_name[13088:13107], - 46025: _ErrCode_name[13107:13131], - 46026: _ErrCode_name[13131:13156], - 46027: _ErrCode_name[13156:13190], - 46028: _ErrCode_name[13190:13220], - 46029: _ErrCode_name[13220:13249], - 46030: _ErrCode_name[13249:13275], - 46031: _ErrCode_name[13275:13300], - 46032: _ErrCode_name[13300:13335], - 46033: _ErrCode_name[13335:13357], - 46034: _ErrCode_name[13357:13381], - 46035: _ErrCode_name[13381:13406], - 48001: _ErrCode_name[13406:13423], - 48002: _ErrCode_name[13423:13439], - 48003: _ErrCode_name[13439:13452], - 49001: _ErrCode_name[13452:13465], - 49002: _ErrCode_name[13465:13490], - 50000: _ErrCode_name[13490:13496], + 20066: _ErrCode_name[4241:4272], + 22001: _ErrCode_name[4272:4293], + 22002: _ErrCode_name[4293:4314], + 22003: _ErrCode_name[4314:4335], + 24001: _ErrCode_name[4335:4360], + 24002: _ErrCode_name[4360:4384], + 24003: _ErrCode_name[4384:4410], + 24004: _ErrCode_name[4410:4436], + 24005: _ErrCode_name[4436:4465], + 24006: _ErrCode_name[4465:4494], + 26001: _ErrCode_name[4494:4516], + 26002: _ErrCode_name[4516:4537], + 26003: _ErrCode_name[4537:4560], + 26004: _ErrCode_name[4560:4585], + 26005: _ErrCode_name[4585:4609], + 26006: _ErrCode_name[4609:4627], + 26007: _ErrCode_name[4627:4642], + 28001: _ErrCode_name[4642:4661], + 28002: _ErrCode_name[4661:4681], + 28003: _ErrCode_name[4681:4708], + 28004: _ErrCode_name[4708:4731], + 28005: _ErrCode_name[4731:4754], + 30001: _ErrCode_name[4754:4777], + 30002: _ErrCode_name[4777:4804], + 30003: _ErrCode_name[4804:4821], + 30004: _ErrCode_name[4821:4844], + 30005: _ErrCode_name[4844:4862], + 30006: _ErrCode_name[4862:4881], + 30007: _ErrCode_name[4881:4901], + 30008: _ErrCode_name[4901:4921], + 30009: _ErrCode_name[4921:4943], + 30010: _ErrCode_name[4943:4970], + 30011: _ErrCode_name[4970:4990], + 30012: _ErrCode_name[4990:5013], + 30013: _ErrCode_name[5013:5034], + 30014: _ErrCode_name[5034:5061], + 30015: _ErrCode_name[5061:5083], + 30016: _ErrCode_name[5083:5105], + 30017: _ErrCode_name[5105:5132], + 30018: _ErrCode_name[5132:5152], + 30019: _ErrCode_name[5152:5172], + 30020: _ErrCode_name[5172:5197], + 30021: _ErrCode_name[5197:5228], + 30022: _ErrCode_name[5228:5253], + 30023: _ErrCode_name[5253:5275], + 30024: _ErrCode_name[5275:5305], + 30025: _ErrCode_name[5305:5327], + 30026: _ErrCode_name[5327:5358], + 30027: _ErrCode_name[5358:5388], + 30028: _ErrCode_name[5388:5420], + 30029: _ErrCode_name[5420:5446], + 30030: _ErrCode_name[5446:5461], + 30031: _ErrCode_name[5461:5492], + 30032: _ErrCode_name[5492:5525], + 30033: _ErrCode_name[5525:5535], + 30034: _ErrCode_name[5535:5560], + 30035: _ErrCode_name[5560:5586], + 30036: _ErrCode_name[5586:5613], + 30037: _ErrCode_name[5613:5634], + 30038: _ErrCode_name[5634:5655], + 30039: _ErrCode_name[5655:5680], + 30040: _ErrCode_name[5680:5701], + 30041: _ErrCode_name[5701:5720], + 30042: _ErrCode_name[5720:5742], + 30043: _ErrCode_name[5742:5763], + 30044: _ErrCode_name[5763:5795], + 32001: _ErrCode_name[5795:5810], + 32002: _ErrCode_name[5810:5832], + 32003: _ErrCode_name[5832:5849], + 32004: _ErrCode_name[5849:5867], + 34001: _ErrCode_name[5867:5891], + 34002: _ErrCode_name[5891:5916], + 34003: _ErrCode_name[5916:5940], + 34004: _ErrCode_name[5940:5963], + 34005: _ErrCode_name[5963:5985], + 34006: _ErrCode_name[5985:6007], + 34007: _ErrCode_name[6007:6029], + 34008: _ErrCode_name[6029:6056], + 34009: _ErrCode_name[6056:6080], + 34010: _ErrCode_name[6080:6102], + 34011: _ErrCode_name[6102:6126], + 34012: _ErrCode_name[6126:6142], + 34013: _ErrCode_name[6142:6161], + 34014: _ErrCode_name[6161:6184], + 34015: _ErrCode_name[6184:6210], + 34016: _ErrCode_name[6210:6227], + 34017: _ErrCode_name[6227:6249], + 34018: _ErrCode_name[6249:6271], + 34019: _ErrCode_name[6271:6291], + 34020: _ErrCode_name[6291:6310], + 34021: _ErrCode_name[6310:6331], + 36001: _ErrCode_name[6331:6346], + 36002: _ErrCode_name[6346:6370], + 36003: _ErrCode_name[6370:6392], + 36004: _ErrCode_name[6392:6415], + 36005: _ErrCode_name[6415:6441], + 36006: _ErrCode_name[6441:6474], + 36007: _ErrCode_name[6474:6498], + 36008: _ErrCode_name[6498:6522], + 36009: _ErrCode_name[6522:6550], + 36010: _ErrCode_name[6550:6571], + 36011: _ErrCode_name[6571:6600], + 36012: _ErrCode_name[6600:6624], + 36013: _ErrCode_name[6624:6649], + 36014: _ErrCode_name[6649:6674], + 36015: _ErrCode_name[6674:6701], + 36016: _ErrCode_name[6701:6730], + 36017: _ErrCode_name[6730:6749], + 36018: _ErrCode_name[6749:6772], + 36019: _ErrCode_name[6772:6804], + 36020: _ErrCode_name[6804:6825], + 36021: _ErrCode_name[6825:6850], + 36022: _ErrCode_name[6850:6878], + 36023: _ErrCode_name[6878:6901], + 36024: _ErrCode_name[6901:6933], + 36025: _ErrCode_name[6933:6962], + 36026: _ErrCode_name[6962:6986], + 36027: _ErrCode_name[6986:7013], + 36028: _ErrCode_name[7013:7045], + 36029: _ErrCode_name[7045:7077], + 36030: _ErrCode_name[7077:7107], + 36031: _ErrCode_name[7107:7131], + 36032: _ErrCode_name[7131:7157], + 36033: _ErrCode_name[7157:7182], + 36034: _ErrCode_name[7182:7208], + 36035: _ErrCode_name[7208:7238], + 36036: _ErrCode_name[7238:7269], + 36037: _ErrCode_name[7269:7302], + 36038: _ErrCode_name[7302:7335], + 36039: _ErrCode_name[7335:7365], + 36040: _ErrCode_name[7365:7400], + 36041: _ErrCode_name[7400:7434], + 36042: _ErrCode_name[7434:7464], + 36043: _ErrCode_name[7464:7498], + 36044: _ErrCode_name[7498:7531], + 36045: _ErrCode_name[7531:7567], + 36046: _ErrCode_name[7567:7601], + 36047: _ErrCode_name[7601:7628], + 36048: _ErrCode_name[7628:7659], + 36049: _ErrCode_name[7659:7686], + 36050: _ErrCode_name[7686:7716], + 36051: _ErrCode_name[7716:7744], + 36052: _ErrCode_name[7744:7775], + 36053: _ErrCode_name[7775:7807], + 36054: _ErrCode_name[7807:7831], + 36055: _ErrCode_name[7831:7860], + 36056: _ErrCode_name[7860:7890], + 36057: _ErrCode_name[7890:7922], + 36058: _ErrCode_name[7922:7954], + 36059: _ErrCode_name[7954:7985], + 36060: _ErrCode_name[7985:8004], + 36061: _ErrCode_name[8004:8029], + 36062: _ErrCode_name[8029:8051], + 36063: _ErrCode_name[8051:8066], + 36064: _ErrCode_name[8066:8077], + 36065: _ErrCode_name[8077:8099], + 36066: _ErrCode_name[8099:8118], + 36067: _ErrCode_name[8118:8132], + 36068: _ErrCode_name[8132:8153], + 36069: _ErrCode_name[8153:8167], + 36070: _ErrCode_name[8167:8196], + 36071: _ErrCode_name[8196:8227], + 38001: _ErrCode_name[8227:8248], + 38002: _ErrCode_name[8248:8269], + 38003: _ErrCode_name[8269:8295], + 38004: _ErrCode_name[8295:8315], + 38005: _ErrCode_name[8315:8340], + 38006: _ErrCode_name[8340:8361], + 38007: _ErrCode_name[8361:8385], + 38008: _ErrCode_name[8385:8407], + 38009: _ErrCode_name[8407:8431], + 38010: _ErrCode_name[8431:8455], + 38011: _ErrCode_name[8455:8478], + 38012: _ErrCode_name[8478:8501], + 38013: _ErrCode_name[8501:8526], + 38014: _ErrCode_name[8526:8550], + 38015: _ErrCode_name[8550:8575], + 38016: _ErrCode_name[8575:8596], + 38017: _ErrCode_name[8596:8614], + 38018: _ErrCode_name[8614:8631], + 38019: _ErrCode_name[8631:8649], + 38020: _ErrCode_name[8649:8670], + 38021: _ErrCode_name[8670:8693], + 38022: _ErrCode_name[8693:8716], + 38023: _ErrCode_name[8716:8738], + 38024: _ErrCode_name[8738:8756], + 38025: _ErrCode_name[8756:8783], + 38026: _ErrCode_name[8783:8807], + 38027: _ErrCode_name[8807:8834], + 38028: _ErrCode_name[8834:8859], + 38029: _ErrCode_name[8859:8884], + 38030: _ErrCode_name[8884:8907], + 38031: _ErrCode_name[8907:8925], + 38032: _ErrCode_name[8925:8949], + 38033: _ErrCode_name[8949:8973], + 38034: _ErrCode_name[8973:8993], + 38035: _ErrCode_name[8993:9015], + 38036: _ErrCode_name[9015:9036], + 38037: _ErrCode_name[9036:9064], + 38038: _ErrCode_name[9064:9088], + 38039: _ErrCode_name[9088:9106], + 38040: _ErrCode_name[9106:9129], + 38041: _ErrCode_name[9129:9151], + 38042: _ErrCode_name[9151:9178], + 38043: _ErrCode_name[9178:9211], + 38044: _ErrCode_name[9211:9234], + 38045: _ErrCode_name[9234:9261], + 38046: _ErrCode_name[9261:9286], + 38047: _ErrCode_name[9286:9310], + 38048: _ErrCode_name[9310:9334], + 38049: _ErrCode_name[9334:9358], + 38050: _ErrCode_name[9358:9389], + 38051: _ErrCode_name[9389:9412], + 38052: _ErrCode_name[9412:9431], + 38053: _ErrCode_name[9431:9457], + 38054: _ErrCode_name[9457:9494], + 38055: _ErrCode_name[9494:9533], + 38056: _ErrCode_name[9533:9571], + 38057: _ErrCode_name[9571:9593], + 38058: _ErrCode_name[9593:9608], + 40001: _ErrCode_name[9608:9626], + 40002: _ErrCode_name[9626:9643], + 40003: _ErrCode_name[9643:9669], + 40004: _ErrCode_name[9669:9696], + 40005: _ErrCode_name[9696:9714], + 40006: _ErrCode_name[9714:9735], + 40007: _ErrCode_name[9735:9756], + 40008: _ErrCode_name[9756:9777], + 40009: _ErrCode_name[9777:9800], + 40010: _ErrCode_name[9800:9823], + 40011: _ErrCode_name[9823:9844], + 40012: _ErrCode_name[9844:9869], + 40013: _ErrCode_name[9869:9890], + 40014: _ErrCode_name[9890:9914], + 40015: _ErrCode_name[9914:9939], + 40016: _ErrCode_name[9939:9960], + 40017: _ErrCode_name[9960:9979], + 40018: _ErrCode_name[9979:10003], + 40019: _ErrCode_name[10003:10026], + 40020: _ErrCode_name[10026:10046], + 40021: _ErrCode_name[10046:10063], + 40022: _ErrCode_name[10063:10080], + 40023: _ErrCode_name[10080:10101], + 40024: _ErrCode_name[10101:10127], + 40025: _ErrCode_name[10127:10153], + 40026: _ErrCode_name[10153:10176], + 40027: _ErrCode_name[10176:10197], + 40028: _ErrCode_name[10197:10217], + 40029: _ErrCode_name[10217:10240], + 40030: _ErrCode_name[10240:10263], + 40031: _ErrCode_name[10263:10284], + 40032: _ErrCode_name[10284:10305], + 40033: _ErrCode_name[10305:10325], + 40034: _ErrCode_name[10325:10347], + 40035: _ErrCode_name[10347:10372], + 40036: _ErrCode_name[10372:10397], + 40037: _ErrCode_name[10397:10414], + 40038: _ErrCode_name[10414:10433], + 40039: _ErrCode_name[10433:10457], + 40040: _ErrCode_name[10457:10482], + 40041: _ErrCode_name[10482:10500], + 40042: _ErrCode_name[10500:10523], + 40043: _ErrCode_name[10523:10545], + 40044: _ErrCode_name[10545:10569], + 40045: _ErrCode_name[10569:10591], + 40046: _ErrCode_name[10591:10612], + 40047: _ErrCode_name[10612:10634], + 40048: _ErrCode_name[10634:10652], + 40049: _ErrCode_name[10652:10671], + 40050: _ErrCode_name[10671:10692], + 40051: _ErrCode_name[10692:10712], + 40052: _ErrCode_name[10712:10733], + 40053: _ErrCode_name[10733:10755], + 40054: _ErrCode_name[10755:10776], + 40055: _ErrCode_name[10776:10795], + 40056: _ErrCode_name[10795:10817], + 40057: _ErrCode_name[10817:10837], + 40058: _ErrCode_name[10837:10858], + 40059: _ErrCode_name[10858:10884], + 40060: _ErrCode_name[10884:10902], + 40061: _ErrCode_name[10902:10927], + 40062: _ErrCode_name[10927:10950], + 40063: _ErrCode_name[10950:10974], + 40064: _ErrCode_name[10974:10999], + 40065: _ErrCode_name[10999:11022], + 40066: _ErrCode_name[11022:11042], + 40067: _ErrCode_name[11042:11071], + 40068: _ErrCode_name[11071:11091], + 40069: _ErrCode_name[11091:11113], + 40070: _ErrCode_name[11113:11126], + 40071: _ErrCode_name[11126:11146], + 40072: _ErrCode_name[11146:11166], + 40073: _ErrCode_name[11166:11202], + 40074: _ErrCode_name[11202:11237], + 40075: _ErrCode_name[11237:11260], + 40076: _ErrCode_name[11260:11283], + 40077: _ErrCode_name[11283:11306], + 40078: _ErrCode_name[11306:11332], + 40079: _ErrCode_name[11332:11357], + 40080: _ErrCode_name[11357:11381], + 40081: _ErrCode_name[11381:11406], + 40082: _ErrCode_name[11406:11430], + 40083: _ErrCode_name[11430:11448], + 42001: _ErrCode_name[11448:11466], + 42002: _ErrCode_name[11466:11491], + 42003: _ErrCode_name[11491:11514], + 42004: _ErrCode_name[11514:11538], + 42005: _ErrCode_name[11538:11562], + 42006: _ErrCode_name[11562:11581], + 42007: _ErrCode_name[11581:11601], + 42008: _ErrCode_name[11601:11625], + 42009: _ErrCode_name[11625:11648], + 42010: _ErrCode_name[11648:11666], + 42501: _ErrCode_name[11666:11684], + 42502: _ErrCode_name[11684:11697], + 42503: _ErrCode_name[11697:11712], + 42504: _ErrCode_name[11712:11732], + 42505: _ErrCode_name[11732:11747], + 43001: _ErrCode_name[11747:11773], + 43002: _ErrCode_name[11773:11793], + 43003: _ErrCode_name[11793:11810], + 43004: _ErrCode_name[11810:11834], + 43005: _ErrCode_name[11834:11857], + 43006: _ErrCode_name[11857:11874], + 43007: _ErrCode_name[11874:11888], + 43008: _ErrCode_name[11888:11911], + 44001: _ErrCode_name[11911:11935], + 44002: _ErrCode_name[11935:11966], + 44003: _ErrCode_name[11966:11996], + 44004: _ErrCode_name[11996:12024], + 44005: _ErrCode_name[12024:12051], + 44006: _ErrCode_name[12051:12077], + 44007: _ErrCode_name[12077:12116], + 44008: _ErrCode_name[12116:12155], + 44009: _ErrCode_name[12155:12190], + 44010: _ErrCode_name[12190:12218], + 44011: _ErrCode_name[12218:12246], + 44012: _ErrCode_name[12246:12263], + 44013: _ErrCode_name[12263:12287], + 44014: _ErrCode_name[12287:12313], + 44015: _ErrCode_name[12313:12342], + 44016: _ErrCode_name[12342:12381], + 44017: _ErrCode_name[12381:12420], + 44018: _ErrCode_name[12420:12458], + 44019: _ErrCode_name[12458:12507], + 44020: _ErrCode_name[12507:12528], + 46001: _ErrCode_name[12528:12547], + 46002: _ErrCode_name[12547:12563], + 46003: _ErrCode_name[12563:12583], + 46004: _ErrCode_name[12583:12606], + 46005: _ErrCode_name[12606:12627], + 46006: _ErrCode_name[12627:12654], + 46007: _ErrCode_name[12654:12677], + 46008: _ErrCode_name[12677:12703], + 46009: _ErrCode_name[12703:12726], + 46010: _ErrCode_name[12726:12752], + 46011: _ErrCode_name[12752:12784], + 46012: _ErrCode_name[12784:12817], + 46013: _ErrCode_name[12817:12835], + 46014: _ErrCode_name[12835:12856], + 46015: _ErrCode_name[12856:12890], + 46016: _ErrCode_name[12890:12920], + 46017: _ErrCode_name[12920:12952], + 46018: _ErrCode_name[12952:12973], + 46019: _ErrCode_name[12973:13010], + 46020: _ErrCode_name[13010:13035], + 46021: _ErrCode_name[13035:13061], + 46022: _ErrCode_name[13061:13092], + 46023: _ErrCode_name[13092:13119], + 46024: _ErrCode_name[13119:13138], + 46025: _ErrCode_name[13138:13162], + 46026: _ErrCode_name[13162:13187], + 46027: _ErrCode_name[13187:13221], + 46028: _ErrCode_name[13221:13251], + 46029: _ErrCode_name[13251:13280], + 46030: _ErrCode_name[13280:13306], + 46031: _ErrCode_name[13306:13331], + 46032: _ErrCode_name[13331:13366], + 46033: _ErrCode_name[13366:13388], + 46034: _ErrCode_name[13388:13412], + 46035: _ErrCode_name[13412:13437], + 48001: _ErrCode_name[13437:13454], + 48002: _ErrCode_name[13454:13470], + 48003: _ErrCode_name[13470:13483], + 49001: _ErrCode_name[13483:13496], + 49002: _ErrCode_name[13496:13521], + 50000: _ErrCode_name[13521:13527], } func (i ErrCode) String() string { From cb8cd27049bb50b1f8f7527b67ff60abe45af79c Mon Sep 17 00:00:00 2001 From: gmhdbjd Date: Thu, 1 Jun 2023 21:22:57 +0800 Subject: [PATCH 09/16] fix ut --- dm/openapi/fixtures/task.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/dm/openapi/fixtures/task.go b/dm/openapi/fixtures/task.go index 1b429b15986..c146b385722 100644 --- a/dm/openapi/fixtures/task.go +++ b/dm/openapi/fixtures/task.go @@ -53,7 +53,8 @@ var ( "security": null, "user": "root" }, - "task_mode": "all" + "task_mode": "all", + "strict_optimistic_shard_mode": false } ` @@ -103,7 +104,8 @@ var ( "meta_schema": "dm_meta", "name": "test", "on_duplicate": "error", - "shard_mode": "pessimistic", + "shard_mode": "optimistic", + "strict_optimistic_shard_mode": true, "source_config": { "full_migrate_conf": { "data_dir": "./exported_data", From 10ecbb55928f73914d88f2658cd4ad6bdf9f8a5a Mon Sep 17 00:00:00 2001 From: gmhdbjd Date: Thu, 1 Jun 2023 23:05:28 +0800 Subject: [PATCH 10/16] fix it --- dm/config/task_converters_test.go | 3 ++- dm/tests/dmctl_basic/conf/get_task.yaml | 1 + dm/tests/import_v10x/conf/task.yaml | 1 + 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/dm/config/task_converters_test.go b/dm/config/task_converters_test.go index 9cd6abd56a9..8882f43e1b9 100644 --- a/dm/config/task_converters_test.go +++ b/dm/config/task_converters_test.go @@ -154,7 +154,8 @@ func testShardAndFilterTaskToSubTaskConfigs(c *check.C) { c.Assert(subTask1Config.Meta.BinLogPos, check.Equals, uint32(*task.SourceConfig.SourceConf[0].BinlogPos)) // check shard config - c.Assert(subTask1Config.ShardMode, check.Equals, string(openapi.TaskShardModePessimistic)) + c.Assert(subTask1Config.ShardMode, check.Equals, string(openapi.TaskShardModeOptimistic)) + c.Assert(subTask1Config.StrictOptimisticShardMode, check.IsTrue) // check online schema change c.Assert(subTask1Config.OnlineDDL, check.Equals, true) // check case sensitive diff --git a/dm/tests/dmctl_basic/conf/get_task.yaml b/dm/tests/dmctl_basic/conf/get_task.yaml index 616de0497bd..d4ab9919fc8 100644 --- a/dm/tests/dmctl_basic/conf/get_task.yaml +++ b/dm/tests/dmctl_basic/conf/get_task.yaml @@ -2,6 +2,7 @@ name: test task-mode: all is-sharding: true shard-mode: pessimistic +strict-optimistic-shard-mode: false ignore-checking-items: [] meta-schema: dm_meta enable-heartbeat: false diff --git a/dm/tests/import_v10x/conf/task.yaml b/dm/tests/import_v10x/conf/task.yaml index 7a575677b4f..07285965df5 100644 --- a/dm/tests/import_v10x/conf/task.yaml +++ b/dm/tests/import_v10x/conf/task.yaml @@ -2,6 +2,7 @@ name: test task-mode: all is-sharding: false shard-mode: "" +strict-optimistic-shard-mode: false ignore-checking-items: [] meta-schema: dm_meta enable-heartbeat: false From 4f1eeb5ac6b2d63cdf5e9bc22153eee815859d98 Mon Sep 17 00:00:00 2001 From: gmhdbjd Date: Thu, 1 Jun 2023 23:29:55 +0800 Subject: [PATCH 11/16] fix ut --- dm/config/task_converters_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dm/config/task_converters_test.go b/dm/config/task_converters_test.go index 8882f43e1b9..7f3c69b5c7c 100644 --- a/dm/config/task_converters_test.go +++ b/dm/config/task_converters_test.go @@ -219,7 +219,7 @@ func testShardAndFilterTaskToSubTaskConfigs(c *check.C) { c.Assert(subTask2Config.Meta.BinLogName, check.Equals, *task.SourceConfig.SourceConf[1].BinlogName) c.Assert(subTask2Config.Meta.BinLogPos, check.Equals, uint32(*task.SourceConfig.SourceConf[1].BinlogPos)) // check shard config - c.Assert(subTask2Config.ShardMode, check.Equals, string(openapi.TaskShardModePessimistic)) + c.Assert(subTask2Config.ShardMode, check.Equals, string(openapi.TaskShardModeOptimistic)) // check online schema change c.Assert(subTask2Config.OnlineDDL, check.Equals, true) // check case sensitive From 509c4cba2681922fc369829aac686c467cf5d90d Mon Sep 17 00:00:00 2001 From: gmhdbjd Date: Fri, 2 Jun 2023 01:23:36 +0800 Subject: [PATCH 12/16] fix test --- engine/test/integration_tests/dm_tls/run.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/engine/test/integration_tests/dm_tls/run.sh b/engine/test/integration_tests/dm_tls/run.sh index 9d1844cf78b..9ec3dceb9ab 100644 --- a/engine/test/integration_tests/dm_tls/run.sh +++ b/engine/test/integration_tests/dm_tls/run.sh @@ -23,7 +23,7 @@ function run() { # start a cluster with tls, but now master can't access the certificate so exit start_engine_cluster $CONFIG $COMPOSECMD -f ${seq[0]} stop server-master-0 server-master-1 server-master-2 - $COMPOSECMD -f ${seq[0]} ps | grep "server-master-0" | grep -q "exited" + $COMPOSECMD -f ${seq[0]} ps | grep "server-master-0" | grep -q "Exit" # copy auto-generated certificates from MySQL to bypass permission mkdir -p $WORK_DIR/mysql1 From c94841e6f73ab6f4512f3f942a80114ff73eca07 Mon Sep 17 00:00:00 2001 From: gmhdbjd Date: Fri, 2 Jun 2023 14:14:42 +0800 Subject: [PATCH 13/16] debug ci --- engine/test/integration_tests/dm_tls/run.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/engine/test/integration_tests/dm_tls/run.sh b/engine/test/integration_tests/dm_tls/run.sh index 9ec3dceb9ab..b58157e5a75 100644 --- a/engine/test/integration_tests/dm_tls/run.sh +++ b/engine/test/integration_tests/dm_tls/run.sh @@ -23,6 +23,7 @@ function run() { # start a cluster with tls, but now master can't access the certificate so exit start_engine_cluster $CONFIG $COMPOSECMD -f ${seq[0]} stop server-master-0 server-master-1 server-master-2 + $COMPOSECMD -f ${seq[0]} ps | grep "server-master-0" $COMPOSECMD -f ${seq[0]} ps | grep "server-master-0" | grep -q "Exit" # copy auto-generated certificates from MySQL to bypass permission From c43d4b8015fe46e3f44f69a7522205f7e83d76c2 Mon Sep 17 00:00:00 2001 From: gmhdbjd Date: Fri, 2 Jun 2023 16:54:10 +0800 Subject: [PATCH 14/16] update --- engine/test/integration_tests/dm_tls/run.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/engine/test/integration_tests/dm_tls/run.sh b/engine/test/integration_tests/dm_tls/run.sh index b58157e5a75..9d1844cf78b 100644 --- a/engine/test/integration_tests/dm_tls/run.sh +++ b/engine/test/integration_tests/dm_tls/run.sh @@ -23,8 +23,7 @@ function run() { # start a cluster with tls, but now master can't access the certificate so exit start_engine_cluster $CONFIG $COMPOSECMD -f ${seq[0]} stop server-master-0 server-master-1 server-master-2 - $COMPOSECMD -f ${seq[0]} ps | grep "server-master-0" - $COMPOSECMD -f ${seq[0]} ps | grep "server-master-0" | grep -q "Exit" + $COMPOSECMD -f ${seq[0]} ps | grep "server-master-0" | grep -q "exited" # copy auto-generated certificates from MySQL to bypass permission mkdir -p $WORK_DIR/mysql1 From 08e851a2915b35ecf6c80eafd4a117daee0d8ad8 Mon Sep 17 00:00:00 2001 From: gmhdbjd Date: Tue, 6 Jun 2023 17:51:46 +0800 Subject: [PATCH 15/16] add it --- .../conf/double-source-strict-optimistic.yaml | 59 +++++++++++++++++++ .../conf/single-source-strict-optimistic.yaml | 52 ++++++++++++++++ dm/tests/shardddl4_1/run.sh | 44 ++++++++++++++ 3 files changed, 155 insertions(+) create mode 100644 dm/tests/shardddl4_1/conf/double-source-strict-optimistic.yaml create mode 100644 dm/tests/shardddl4_1/conf/single-source-strict-optimistic.yaml diff --git a/dm/tests/shardddl4_1/conf/double-source-strict-optimistic.yaml b/dm/tests/shardddl4_1/conf/double-source-strict-optimistic.yaml new file mode 100644 index 00000000000..c25986f6586 --- /dev/null +++ b/dm/tests/shardddl4_1/conf/double-source-strict-optimistic.yaml @@ -0,0 +1,59 @@ +--- +name: test +task-mode: all +is-sharding: true +shard-mode: "optimistic" +strict-optimistic-shard-mode: true +meta-schema: "dm_meta" +ignore-checking-items: ["auto_increment_ID"] + +target-database: + host: "127.0.0.1" + port: 4000 + user: "test" + password: "/Q7B9DizNLLTTfiZHv9WoEAKamfpIUs=" + +mysql-instances: + - source-id: "mysql-replica-01" + block-allow-list: "instance" + route-rules: ["sharding-table-rules","sharding-schema-rules"] + mydumper-config-name: "global" + loader-config-name: "global" + syncer-config-name: "global" + - source-id: "mysql-replica-02" + block-allow-list: "instance" + route-rules: ["sharding-table-rules","sharding-schema-rules"] + mydumper-config-name: "global" + loader-config-name: "global" + syncer-config-name: "global" + +block-allow-list: + instance: + do-dbs: ["shardddl1","shardddl2"] + +routes: + sharding-table-rules: + schema-pattern: "shardddl*" + target-schema: "shardddl" + table-pattern: "tb*" + target-table: "tb" + sharding-schema-rules: + schema-pattern: "shardddl*" + target-schema: "shardddl" + +mydumpers: + global: + threads: 4 + chunk-filesize: 64 + skip-tz-utc: true + extra-args: "" + +loaders: + global: + pool-size: 16 + dir: "./dumped_data" + +syncers: + global: + worker-count: 16 + batch: 100 diff --git a/dm/tests/shardddl4_1/conf/single-source-strict-optimistic.yaml b/dm/tests/shardddl4_1/conf/single-source-strict-optimistic.yaml new file mode 100644 index 00000000000..d0f83c5066d --- /dev/null +++ b/dm/tests/shardddl4_1/conf/single-source-strict-optimistic.yaml @@ -0,0 +1,52 @@ +--- +name: test +task-mode: all +is-sharding: true +shard-mode: "optimistic" +strict-optimistic-shard-mode: true +meta-schema: "dm_meta" + +target-database: + host: "127.0.0.1" + port: 4000 + user: "test" + password: "/Q7B9DizNLLTTfiZHv9WoEAKamfpIUs=" + +mysql-instances: + - source-id: "mysql-replica-01" + block-allow-list: "instance" + route-rules: ["sharding-table-rules","sharding-schema-rules"] + mydumper-config-name: "global" + loader-config-name: "global" + syncer-config-name: "global" + +block-allow-list: + instance: + do-dbs: ["shardddl1","shardddl2"] + +routes: + sharding-table-rules: + schema-pattern: "shardddl*" + target-schema: "shardddl" + table-pattern: "tb*" + target-table: "tb" + sharding-schema-rules: + schema-pattern: "shardddl*" + target-schema: "shardddl" + +mydumpers: + global: + threads: 4 + chunk-filesize: 64 + skip-tz-utc: true + extra-args: "" + +loaders: + global: + pool-size: 16 + dir: "./dumped_data" + +syncers: + global: + worker-count: 16 + batch: 100 diff --git a/dm/tests/shardddl4_1/run.sh b/dm/tests/shardddl4_1/run.sh index cf3525dedb0..b7914bf6fae 100644 --- a/dm/tests/shardddl4_1/run.sh +++ b/dm/tests/shardddl4_1/run.sh @@ -1213,12 +1213,56 @@ function DM_RESYNC_TXN_INTERRUPT() { "clean_table" "optimistic" } +function DM_STRICT_OPTIMISTIC_SINGLE_SOURCE_CASE() { + run_sql_source1 "insert into ${shardddl1}.${tb1} values(1,1);" + run_sql_source1 "insert into ${shardddl1}.${tb2} values(2,2);" + + run_sql_source1 "alter table ${shardddl1}.${tb1} add c int;" + run_sql_source1 "insert into ${shardddl1}.${tb1} values(3,3,3);" + run_sql_source1 "insert into ${shardddl1}.${tb2} values(4,4);" + + run_sql_source1 "alter table ${shardddl1}.${tb2} change b c int;" + run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \ + "query-status test" \ + "because schema conflict detected" 1 +} + +function DM_STRICT_OPTIMISTIC_SINGLE_SOURCE() { + run_case STRICT_OPTIMISTIC_SINGLE_SOURCE "single-source-strict-optimistic" \ + "run_sql_source1 \"create table ${shardddl1}.${tb1} (a int primary key, b int);\"; \ + run_sql_source1 \"create table ${shardddl1}.${tb2} (a int primary key, b int);\"" \ + "clean_table" "optimistic" +} + +function DM_STRICT_OPTIMISTIC_DOUBLE_SOURCE_CASE() { + run_sql_source1 "insert into ${shardddl1}.${tb1} values(1,1);" + run_sql_source2 "insert into ${shardddl1}.${tb1} values(2,2);" + + run_sql_source1 "alter table ${shardddl1}.${tb1} add c int;" + run_sql_source1 "insert into ${shardddl1}.${tb1} values(3,3,3);" + run_sql_source2 "insert into ${shardddl1}.${tb1} values(4,4);" + + run_sql_source1 "alter table ${shardddl1}.${tb1} add d int not null;" + run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \ + "query-status test" \ + "because schema conflict detected" 1 +} + +function DM_STRICT_OPTIMISTIC_DOUBLE_SOURCE() { + run_case STRICT_OPTIMISTIC_DOUBLE_SOURCE "double-source-strict-optimistic" \ + "run_sql_source1 \"create table ${shardddl1}.${tb1} (a int primary key, b int);\"; \ + run_sql_source2 \"create table ${shardddl1}.${tb1} (a int primary key, b int);\"" \ + "clean_table" "optimistic" +} + function run() { init_cluster init_database DM_TABLE_CHECKPOINT_BACKWARD DM_RESYNC_NOT_FLUSHED DM_RESYNC_TXN_INTERRUPT + DM_STRICT_OPTIMISTIC_SINGLE_SOURCE + DM_STRICT_OPTIMISTIC_DOUBLE_SOURCE start=131 end=155 except=(140 141 144) From 80ca97394ca24cc2e5fe6fe6a4682729d2dc58f1 Mon Sep 17 00:00:00 2001 From: gmhdbjd Date: Thu, 8 Jun 2023 17:10:15 +0800 Subject: [PATCH 16/16] update --- engine/jobmaster/dm/config/dm_subtask_3306.toml | 3 ++- engine/jobmaster/dm/config/dm_subtask_3307.toml | 3 ++- engine/jobmaster/dm/config/job_template.yaml | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/engine/jobmaster/dm/config/dm_subtask_3306.toml b/engine/jobmaster/dm/config/dm_subtask_3306.toml index 58d33e32f53..23ba19f439b 100644 --- a/engine/jobmaster/dm/config/dm_subtask_3306.toml +++ b/engine/jobmaster/dm/config/dm_subtask_3306.toml @@ -1,5 +1,6 @@ is-sharding = false -shard-mode = "pessimistic" +shard-mode = "optimistic" +strict-optimistic-shard-mode = true online-ddl = true shadow-table-rules = [] trash-table-rules = [] diff --git a/engine/jobmaster/dm/config/dm_subtask_3307.toml b/engine/jobmaster/dm/config/dm_subtask_3307.toml index 13c4467a5e4..3e0396338f8 100644 --- a/engine/jobmaster/dm/config/dm_subtask_3307.toml +++ b/engine/jobmaster/dm/config/dm_subtask_3307.toml @@ -1,5 +1,6 @@ is-sharding = false -shard-mode = "pessimistic" +shard-mode = "optimistic" +strict-optimistic-shard-mode = true online-ddl = true shadow-table-rules = [] trash-table-rules = [] diff --git a/engine/jobmaster/dm/config/job_template.yaml b/engine/jobmaster/dm/config/job_template.yaml index 69610db3eb0..e8d6ff5d516 100644 --- a/engine/jobmaster/dm/config/job_template.yaml +++ b/engine/jobmaster/dm/config/job_template.yaml @@ -1,5 +1,6 @@ task-mode: all -shard-mode: pessimistic +shard-mode: optimistic +strict-optimistic-shard-mode: true ignore-checking-items: [] meta-schema: dm_meta #enable-heartbeat: false