From 48ff774a6e5264737deb35c2b3e947463290a72e Mon Sep 17 00:00:00 2001 From: GMHDBJD <35025882+GMHDBJD@users.noreply.github.com> Date: Mon, 6 Jul 2020 11:18:39 +0800 Subject: [PATCH] workaround: add instruction for err (#765) --- _utils/terror_gen/errors_release.txt | 196 ++++++++++++------------ checker/checker.go | 2 +- errors.toml | 216 +++++++++++++-------------- pkg/terror/error_list.go | 196 ++++++++++++------------ 4 files changed, 305 insertions(+), 305 deletions(-) diff --git a/_utils/terror_gen/errors_release.txt b/_utils/terror_gen/errors_release.txt index 2bbb0b3677..547cad0f95 100644 --- a/_utils/terror_gen/errors_release.txt +++ b/_utils/terror_gen/errors_release.txt @@ -1,32 +1,32 @@ -ErrDBDriverError,[code=10001:class=database:scope=not-set:level=high], "msg: 'database driver error', workaround: ''" -ErrDBBadConn,[code=10002:class=database:scope=not-set:level=high], "msg: 'database driver', workaround: ''" -ErrDBInvalidConn,[code=10003:class=database:scope=not-set:level=high], "msg: 'database driver', workaround: ''" +ErrDBDriverError,[code=10001:class=database:scope=not-set:level=high], "msg: 'database driver error', workaround: 'Please check the database connection and the database config in configuration file.'" +ErrDBBadConn,[code=10002:class=database:scope=not-set:level=high], "msg: 'database driver', workaround: 'Please check the database connection, then use `pause-task` to pause the task and then use `resume-task` to resume the task.'" +ErrDBInvalidConn,[code=10003:class=database:scope=not-set:level=high], "msg: 'database driver', workaround: 'Please check the database connection, then use `pause-task` to stop the task and then use `resume-task` to resume the task.'" ErrDBUnExpect,[code=10004:class=database:scope=not-set:level=high], "msg: 'unexpect database error: %s', workaround: ''" ErrDBQueryFailed,[code=10005:class=database:scope=not-set:level=high], "msg: 'query statement failed: %s', workaround: ''" ErrDBExecuteFailed,[code=10006:class=database:scope=not-set:level=high], "msg: 'execute statement failed: %s', workaround: ''" ErrParseMydumperMeta,[code=11001:class=functional:scope=internal:level=high], "msg: 'parse mydumper metadata error: %s', workaround: ''" ErrGetFileSize,[code=11002:class=functional:scope=internal:level=high], "msg: 'get file %s size', workaround: ''" -ErrDropMultipleTables,[code=11003:class=functional:scope=internal:level=high], "msg: 'not allowed operation: drop multiple tables in one statement', workaround: ''" -ErrRenameMultipleTables,[code=11004:class=functional:scope=internal:level=high], "msg: 'not allowed operation: rename multiple tables in one statement', workaround: ''" -ErrAlterMultipleTables,[code=11005:class=functional:scope=internal:level=high], "msg: 'not allowed operation: alter multiple tables in one statement', workaround: ''" -ErrParseSQL,[code=11006:class=functional:scope=internal:level=high], "msg: 'parse statement', workaround: ''" -ErrUnknownTypeDDL,[code=11007:class=functional:scope=internal:level=high], "msg: 'unknown type ddl %+v', workaround: ''" +ErrDropMultipleTables,[code=11003:class=functional:scope=internal:level=high], "msg: 'not allowed operation: drop multiple tables in one statement', workaround: 'It is recommended to include only one DDL operation in a statement executed upstream. Please manually handle it using dmctl (skipping the DDL statement or replacing the DDL statement with a specified DDL statement). For details, see https://docs.pingcap.com/tidb-data-migration/stable/skip-or-replace-abnormal-sql-statements'" +ErrRenameMultipleTables,[code=11004:class=functional:scope=internal:level=high], "msg: 'not allowed operation: rename multiple tables in one statement', workaround: 'It is recommended to include only one DDL operation in a statement executed upstream. Please manually handle it using dmctl (skipping the DDL statement or replacing the DDL statement with a specified DDL statement). For details, see https://docs.pingcap.com/tidb-data-migration/stable/skip-or-replace-abnormal-sql-statements'" +ErrAlterMultipleTables,[code=11005:class=functional:scope=internal:level=high], "msg: 'not allowed operation: alter multiple tables in one statement', workaround: 'It is recommended to include only one DDL operation in a statement executed upstream. Please manually handle it using dmctl (skipping the DDL statement or replacing the DDL statement with a specified DDL statement). For details, see https://docs.pingcap.com/tidb-data-migration/stable/skip-or-replace-abnormal-sql-statements'" +ErrParseSQL,[code=11006:class=functional:scope=internal:level=high], "msg: 'parse statement', workaround: 'Please manually handle it using dmctl (skipping the DDL statement or replacing the DDL statement with a specified DDL statement). For details, see https://docs.pingcap.com/tidb-data-migration/stable/skip-or-replace-abnormal-sql-statements'" +ErrUnknownTypeDDL,[code=11007:class=functional:scope=internal:level=high], "msg: 'unknown type ddl %+v', workaround: 'Please manually handle it using dmctl (skipping the DDL statement or replacing the DDL statement with a specified DDL statement). For details, see https://docs.pingcap.com/tidb-data-migration/stable/skip-or-replace-abnormal-sql-statements'" ErrRestoreASTNode,[code=11008:class=functional:scope=internal:level=high], "msg: 'restore ast node', workaround: ''" ErrParseGTID,[code=11009:class=functional:scope=internal:level=high], "msg: 'parse GTID %s', workaround: ''" -ErrNotSupportedFlavor,[code=11010:class=functional:scope=internal:level=high], "msg: 'flavor %s not supported', workaround: ''" +ErrNotSupportedFlavor,[code=11010:class=functional:scope=internal:level=high], "msg: 'flavor %s not supported', workaround: 'Please check `flavor` config in source configuration file.'" ErrNotMySQLGTID,[code=11011:class=functional:scope=internal:level=high], "msg: '%s is not mysql GTID set', workaround: ''" ErrNotMariaDBGTID,[code=11012:class=functional:scope=internal:level=high], "msg: '%s is not mariadb GTID set', workaround: ''" ErrNotUUIDString,[code=11013:class=functional:scope=internal:level=high], "msg: '%v is not UUID string', workaround: ''" ErrMariaDBDomainID,[code=11014:class=functional:scope=internal:level=high], "msg: '%v is not uint32', workaround: ''" ErrInvalidServerID,[code=11015:class=functional:scope=internal:level=high], "msg: 'invalid server id %s', workaround: ''" ErrGetSQLModeFromStr,[code=11016:class=functional:scope=internal:level=high], "msg: 'get sql mode from string literal %s', workaround: ''" -ErrVerifySQLOperateArgs,[code=11017:class=functional:scope=internal:level=low], "msg: '', workaround: ''" +ErrVerifySQLOperateArgs,[code=11017:class=functional:scope=internal:level=low], "msg: '', workaround: 'Please make sure the args are correct.'" ErrStatFileSize,[code=11018:class=functional:scope=internal:level=high], "msg: 'get file statfs', workaround: ''" ErrReaderAlreadyRunning,[code=11019:class=functional:scope=internal:level=high], "msg: 'binlog reader is already running', workaround: ''" ErrReaderAlreadyStarted,[code=11020:class=functional:scope=internal:level=high], "msg: 'stage %s, expect %s, already started', workaround: ''" ErrReaderStateCannotClose,[code=11021:class=functional:scope=internal:level=high], "msg: 'stage %s, expect %s, can not close', workaround: ''" -ErrReaderShouldStartSync,[code=11022:class=functional:scope=internal:level=high], "msg: 'stage %s, expect %s, please start sync first', workaround: ''" -ErrEmptyRelayDir,[code=11023:class=functional:scope=internal:level=high], "msg: 'empty relay dir', workaround: ''" +ErrReaderShouldStartSync,[code=11022:class=functional:scope=internal:level=high], "msg: 'stage %s, expect %s', workaround: ''" +ErrEmptyRelayDir,[code=11023:class=functional:scope=internal:level=high], "msg: 'empty relay dir', workaround: 'Please check `relay-dir` config in task configuration file.'" ErrReadDir,[code=11024:class=functional:scope=internal:level=high], "msg: 'read dir: %s', workaround: ''" ErrBaseFileNotFound,[code=11025:class=functional:scope=internal:level=high], "msg: 'base file %s in directory %s not found', workaround: ''" ErrBinFileCmpCondNotSupport,[code=11026:class=functional:scope=internal:level=high], "msg: 'cmp condition %v not supported', workaround: ''" @@ -37,16 +37,16 @@ ErrAddWatchForRelayLogDir,[code=11030:class=functional:scope=internal:level=high ErrWatcherStart,[code=11031:class=functional:scope=internal:level=high], "msg: 'watcher starts for relay log dir %s', workaround: ''" ErrWatcherChanClosed,[code=11032:class=functional:scope=internal:level=high], "msg: 'watcher's %s chan for relay log dir %s closed', workaround: ''" ErrWatcherChanRecvError,[code=11033:class=functional:scope=internal:level=high], "msg: 'watcher receives error, relay log dir %s', workaround: ''" -ErrRelayLogFileSizeSmaller,[code=11034:class=functional:scope=internal:level=high], "msg: 'file size of relay log %s become smaller, please check the status of relay log and re-pull it. If you want to re-pull it, you should open relay.meta, set the binlog-name to the error pos name, set binlog-pos to 4, delete the stashed relay log and run `resume-relay` in dmctl', workaround: ''" +ErrRelayLogFileSizeSmaller,[code=11034:class=functional:scope=internal:level=high], "msg: 'file size of relay log %s become smaller', workaround: 'Please check the status of relay log and re-pull it. If you want to re-pull it, you should open relay.meta, set the binlog-name to the error pos name, set binlog-pos to 4, delete the stashed relay log and run `resume-relay` in dmctl.'" ErrBinlogFileNotSpecified,[code=11035:class=functional:scope=internal:level=high], "msg: 'binlog file must be specified', workaround: ''" ErrNoRelayLogMatchPos,[code=11036:class=functional:scope=internal:level=high], "msg: 'no relay log files in dir %s match pos %s', workaround: ''" ErrFirstRelayLogNotMatchPos,[code=11037:class=functional:scope=internal:level=high], "msg: 'the first relay log %s not match the start pos %v', workaround: ''" ErrParserParseRelayLog,[code=11038:class=functional:scope=internal:level=high], "msg: 'parse relay log file %s', workaround: ''" -ErrNoSubdirToSwitch,[code=11039:class=functional:scope=internal:level=high], "msg: 'parse for previous sub relay directory finished, but no next sub directory need to switch not supported', workaround: ''" +ErrNoSubdirToSwitch,[code=11039:class=functional:scope=internal:level=high], "msg: 'parse for previous sub relay directory finished, but no next sub directory need to switch', workaround: ''" ErrNeedSyncAgain,[code=11040:class=functional:scope=internal:level=high], "msg: 'Last sync error or closed, try sync and get event again', workaround: ''" ErrSyncClosed,[code=11041:class=functional:scope=internal:level=high], "msg: 'Sync was closed', workaround: ''" ErrSchemaTableNameNotValid,[code=11042:class=functional:scope=internal:level=high], "msg: 'table name %s not valid', workaround: ''" -ErrGenTableRouter,[code=11043:class=functional:scope=internal:level=high], "msg: 'generate table router', workaround: ''" +ErrGenTableRouter,[code=11043:class=functional:scope=internal:level=high], "msg: 'generate table router', workaround: 'Please check `routes` config in task configuration file.'" ErrEncryptSecretKeyNotValid,[code=11044:class=functional:scope=internal:level=high], "msg: 'key size should be 16, 24 or 32, but input key's size is %d', workaround: ''" ErrEncryptGenCipher,[code=11045:class=functional:scope=internal:level=high], "msg: 'generate cipher', workaround: ''" ErrEncryptGenIV,[code=11046:class=functional:scope=internal:level=high], "msg: 'generate iv', workaround: ''" @@ -89,7 +89,7 @@ ErrBinlogLatestGTIDNotInPrev,[code=11082:class=functional:scope=internal:level=h ErrBinlogReadFileByGTID,[code=11083:class=functional:scope=internal:level=high], "msg: 'read from file by GTID not supported', workaround: ''" ErrBinlogWriterNotStateNew,[code=11084:class=functional:scope=internal:level=high], "msg: 'stage %s, expect %s, already started', workaround: ''" ErrBinlogWriterStateCannotClose,[code=11085:class=functional:scope=internal:level=high], "msg: 'stage %s, expect %s, can not close', workaround: ''" -ErrBinlogWriterNeedStart,[code=11086:class=functional:scope=internal:level=high], "msg: 'stage %s, expect %s, please start the writer first', workaround: ''" +ErrBinlogWriterNeedStart,[code=11086:class=functional:scope=internal:level=high], "msg: 'stage %s, expect %s', workaround: ''" ErrBinlogWriterOpenFile,[code=11087:class=functional:scope=internal:level=high], "msg: 'open file', workaround: ''" ErrBinlogWriterGetFileStat,[code=11088:class=functional:scope=internal:level=high], "msg: 'get stat for %s', workaround: ''" ErrBinlogWriterWriteDataLen,[code=11089:class=functional:scope=internal:level=high], "msg: 'data length %d', workaround: ''" @@ -109,45 +109,45 @@ ErrTracingGetTSO,[code=11102:class=functional:scope=internal:level=high], "msg: ErrBackoffArgsNotValid,[code=11103:class=functional:scope=internal:level=medium], "msg: 'backoff argument %s value %v not valid', workaround: ''" ErrInitLoggerFail,[code=11104:class=functional:scope=internal:level=medium], "msg: 'init logger failed', workaround: ''" ErrGTIDTruncateInvalid,[code=11105:class=functional:scope=internal:level=high], "msg: 'truncate GTID sets %v to %v not valid', workaround: ''" -ErrRelayLogGivenPosTooBig,[code=11106:class=functional:scope=internal:level=high], "msg: 'the given relay log pos %s of meta config is too big, please check it again', workaround: ''" +ErrRelayLogGivenPosTooBig,[code=11106:class=functional:scope=internal:level=high], "msg: 'the given relay log pos %s of meta config is too big, please check it again', workaround: 'If the size of the corresponding binlog file has exceeded 4GB, please follow the solution in https://docs.pingcap.com/tidb-data-migration/stable/error-handling#the-relay-unit-throws-error-event-from--in--diff-from-passed-in-event--or-a-replication-task-is-interrupted-with-failing-to-get-or-parse-binlog-errors-like-get-binlog-error-error-1236-hy000-and-binlog-checksum-mismatch-data-may-be-corrupted-returned'" ErrElectionCampaignFail,[code=11107:class=functional:scope=internal:level=high], "msg: 'fail to campaign leader: %s', workaround: ''" ErrElectionGetLeaderIDFail,[code=11108:class=functional:scope=internal:level=medium], "msg: 'fail to get leader ID', workaround: ''" ErrBinlogInvalidFilenameWithUUIDSuffix,[code=11109:class=functional:scope=internal:level=high], "msg: 'invalid binlog filename with uuid suffix %s', workaround: ''" ErrDecodeEtcdKeyFail,[code=11110:class=functional:scope=internal:level=medium], "msg: 'fail to decode etcd key: %s', workaround: ''" -ErrShardDDLOptimismTrySyncFail,[code=11111:class=functional:scope=internal:level=medium], "msg: 'fail to try sync the optimistic shard ddl lock %s: %s', workaround: ''" -ErrConfigCheckItemNotSupport,[code=20001:class=config:scope=internal:level=medium], "msg: 'checking item %s is not supported\n%s', workaround: ''" -ErrConfigTomlTransform,[code=20002:class=config:scope=internal:level=medium], "msg: '%s', workaround: ''" -ErrConfigTaskYamlTransform,[code=20003:class=config:scope=internal:level=medium], "msg: '%s', workaround: ''" -ErrConfigTaskNameEmpty,[code=20004:class=config:scope=internal:level=medium], "msg: 'task name should not be empty', workaround: ''" -ErrConfigEmptySourceID,[code=20005:class=config:scope=internal:level=medium], "msg: 'empty source-id not valid', workaround: ''" -ErrConfigTooLongSourceID,[code=20006:class=config:scope=internal:level=medium], "msg: 'too long source-id not valid', workaround: ''" -ErrConfigOnlineSchemeNotSupport,[code=20007:class=config:scope=internal:level=medium], "msg: 'online scheme %s not supported', workaround: ''" -ErrConfigInvalidTimezone,[code=20008:class=config:scope=internal:level=medium], "msg: 'invalid timezone string: %s', workaround: ''" +ErrShardDDLOptimismTrySyncFail,[code=11111:class=functional:scope=internal:level=medium], "msg: 'fail to try sync the optimistic shard ddl lock %s: %s', workaround: 'Please use show-ddl-locks command for more details.'" +ErrConfigCheckItemNotSupport,[code=20001:class=config:scope=internal:level=medium], "msg: 'checking item %s is not supported\n%s', workaround: 'Please check `ignore-checking-items` config in task configuration file, which can be set including `all`/`dump_privilege`/`replication_privilege`/`version`/`binlog_enable`/`binlog_format`/`binlog_row_image`/`table_schema`/`schema_of_shard_tables`/`auto_increment_ID`.'" +ErrConfigTomlTransform,[code=20002:class=config:scope=internal:level=medium], "msg: '%s', workaround: 'Please check the configuration file has correct TOML format.'" +ErrConfigTaskYamlTransform,[code=20003:class=config:scope=internal:level=medium], "msg: '%s', workaround: 'Please check the configuration file has correct YAML format.'" +ErrConfigTaskNameEmpty,[code=20004:class=config:scope=internal:level=medium], "msg: 'task name should not be empty', workaround: 'Please check the `name` config in task configuration file.'" +ErrConfigEmptySourceID,[code=20005:class=config:scope=internal:level=medium], "msg: 'empty source-id not valid', workaround: 'Please check the `source-id` config in configuration file.'" +ErrConfigTooLongSourceID,[code=20006:class=config:scope=internal:level=medium], "msg: 'too long source-id not valid', workaround: 'Please check the `source-id` config in configuration file. The max source id length is 32.'" +ErrConfigOnlineSchemeNotSupport,[code=20007:class=config:scope=internal:level=medium], "msg: 'online scheme %s not supported', workaround: 'Please check the `online-ddl-scheme` config in task configuration file. Only `ghost` and `pt` are currently supported.'" +ErrConfigInvalidTimezone,[code=20008:class=config:scope=internal:level=medium], "msg: 'invalid timezone string: %s', workaround: 'Please check the `timezone` config in task configuration file.'" ErrConfigParseFlagSet,[code=20009:class=config:scope=internal:level=medium], "msg: 'parse subtask config flag set', workaround: ''" ErrConfigDecryptDBPassword,[code=20010:class=config:scope=internal:level=medium], "msg: 'decrypt DB password %s failed', workaround: ''" -ErrConfigMetaNoBinlogName,[code=20011:class=config:scope=internal:level=medium], "msg: 'binlog-name must specify', workaround: ''" -ErrConfigMySQLInstNotFound,[code=20012:class=config:scope=internal:level=medium], "msg: 'mysql instance config must specify', workaround: ''" -ErrConfigMySQLInstsAtLeastOne,[code=20013:class=config:scope=internal:level=medium], "msg: 'must specify at least one mysql-instances', workaround: ''" -ErrConfigMySQLInstSameSourceID,[code=20014:class=config:scope=internal:level=medium], "msg: 'mysql-instance (%d) and (%d) have same source-id (%s)', workaround: ''" -ErrConfigMydumperCfgConflict,[code=20015:class=config:scope=internal:level=medium], "msg: 'mydumper-config-name and mydumper should only specify one', workaround: ''" -ErrConfigLoaderCfgConflict,[code=20016:class=config:scope=internal:level=medium], "msg: 'loader-config-name and loader should only specify one', workaround: ''" -ErrConfigSyncerCfgConflict,[code=20017:class=config:scope=internal:level=medium], "msg: 'syncer-config-name and syncer should only specify one', workaround: ''" +ErrConfigMetaNoBinlogName,[code=20011:class=config:scope=internal:level=medium], "msg: 'binlog-name must specify', workaround: 'Please check the `meta` config in task configuration file.'" +ErrConfigMySQLInstNotFound,[code=20012:class=config:scope=internal:level=medium], "msg: 'mysql instance config must specify', workaround: 'Please check the `mysql-instances` config in task configuration file.'" +ErrConfigMySQLInstsAtLeastOne,[code=20013:class=config:scope=internal:level=medium], "msg: 'must specify at least one mysql-instances', workaround: 'Please check the `mysql-instances` config in task configuration file.'" +ErrConfigMySQLInstSameSourceID,[code=20014:class=config:scope=internal:level=medium], "msg: 'mysql-instance (%d) and (%d) have same source-id (%s)', workaround: 'Please check the `mysql-instances` config in task configuration file.'" +ErrConfigMydumperCfgConflict,[code=20015:class=config:scope=internal:level=medium], "msg: 'mydumper-config-name and mydumper should only specify one', workaround: 'Please check the `mydumper-config-name` and `mydumper` config in task configuration file.'" +ErrConfigLoaderCfgConflict,[code=20016:class=config:scope=internal:level=medium], "msg: 'loader-config-name and loader should only specify one', workaround: 'Please check the `loader-config-name` and `loader` config in task configuration file.'" +ErrConfigSyncerCfgConflict,[code=20017:class=config:scope=internal:level=medium], "msg: 'syncer-config-name and syncer should only specify one', workaround: 'Please check the `syncer-config-name` and `syncer` config in task configuration file.'" ErrConfigReadTaskCfgFromFile,[code=20018:class=config:scope=internal:level=medium], "msg: 'read config file %v', workaround: ''" -ErrConfigNeedUniqueTaskName,[code=20019:class=config:scope=internal:level=medium], "msg: 'must specify a unique task name', workaround: ''" -ErrConfigInvalidTaskMode,[code=20020:class=config:scope=internal:level=medium], "msg: 'please specify right task-mode, support `full`, `incremental`, `all`', workaround: ''" -ErrConfigNeedTargetDB,[code=20021:class=config:scope=internal:level=medium], "msg: 'must specify target-database', workaround: ''" -ErrConfigMetadataNotSet,[code=20022:class=config:scope=internal:level=medium], "msg: 'mysql-instance(%d) must set meta for task-mode %s', workaround: ''" -ErrConfigRouteRuleNotFound,[code=20023:class=config:scope=internal:level=medium], "msg: 'mysql-instance(%d)'s route-rules %s not exist in routes', workaround: ''" -ErrConfigFilterRuleNotFound,[code=20024:class=config:scope=internal:level=medium], "msg: 'mysql-instance(%d)'s filter-rules %s not exist in filters', workaround: ''" -ErrConfigColumnMappingNotFound,[code=20025:class=config:scope=internal:level=medium], "msg: 'mysql-instance(%d)'s column-mapping-rules %s not exist in column-mapping', workaround: ''" -ErrConfigBAListNotFound,[code=20026:class=config:scope=internal:level=medium], "msg: 'mysql-instance(%d)'s list %s not exist in block allow list', workaround: ''" -ErrConfigMydumperCfgNotFound,[code=20027:class=config:scope=internal:level=medium], "msg: 'mysql-instance(%d)'s mydumper config %s not exist in mydumpers', workaround: ''" -ErrConfigMydumperPathNotValid,[code=20028:class=config:scope=internal:level=medium], "msg: 'mysql-instance(%d)'s mydumper-path must specify a valid path to mydumper binary when task-mode is all or full', workaround: ''" -ErrConfigLoaderCfgNotFound,[code=20029:class=config:scope=internal:level=medium], "msg: 'mysql-instance(%d)'s loader config %s not exist in loaders', workaround: ''" -ErrConfigSyncerCfgNotFound,[code=20030:class=config:scope=internal:level=medium], "msg: 'mysql-instance(%d)'s syncer config %s not exist in syncer', workaround: ''" -ErrConfigSourceIDNotFound,[code=20031:class=config:scope=internal:level=medium], "msg: 'source %s in deployment configuration not found', workaround: ''" -ErrConfigDuplicateCfgItem,[code=20032:class=config:scope=internal:level=medium], "msg: 'the following mysql configs have duplicate items, please remove the duplicates:\n%s', workaround: ''" -ErrConfigShardModeNotSupport,[code=20033:class=config:scope=internal:level=medium], "msg: 'shard mode %s not supported', workaround: ''" +ErrConfigNeedUniqueTaskName,[code=20019:class=config:scope=internal:level=medium], "msg: 'must specify a unique task name', workaround: 'Please check the `name` config in task configuration file.'" +ErrConfigInvalidTaskMode,[code=20020:class=config:scope=internal:level=medium], "msg: 'please specify right task-mode, support `full`, `incremental`, `all`', workaround: 'Please check the `task-mode` config in task configuration file.'" +ErrConfigNeedTargetDB,[code=20021:class=config:scope=internal:level=medium], "msg: 'must specify target-database', workaround: 'Please check the `target-database` config in task configuration file.'" +ErrConfigMetadataNotSet,[code=20022:class=config:scope=internal:level=medium], "msg: 'mysql-instance(%d) must set meta for task-mode %s', workaround: 'Please check the `meta` config in task configuration file.'" +ErrConfigRouteRuleNotFound,[code=20023:class=config:scope=internal:level=medium], "msg: 'mysql-instance(%d)'s route-rules %s not exist in routes', workaround: 'Please check the `route-rules` config in task configuration file.'" +ErrConfigFilterRuleNotFound,[code=20024:class=config:scope=internal:level=medium], "msg: 'mysql-instance(%d)'s filter-rules %s not exist in filters', workaround: 'Please check the `filter-rules` config in task configuration file.'" +ErrConfigColumnMappingNotFound,[code=20025:class=config:scope=internal:level=medium], "msg: 'mysql-instance(%d)'s column-mapping-rules %s not exist in column-mapping', workaround: 'Please check the `column-mapping-rules` config in task configuration file.'" +ErrConfigBAListNotFound,[code=20026:class=config:scope=internal:level=medium], "msg: 'mysql-instance(%d)'s list %s not exist in block allow list', workaround: 'Please check the `block-allow-list` config in task configuration file.'" +ErrConfigMydumperCfgNotFound,[code=20027:class=config:scope=internal:level=medium], "msg: 'mysql-instance(%d)'s mydumper config %s not exist in mydumpers', workaround: 'Please check the `mydumper-config-name` config in task configuration file.'" +ErrConfigMydumperPathNotValid,[code=20028:class=config:scope=internal:level=medium], "msg: 'mysql-instance(%d)'s mydumper-path must specify a valid path to mydumper binary when task-mode is all or full', workaround: 'Please check the `mydumper-path` config in task configuration file.'" +ErrConfigLoaderCfgNotFound,[code=20029:class=config:scope=internal:level=medium], "msg: 'mysql-instance(%d)'s loader config %s not exist in loaders', workaround: 'Please check the `loader-config-name` config in task configuration file.'" +ErrConfigSyncerCfgNotFound,[code=20030:class=config:scope=internal:level=medium], "msg: 'mysql-instance(%d)'s syncer config %s not exist in syncer', workaround: 'Please check the `syncer-config-name` config in task configuration file.'" +ErrConfigSourceIDNotFound,[code=20031:class=config:scope=internal:level=medium], "msg: 'source %s in deployment configuration not found', workaround: 'Please use `operate-source create source-config-file-path` to add source.'" +ErrConfigDuplicateCfgItem,[code=20032:class=config:scope=internal:level=medium], "msg: 'the following mysql configs have duplicate items, please remove the duplicates:\n%s', workaround: 'Please check the `mysql-instances` config in task configuration file.'" +ErrConfigShardModeNotSupport,[code=20033:class=config:scope=internal:level=medium], "msg: 'shard mode %s not supported', workaround: 'Please check the `shard-mode` config in task configuration file, which can be set to `pessimistic`/`optimistic`.'" ErrBinlogExtractPosition,[code=22001:class=binlog-op:scope=internal:level=high], "msg: '', workaround: ''" ErrBinlogInvalidFilename,[code=22002:class=binlog-op:scope=internal:level=high], "msg: 'invalid binlog filename', workaround: ''" ErrBinlogParsePosFromStr,[code=22003:class=binlog-op:scope=internal:level=high], "msg: '', workaround: ''" @@ -157,35 +157,35 @@ ErrCheckpointInvalidTableFile,[code=24003:class=checkpoint:scope=internal:level= ErrCheckpointDBNotExistInFile,[code=24004:class=checkpoint:scope=internal:level=medium], "msg: 'db (%s) not exist in data files, but in checkpoint', workaround: ''" ErrCheckpointTableNotExistInFile,[code=24005:class=checkpoint:scope=internal:level=medium], "msg: 'table (%s) not exist in db (%s) data files, but in checkpoint', workaround: ''" ErrCheckpointRestoreCountGreater,[code=24006:class=checkpoint:scope=internal:level=medium], "msg: 'restoring count greater than total count for table[%v]', workaround: ''" -ErrTaskCheckSameTableName,[code=26001:class=task-check:scope=internal:level=medium], "msg: 'same table name in case-sensitive %v', workaround: ''" -ErrTaskCheckFailedOpenDB,[code=26002:class=task-check:scope=internal:level=high], "msg: 'failed to open DSN %s:***@%s:%d', workaround: ''" -ErrTaskCheckGenTableRouter,[code=26003:class=task-check:scope=internal:level=medium], "msg: 'generate table router error', workaround: ''" -ErrTaskCheckGenColumnMapping,[code=26004:class=task-check:scope=internal:level=medium], "msg: 'generate column mapping error', workaround: ''" +ErrTaskCheckSameTableName,[code=26001:class=task-check:scope=internal:level=medium], "msg: 'same table name in case-sensitive %v', workaround: 'Please check `target-table` config in task configuration file.'" +ErrTaskCheckFailedOpenDB,[code=26002:class=task-check:scope=internal:level=high], "msg: 'failed to open DSN %s:***@%s:%d', workaround: 'Please check the database config in configuration file.'" +ErrTaskCheckGenTableRouter,[code=26003:class=task-check:scope=internal:level=medium], "msg: 'generate table router error', workaround: 'Please check the `routes` config in task configuration file.'" +ErrTaskCheckGenColumnMapping,[code=26004:class=task-check:scope=internal:level=medium], "msg: 'generate column mapping error', workaround: 'Please check the `column-mappings` config in task configuration file.'" ErrTaskCheckSyncConfigError,[code=26005:class=task-check:scope=internal:level=medium], "msg: '%s: %v\n detail: %v', workaround: ''" -ErrTaskCheckGenBAList,[code=26006:class=task-check:scope=internal:level=medium], "msg: 'generate block allow list error', workaround: ''" +ErrTaskCheckGenBAList,[code=26006:class=task-check:scope=internal:level=medium], "msg: 'generate block allow list error', workaround: 'Please check the `block-allow-list` config in task configuration file.'" ErrRelayParseUUIDIndex,[code=28001:class=relay-event-lib:scope=internal:level=high], "msg: 'parse server-uuid.index', workaround: ''" ErrRelayParseUUIDSuffix,[code=28002:class=relay-event-lib:scope=internal:level=high], "msg: 'UUID (with suffix) %s not valid', workaround: ''" ErrRelayUUIDWithSuffixNotFound,[code=28003:class=relay-event-lib:scope=internal:level=high], "msg: 'no UUID (with suffix) matched %s found in %s, all UUIDs are %v', workaround: ''" ErrRelayGenFakeRotateEvent,[code=28004:class=relay-event-lib:scope=internal:level=high], "msg: 'generate fake rotate event', workaround: ''" -ErrRelayNoValidRelaySubDir,[code=28005:class=relay-event-lib:scope=internal:level=high], "msg: 'there aren't any data under relay log directory %s. please check relay log using query-status', workaround: ''" +ErrRelayNoValidRelaySubDir,[code=28005:class=relay-event-lib:scope=internal:level=high], "msg: 'there aren't any data under relay log directory %s.', workaround: 'Please check relay log using query-status.'" ErrRelayUUIDSuffixNotValid,[code=30001:class=relay-unit:scope=internal:level=high], "msg: 'UUID %s suffix %d should be 1 larger than previous suffix %d', workaround: ''" ErrRelayUUIDSuffixLessThanPrev,[code=30002:class=relay-unit:scope=internal:level=high], "msg: 'previous UUID %s has suffix larger than %s', workaround: ''" ErrRelayLoadMetaData,[code=30003:class=relay-unit:scope=internal:level=high], "msg: 'load meta data', workaround: ''" -ErrRelayBinlogNameNotValid,[code=30004:class=relay-unit:scope=internal:level=high], "msg: 'relay-binlog-name %s not valid', workaround: ''" +ErrRelayBinlogNameNotValid,[code=30004:class=relay-unit:scope=internal:level=high], "msg: 'relay-binlog-name %s not valid', workaround: 'Please check the `relay-binlog-name` config in source config file.'" ErrRelayNoCurrentUUID,[code=30005:class=relay-unit:scope=internal:level=high], "msg: 'no current UUID set', workaround: ''" ErrRelayFlushLocalMeta,[code=30006:class=relay-unit:scope=internal:level=high], "msg: 'flush local meta', workaround: ''" ErrRelayUpdateIndexFile,[code=30007:class=relay-unit:scope=internal:level=high], "msg: 'update UUID index file %s', workaround: ''" -ErrRelayLogDirpathEmpty,[code=30008:class=relay-unit:scope=internal:level=high], "msg: 'dirpath is empty', workaround: ''" +ErrRelayLogDirpathEmpty,[code=30008:class=relay-unit:scope=internal:level=high], "msg: 'dirpath is empty', workaround: 'Please check the `relay-dir` config in source config file.'" ErrRelayReaderNotStateNew,[code=30009:class=relay-unit:scope=internal:level=high], "msg: 'stage %s, expect %s, already started', workaround: ''" ErrRelayReaderStateCannotClose,[code=30010:class=relay-unit:scope=internal:level=high], "msg: 'stage %s, expect %s, can not close', workaround: ''" -ErrRelayReaderNeedStart,[code=30011:class=relay-unit:scope=internal:level=high], "msg: 'stage %s, expect %s, please start the reader first', workaround: ''" +ErrRelayReaderNeedStart,[code=30011:class=relay-unit:scope=internal:level=high], "msg: 'stage %s, expect %s', workaround: ''" ErrRelayTCPReaderStartSync,[code=30012:class=relay-unit:scope=upstream:level=high], "msg: 'start sync from position %s', workaround: ''" ErrRelayTCPReaderNilGTID,[code=30013:class=relay-unit:scope=internal:level=high], "msg: 'nil GTID set not valid', workaround: ''" ErrRelayTCPReaderStartSyncGTID,[code=30014:class=relay-unit:scope=upstream:level=high], "msg: 'start sync from GTID set %s', workaround: ''" ErrRelayTCPReaderGetEvent,[code=30015:class=relay-unit:scope=upstream:level=high], "msg: 'TCPReader get relay event with error', workaround: ''" ErrRelayWriterNotStateNew,[code=30016:class=relay-unit:scope=internal:level=high], "msg: 'stage %s, expect %s, already started', workaround: ''" ErrRelayWriterStateCannotClose,[code=30017:class=relay-unit:scope=internal:level=high], "msg: 'stage %s, expect %s, can not close', workaround: ''" -ErrRelayWriterNeedStart,[code=30018:class=relay-unit:scope=internal:level=high], "msg: 'stage %s, expect %s, please start the writer first', workaround: ''" +ErrRelayWriterNeedStart,[code=30018:class=relay-unit:scope=internal:level=high], "msg: 'stage %s, expect %s', workaround: ''" ErrRelayWriterNotOpened,[code=30019:class=relay-unit:scope=internal:level=high], "msg: 'no underlying writer opened', workaround: ''" ErrRelayWriterExpectRotateEv,[code=30020:class=relay-unit:scope=internal:level=high], "msg: 'except RotateEvent, but got %+v', workaround: ''" ErrRelayWriterRotateEvWithNoWriter,[code=30021:class=relay-unit:scope=internal:level=high], "msg: 'non-fake RotateEvent %+v received, but no binlog file opened', workaround: ''" @@ -201,10 +201,10 @@ ErrRelayUpdateGTID,[code=30030:class=relay-unit:scope=internal:level=high], "msg ErrRelayNeedPrevGTIDEvBeforeGTIDEv,[code=30031:class=relay-unit:scope=internal:level=high], "msg: 'should have a PreviousGTIDsEvent before the GTIDEvent %+v', workaround: ''" ErrRelayNeedMaGTIDListEvBeforeGTIDEv,[code=30032:class=relay-unit:scope=internal:level=high], "msg: 'should have a MariadbGTIDListEvent before the MariadbGTIDEvent %+v', workaround: ''" ErrRelayMkdir,[code=30033:class=relay-unit:scope=internal:level=high], "msg: 'relay mkdir', workaround: ''" -ErrRelaySwitchMasterNeedGTID,[code=30034:class=relay-unit:scope=internal:level=high], "msg: 'can only switch relay's master server when GTID enabled', workaround: ''" +ErrRelaySwitchMasterNeedGTID,[code=30034:class=relay-unit:scope=internal:level=high], "msg: 'can only switch relay's master server when GTID enabled', workaround: 'Please check `enable-gtid` config in source configuration file.'" ErrRelayThisStrategyIsPurging,[code=30035:class=relay-unit:scope=internal:level=high], "msg: 'this strategy is purging', workaround: ''" ErrRelayOtherStrategyIsPurging,[code=30036:class=relay-unit:scope=internal:level=high], "msg: '%s is purging', workaround: ''" -ErrRelayPurgeIsForbidden,[code=30037:class=relay-unit:scope=internal:level=high], "msg: 'relay log purge is forbidden temporarily, because %s, please try again later', workaround: ''" +ErrRelayPurgeIsForbidden,[code=30037:class=relay-unit:scope=internal:level=high], "msg: 'relay log purge is forbidden temporarily, because %s', workaround: 'Please try again later.'" ErrRelayNoActiveRelayLog,[code=30038:class=relay-unit:scope=internal:level=high], "msg: 'no active relay log file found', workaround: ''" ErrRelayPurgeRequestNotValid,[code=30039:class=relay-unit:scope=internal:level=high], "msg: 'request %+v not valid', workaround: ''" ErrRelayTrimUUIDNotFound,[code=30040:class=relay-unit:scope=internal:level=high], "msg: 'UUID %s in UUIDs %v not found', workaround: ''" @@ -212,9 +212,9 @@ ErrRelayRemoveFileFail,[code=30041:class=relay-unit:scope=internal:level=high], ErrRelayPurgeArgsNotValid,[code=30042:class=relay-unit:scope=internal:level=high], "msg: 'args (%T) %+v not valid', workaround: ''" ErrPreviousGTIDsNotValid,[code=30043:class=relay-unit:scope=internal:level=high], "msg: 'previousGTIDs %s not valid', workaround: ''" ErrDumpUnitRuntime,[code=32001:class=dump-unit:scope=internal:level=high], "msg: 'mydumper runs with error', workaround: ''" -ErrDumpUnitGenTableRouter,[code=32002:class=dump-unit:scope=internal:level=high], "msg: 'generate table router', workaround: ''" -ErrDumpUnitGenBAList,[code=32003:class=dump-unit:scope=internal:level=high], "msg: 'generate block allow list', workaround: ''" -ErrLoadUnitCreateSchemaFile,[code=34001:class=load-unit:scope=internal:level=medium], "msg: 'generate schema file', workaround: ''" +ErrDumpUnitGenTableRouter,[code=32002:class=dump-unit:scope=internal:level=high], "msg: 'generate table router', workaround: 'Please check `routes` config in task configuration file.'" +ErrDumpUnitGenBAList,[code=32003:class=dump-unit:scope=internal:level=high], "msg: 'generate block allow list', workaround: 'Please check the `block-allow-list` config in task configuration file.'" +ErrLoadUnitCreateSchemaFile,[code=34001:class=load-unit:scope=internal:level=medium], "msg: 'generate schema file', workaround: 'Please check the `loaders` config in task configuration file.'" ErrLoadUnitInvalidFileEnding,[code=34002:class=load-unit:scope=internal:level=high], "msg: 'corresponding ending of sql: ')' not found', workaround: ''" ErrLoadUnitParseQuoteValues,[code=34003:class=load-unit:scope=internal:level=high], "msg: 'parse quote values error', workaround: ''" ErrLoadUnitDoColumnMapping,[code=34004:class=load-unit:scope=internal:level=high], "msg: 'mapping row data %v for table %+v', workaround: ''" @@ -223,13 +223,13 @@ ErrLoadUnitParseStatement,[code=34006:class=load-unit:scope=internal:level=high] ErrLoadUnitNotCreateTable,[code=34007:class=load-unit:scope=internal:level=high], "msg: 'statement %s for %s/%s is not create table statement', workaround: ''" ErrLoadUnitDispatchSQLFromFile,[code=34008:class=load-unit:scope=internal:level=high], "msg: 'dispatch sql', workaround: ''" ErrLoadUnitInvalidInsertSQL,[code=34009:class=load-unit:scope=internal:level=high], "msg: 'invalid insert sql %s', workaround: ''" -ErrLoadUnitGenTableRouter,[code=34010:class=load-unit:scope=internal:level=high], "msg: 'generate table router', workaround: ''" -ErrLoadUnitGenColumnMapping,[code=34011:class=load-unit:scope=internal:level=high], "msg: 'generate column mapping', workaround: ''" +ErrLoadUnitGenTableRouter,[code=34010:class=load-unit:scope=internal:level=high], "msg: 'generate table router', workaround: 'Please check `routes` config in task configuration file.'" +ErrLoadUnitGenColumnMapping,[code=34011:class=load-unit:scope=internal:level=high], "msg: 'generate column mapping', workaround: 'Please check the `column-mapping-rules` config in task configuration file.'" ErrLoadUnitNoDBFile,[code=34012:class=load-unit:scope=internal:level=high], "msg: 'invalid data sql file, cannot find db - %s', workaround: ''" ErrLoadUnitNoTableFile,[code=34013:class=load-unit:scope=internal:level=high], "msg: 'invalid data sql file, cannot find table - %s', workaround: ''" ErrLoadUnitDumpDirNotFound,[code=34014:class=load-unit:scope=internal:level=high], "msg: '%s does not exist or it's not a dir', workaround: ''" ErrLoadUnitDuplicateTableFile,[code=34015:class=load-unit:scope=internal:level=high], "msg: 'invalid table schema file, duplicated item - %s', workaround: ''" -ErrLoadUnitGenBAList,[code=34016:class=load-unit:scope=internal:level=high], "msg: 'generate block allow list', workaround: ''" +ErrLoadUnitGenBAList,[code=34016:class=load-unit:scope=internal:level=high], "msg: 'generate block allow list', workaround: 'Please check the `block-allow-list` config in task configuration file.'" ErrSyncerUnitPanic,[code=36001:class=sync-unit:scope=internal:level=high], "msg: 'panic error: %v', workaround: ''" ErrSyncUnitInvalidTableName,[code=36002:class=sync-unit:scope=internal:level=high], "msg: 'extract table name for DML error: %s', workaround: ''" ErrSyncUnitTableNameQuery,[code=36003:class=sync-unit:scope=internal:level=high], "msg: 'table name parse error: %s', workaround: ''" @@ -237,7 +237,7 @@ ErrSyncUnitNotSupportedDML,[code=36004:class=sync-unit:scope=internal:level=high ErrSyncUnitAddTableInSharding,[code=36005:class=sync-unit:scope=internal:level=medium], "msg: 'in sequence sharding, add table, activeDDL: %s, sharding sequence: %s not supported', workaround: ''" ErrSyncUnitDropSchemaTableInSharding,[code=36006:class=sync-unit:scope=internal:level=medium], "msg: 'in sequence sharding try drop sources %v not supported, activeDDL: %s, sharding sequence: %s', workaround: ''" ErrSyncUnitInvalidShardMeta,[code=36007:class=sync-unit:scope=internal:level=high], "msg: 'invalid sharding meta data', workaround: ''" -ErrSyncUnitDDLWrongSequence,[code=36008:class=sync-unit:scope=internal:level=high], "msg: 'detect inconsistent DDL sequence from source %+v, right DDL sequence should be %+v', workaround: ''" +ErrSyncUnitDDLWrongSequence,[code=36008:class=sync-unit:scope=internal:level=high], "msg: 'detect inconsistent DDL sequence from source %+v, right DDL sequence should be %+v', workaround: 'Please use `show-ddl-locks` command for more details.'" ErrSyncUnitDDLActiveIndexLarger,[code=36009:class=sync-unit:scope=internal:level=high], "msg: 'activeIdx %d larger than length of global DDLItems: %v', workaround: ''" ErrSyncUnitDupTableGroup,[code=36010:class=sync-unit:scope=internal:level=high], "msg: 'table group %s exists', workaround: ''" ErrSyncUnitShardingGroupNotFound,[code=36011:class=sync-unit:scope=internal:level=high], "msg: 'sharding group for `%s`.`%s` not found', workaround: ''" @@ -251,7 +251,7 @@ ErrSyncerUnitUUIDNotLatest,[code=36018:class=sync-unit:scope=internal:level=high ErrSyncerUnitDDLExecChanCloseOrBusy,[code=36019:class=sync-unit:scope=internal:level=high], "msg: 'the chan has closed or already in sending', workaround: ''" ErrSyncerUnitDDLChanDone,[code=36020:class=sync-unit:scope=internal:level=high], "msg: 'canceled from external', workaround: ''" ErrSyncerUnitDDLChanCanceled,[code=36021:class=sync-unit:scope=internal:level=high], "msg: 'canceled by Close or Renew', workaround: ''" -ErrSyncerUnitDDLOnMultipleTable,[code=36022:class=sync-unit:scope=internal:level=high], "msg: 'ddl on multiple table: %s not supported', workaround: ''" +ErrSyncerUnitDDLOnMultipleTable,[code=36022:class=sync-unit:scope=internal:level=high], "msg: 'ddl on multiple table: %s not supported', workaround: 'It is recommended to include only one DDL operation in a statement executed upstream. Please manually handle it using dmctl (skipping the DDL statement or replacing the DDL statement with a specified DDL statement). For details, see https://docs.pingcap.com/tidb-data-migration/stable/skip-or-replace-abnormal-sql-statements'" ErrSyncerUnitInjectDDLOnly,[code=36023:class=sync-unit:scope=internal:level=low], "msg: 'only support inject DDL for sharding group to be synced currently, but got %s', workaround: ''" ErrSyncerUnitInjectDDLWithoutSchema,[code=36024:class=sync-unit:scope=internal:level=low], "msg: 'injected DDL %s without schema name not valid', workaround: ''" ErrSyncerUnitNotSupportedOperate,[code=36025:class=sync-unit:scope=internal:level=medium], "msg: 'op %s not supported', workaround: ''" @@ -260,16 +260,16 @@ ErrSyncerUnitDMLColumnNotMatch,[code=36027:class=sync-unit:scope=internal:level= ErrSyncerUnitDMLOldNewValueMismatch,[code=36028:class=sync-unit:scope=internal:level=high], "msg: 'Old value count doesn't match new value count: %d (old) vs %d (new)', workaround: ''" ErrSyncerUnitDMLPruneColumnMismatch,[code=36029:class=sync-unit:scope=internal:level=high], "msg: 'prune DML columns and data mismatch in length: %d (columns) %d (data)', workaround: ''" ErrSyncerUnitGenBinlogEventFilter,[code=36030:class=sync-unit:scope=internal:level=high], "msg: 'generate binlog event filter', workaround: ''" -ErrSyncerUnitGenTableRouter,[code=36031:class=sync-unit:scope=internal:level=high], "msg: 'generate table router', workaround: ''" -ErrSyncerUnitGenColumnMapping,[code=36032:class=sync-unit:scope=internal:level=high], "msg: 'generate column mapping', workaround: ''" +ErrSyncerUnitGenTableRouter,[code=36031:class=sync-unit:scope=internal:level=high], "msg: 'generate table router', workaround: 'Please check `routes` config in task configuration file.'" +ErrSyncerUnitGenColumnMapping,[code=36032:class=sync-unit:scope=internal:level=high], "msg: 'generate column mapping', workaround: 'Please check the `column-mappings` config in task configuration file.'" ErrSyncerUnitDoColumnMapping,[code=36033:class=sync-unit:scope=internal:level=high], "msg: 'mapping row data %v for table `%s`.`%s`', workaround: ''" ErrSyncerUnitCacheKeyNotFound,[code=36034:class=sync-unit:scope=internal:level=high], "msg: 'cache key %s in %s not found', workaround: ''" -ErrSyncerUnitHeartbeatCheckConfig,[code=36035:class=sync-unit:scope=internal:level=medium], "msg: '', workaround: ''" +ErrSyncerUnitHeartbeatCheckConfig,[code=36035:class=sync-unit:scope=internal:level=medium], "msg: '', workaround: 'Please check `heartbeat` config in task configuration file.'" ErrSyncerUnitHeartbeatRecordExists,[code=36036:class=sync-unit:scope=internal:level=medium], "msg: 'heartbeat slave record for task %s already exists', workaround: ''" ErrSyncerUnitHeartbeatRecordNotFound,[code=36037:class=sync-unit:scope=internal:level=medium], "msg: 'heartbeat slave record for task %s not found', workaround: ''" ErrSyncerUnitHeartbeatRecordNotValid,[code=36038:class=sync-unit:scope=internal:level=medium], "msg: 'heartbeat record %s not valid', workaround: ''" ErrSyncerUnitOnlineDDLInvalidMeta,[code=36039:class=sync-unit:scope=internal:level=high], "msg: 'online ddl meta invalid', workaround: ''" -ErrSyncerUnitOnlineDDLSchemeNotSupport,[code=36040:class=sync-unit:scope=internal:level=high], "msg: 'online ddl scheme (%s) not supported', workaround: ''" +ErrSyncerUnitOnlineDDLSchemeNotSupport,[code=36040:class=sync-unit:scope=internal:level=high], "msg: 'online ddl scheme (%s) not supported', workaround: 'Please check the `online-ddl-scheme` config in task configuration file. Only `ghost` and `pt` are currently supported.'" ErrSyncerUnitOnlineDDLOnMultipleTable,[code=36041:class=sync-unit:scope=internal:level=high], "msg: 'online ddl changes on multiple table: %s not supported', workaround: ''" ErrSyncerUnitGhostApplyEmptyTable,[code=36042:class=sync-unit:scope=internal:level=high], "msg: 'empty tables not valid', workaround: ''" ErrSyncerUnitGhostRenameTableNotValid,[code=36043:class=sync-unit:scope=internal:level=high], "msg: 'tables should contain old and new table name', workaround: ''" @@ -287,11 +287,11 @@ ErrSyncerUnitGetTableFromDB,[code=36054:class=sync-unit:scope=internal:level=hig ErrSyncerUnitFirstEndPosNotFound,[code=36055:class=sync-unit:scope=internal:level=high], "msg: 'no valid End_log_pos of the first DDL exists for sharding group with source %s', workaround: ''" ErrSyncerUnitResolveCasualityFail,[code=36056:class=sync-unit:scope=internal:level=high], "msg: 'resolve karam error %v', workaround: ''" ErrSyncerUnitReopenStreamNotSupport,[code=36057:class=sync-unit:scope=internal:level=high], "msg: 'reopen %T not supported', workaround: ''" -ErrSyncerUnitUpdateConfigInSharding,[code=36058:class=sync-unit:scope=internal:level=high], "msg: 'try update config when some tables' (%v) sharding DDL not synced not supported', workaround: ''" +ErrSyncerUnitUpdateConfigInSharding,[code=36058:class=sync-unit:scope=internal:level=high], "msg: 'try update config when some tables' (%v) sharding DDL not synced not supported', workaround: 'Please try again later.'" ErrSyncerUnitExecWithNoBlockingDDL,[code=36059:class=sync-unit:scope=internal:level=high], "msg: 'process unit not waiting for sharding DDL to sync', workaround: ''" -ErrSyncerUnitGenBAList,[code=36060:class=sync-unit:scope=internal:level=high], "msg: 'generate block allow list', workaround: ''" +ErrSyncerUnitGenBAList,[code=36060:class=sync-unit:scope=internal:level=high], "msg: 'generate block allow list', workaround: 'Please check the `block-allow-list` config in task configuration file.'" ErrSyncerUnitHandleDDLFailed,[code=36061:class=sync-unit:scope=internal:level=high], "msg: 'fail to handle ddl job for %s', workaround: ''" -ErrSyncerShardDDLConflict,[code=36062:class=sync-unit:scope=internal:level=high], "msg: 'fail to handle shard ddl %v in optimistic mode, because schema conflict detected', workaround: ''" +ErrSyncerShardDDLConflict,[code=36062:class=sync-unit:scope=internal:level=high], "msg: 'fail to handle shard ddl %v in optimistic mode, because schema conflict detected', workaround: 'Please use show-ddl-locks command for more details.'" ErrSyncerFailpoint,[code=36063:class=sync-unit:scope=internal:level=low], "msg: 'failpoint specified error', workaround: ''" ErrMasterSQLOpNilRequest,[code=38001:class=dm-master:scope=internal:level=medium], "msg: 'nil request not valid', workaround: ''" ErrMasterSQLOpNotSupport,[code=38002:class=dm-master:scope=internal:level=medium], "msg: 'op %s not supported', workaround: ''" @@ -305,47 +305,47 @@ ErrMasterDeployMapperVerify,[code=38009:class=dm-master:scope=internal:level=hig ErrMasterConfigParseFlagSet,[code=38010:class=dm-master:scope=internal:level=medium], "msg: 'parse config flag set', workaround: ''" ErrMasterConfigUnknownItem,[code=38011:class=dm-master:scope=internal:level=medium], "msg: 'master config contained unknown configuration options: %s', workaround: ''" ErrMasterConfigInvalidFlag,[code=38012:class=dm-master:scope=internal:level=medium], "msg: ''%s' is an invalid flag', workaround: ''" -ErrMasterConfigTomlTransform,[code=38013:class=dm-master:scope=internal:level=medium], "msg: 'config toml transform', workaround: ''" +ErrMasterConfigTomlTransform,[code=38013:class=dm-master:scope=internal:level=medium], "msg: 'config toml transform', workaround: 'Please check the configuration file has correct TOML format.'" ErrMasterConfigTimeoutParse,[code=38014:class=dm-master:scope=internal:level=medium], "msg: 'parse rpc timeout str', workaround: ''" ErrMasterConfigUpdateCfgFile,[code=38015:class=dm-master:scope=internal:level=high], "msg: 'update config file', workaround: ''" -ErrMasterShardingDDLDiff,[code=38016:class=dm-master:scope=internal:level=high], "msg: 'sharding ddls in ddl lock %s is different with %s', workaround: ''" +ErrMasterShardingDDLDiff,[code=38016:class=dm-master:scope=internal:level=high], "msg: 'sharding ddls in ddl lock %s is different with %s', workaround: 'Please use show-ddl-locks command for more details.'" ErrMasterStartService,[code=38017:class=dm-master:scope=internal:level=high], "msg: 'start server', workaround: ''" ErrMasterNoEmitToken,[code=38018:class=dm-master:scope=internal:level=high], "msg: 'fail to get emit opportunity for source %s', workaround: ''" -ErrMasterLockNotFound,[code=38019:class=dm-master:scope=internal:level=high], "msg: 'lock with ID %s not found', workaround: ''" +ErrMasterLockNotFound,[code=38019:class=dm-master:scope=internal:level=high], "msg: 'lock with ID %s not found', workaround: 'Please use show-ddl-locks command to see lock id.'" ErrMasterLockIsResolving,[code=38020:class=dm-master:scope=internal:level=high], "msg: 'lock %s is resolving', workaround: ''" ErrMasterWorkerCliNotFound,[code=38021:class=dm-master:scope=internal:level=high], "msg: 'worker %s relevant worker-client not found', workaround: ''" ErrMasterWorkerNotWaitLock,[code=38022:class=dm-master:scope=internal:level=high], "msg: 'worker %s not waiting for DDL lock %s', workaround: ''" ErrMasterHandleSQLReqFail,[code=38023:class=dm-master:scope=internal:level=high], "msg: 'request DDL lock %s owner %s handle SQLs request %s fail %s', workaround: ''" ErrMasterOwnerExecDDL,[code=38024:class=dm-master:scope=internal:level=high], "msg: 'owner %s ExecuteDDL fail', workaround: ''" ErrMasterPartWorkerExecDDLFail,[code=38025:class=dm-master:scope=internal:level=high], "msg: 'DDL lock %s owner ExecuteDDL successfully, so DDL lock removed. but some dm-workers ExecuteDDL fail, you should to handle dm-worker directly', workaround: ''" -ErrMasterWorkerExistDDLLock,[code=38026:class=dm-master:scope=internal:level=high], "msg: 'worker %s exist ddl lock, please unlock ddl lock first', workaround: ''" +ErrMasterWorkerExistDDLLock,[code=38026:class=dm-master:scope=internal:level=high], "msg: 'worker %s exist ddl lock', workaround: 'Please unlock ddl lock first.'" ErrMasterGetWorkerCfgExtractor,[code=38027:class=dm-master:scope=internal:level=high], "msg: '', workaround: ''" ErrMasterTaskConfigExtractor,[code=38028:class=dm-master:scope=internal:level=high], "msg: '', workaround: ''" ErrMasterWorkerArgsExtractor,[code=38029:class=dm-master:scope=internal:level=high], "msg: '', workaround: ''" ErrMasterQueryWorkerConfig,[code=38030:class=dm-master:scope=internal:level=high], "msg: '', workaround: ''" -ErrMasterOperNotFound,[code=38031:class=dm-master:scope=internal:level=high], "msg: 'operation %d of task %s on worker %s not found, please execute `query-status` to check status', workaround: ''" -ErrMasterOperRespNotSuccess,[code=38032:class=dm-master:scope=internal:level=high], "msg: 'some error occurs in dm-worker: %s', workaround: ''" -ErrMasterOperRequestTimeout,[code=38033:class=dm-master:scope=internal:level=high], "msg: 'request to dm-worker %s is timeout, but request may be successful, please execute `query-status` to check status', workaround: ''" +ErrMasterOperNotFound,[code=38031:class=dm-master:scope=internal:level=high], "msg: 'operation %d of task %s on worker %s not found', workaround: 'Please execute `query-status` to check status.'" +ErrMasterOperRespNotSuccess,[code=38032:class=dm-master:scope=internal:level=high], "msg: 'some error occurs in dm-worker: %s', workaround: 'Please execute `query-status` to check status.'" +ErrMasterOperRequestTimeout,[code=38033:class=dm-master:scope=internal:level=high], "msg: 'request to dm-worker %s is timeout, but request may be successful', workaround: 'Please execute `query-status` to check status.'" ErrMasterHandleHTTPApis,[code=38034:class=dm-master:scope=internal:level=high], "msg: 'serve http apis to grpc', workaround: ''" -ErrMasterHostPortNotValid,[code=38035:class=dm-master:scope=internal:level=high], "msg: 'host:port '%s' not valid', workaround: ''" +ErrMasterHostPortNotValid,[code=38035:class=dm-master:scope=internal:level=high], "msg: 'host:port '%s' not valid', workaround: 'Please check the `master-addr` config in master configuration file.'" ErrMasterGetHostnameFail,[code=38036:class=dm-master:scope=internal:level=high], "msg: 'get hostname fail', workaround: ''" -ErrMasterGenEmbedEtcdConfigFail,[code=38037:class=dm-master:scope=internal:level=high], "msg: 'fail to generate config item %s for embed etcd', workaround: ''" +ErrMasterGenEmbedEtcdConfigFail,[code=38037:class=dm-master:scope=internal:level=high], "msg: 'fail to generate config item %s for embed etcd', workaround: 'Please check configs in master configuration file.'" ErrMasterStartEmbedEtcdFail,[code=38038:class=dm-master:scope=internal:level=high], "msg: 'fail to start embed etcd', workaround: ''" -ErrMasterParseURLFail,[code=38039:class=dm-master:scope=internal:level=high], "msg: 'fail to parse URL %s', workaround: ''" -ErrMasterJoinEmbedEtcdFail,[code=38040:class=dm-master:scope=internal:level=high], "msg: 'fail to join embed etcd: %s', workaround: ''" +ErrMasterParseURLFail,[code=38039:class=dm-master:scope=internal:level=high], "msg: 'fail to parse URL %s', workaround: 'Please check configs in master configuration file.'" +ErrMasterJoinEmbedEtcdFail,[code=38040:class=dm-master:scope=internal:level=high], "msg: 'fail to join embed etcd: %s', workaround: 'Please check configs in master configuration file.'" ErrMasterInvalidOperateOp,[code=38041:class=dm-master:scope=internal:level=medium], "msg: 'invalid op %s on %s', workaround: ''" -ErrMasterAdvertiseAddrNotValid,[code=38042:class=dm-master:scope=internal:level=high], "msg: 'advertise address %s not valid', workaround: ''" +ErrMasterAdvertiseAddrNotValid,[code=38042:class=dm-master:scope=internal:level=high], "msg: 'advertise address %s not valid', workaround: 'Please check the `advertise-addr` config in master configuration file.'" ErrMasterRequestIsNotForwardToLeader,[code=38043:class=dm-master:scope=internal:level=high], "msg: 'master is not leader, and can't forward request to leader', workaround: ''" ErrMasterIsNotAsyncRequest,[code=38044:class=dm-master:scope=internal:level=medium], "msg: 'request %s is not an async one, needn't wait for ok', workaround: ''" ErrMasterFailToGetExpectResult,[code=38045:class=dm-master:scope=internal:level=medium], "msg: 'fail to get expected result', workaround: ''" ErrMasterPessimistNotStarted,[code=38046:class=dm-master:scope=internal:level=medium], "msg: 'the shardddl pessimist has not started', workaround: ''" ErrMasterOptimistNotStarted,[code=38047:class=dm-master:scope=internal:level=medium], "msg: 'the shardddl optimist has not started', workaround: ''" -ErrMasterMasterNameNotExist,[code=38048:class=dm-master:scope=internal:level=low], "msg: 'dm-master with name %s not exists', workaround: ''" -ErrMasterInvalidOfflineType,[code=38049:class=dm-master:scope=internal:level=low], "msg: 'offline member type %s is invalid, please use master/worker', workaround: ''" +ErrMasterMasterNameNotExist,[code=38048:class=dm-master:scope=internal:level=low], "msg: 'dm-master with name %s not exists', workaround: 'Please use list-member command to see masters.'" +ErrMasterInvalidOfflineType,[code=38049:class=dm-master:scope=internal:level=low], "msg: 'offline member type %s is invalid', workaround: 'Please use master/worker.'" ErrWorkerParseFlagSet,[code=40001:class=dm-worker:scope=internal:level=medium], "msg: 'parse dm-worker config flag set', workaround: ''" ErrWorkerInvalidFlag,[code=40002:class=dm-worker:scope=internal:level=medium], "msg: ''%s' is an invalid flag', workaround: ''" -ErrWorkerDecodeConfigFromFile,[code=40003:class=dm-worker:scope=internal:level=medium], "msg: 'toml decode file', workaround: ''" -ErrWorkerUndecodedItemFromFile,[code=40004:class=dm-worker:scope=internal:level=medium], "msg: 'worker config contains unknown configuration options: %s', workaround: ''" +ErrWorkerDecodeConfigFromFile,[code=40003:class=dm-worker:scope=internal:level=medium], "msg: 'toml decode file', workaround: 'Please check the configuration file has correct TOML format.'" +ErrWorkerUndecodedItemFromFile,[code=40004:class=dm-worker:scope=internal:level=medium], "msg: 'worker config contains unknown configuration options: %s', workaround: 'Please check configs in worker configurtion file.'" ErrWorkerNeedSourceID,[code=40005:class=dm-worker:scope=internal:level=medium], "msg: 'dm-worker should bind a non-empty source ID which represents a MySQL/MariaDB instance or a replica group. \n notice: if you use old version dm-ansible, please update to newest version.', workaround: ''" ErrWorkerTooLongSourceID,[code=40006:class=dm-worker:scope=internal:level=medium], "msg: 'the length of source ID %s is more than max allowed value %d', workaround: ''" ErrWorkerRelayBinlogName,[code=40007:class=dm-worker:scope=internal:level=medium], "msg: 'relay-binlog-name %s not valid', workaround: ''" @@ -395,7 +395,7 @@ ErrWorkerAlreadyClosed,[code=40049:class=dm-worker:scope=internal:level=high], " ErrWorkerAlreadyStart,[code=40071:class=dm-worker:scope=internal:level=high], "msg: 'worker already started', workaround: ''" ErrWorkerNotRunningStage,[code=40050:class=dm-worker:scope=internal:level=high], "msg: 'current stage is %s but not running, invalid', workaround: ''" ErrWorkerNotPausedStage,[code=40051:class=dm-worker:scope=internal:level=high], "msg: 'current stage is %s but not paused, invalid', workaround: ''" -ErrWorkerUpdateTaskStage,[code=40052:class=dm-worker:scope=internal:level=high], "msg: 'can only update task on Paused stage, but current stage is %s', workaround: ''" +ErrWorkerUpdateTaskStage,[code=40052:class=dm-worker:scope=internal:level=high], "msg: 'can only update task on Paused stage, but current stage is %s', workaround: 'Please use `pause-task` command to pause the task.'" ErrWorkerMigrateStopRelay,[code=40053:class=dm-worker:scope=internal:level=high], "msg: 'relay unit has stopped, can not be migrated', workaround: ''" ErrWorkerSubTaskNotFound,[code=40054:class=dm-worker:scope=internal:level=high], "msg: 'sub task with name %s not found', workaround: ''" ErrWorkerSubTaskExists,[code=40055:class=dm-worker:scope=internal:level=high], "msg: 'sub task %s already exists', workaround: ''" @@ -404,20 +404,20 @@ ErrWorkerRelayUnitStage,[code=40057:class=dm-worker:scope=internal:level=high], ErrWorkerNoSyncerRunning,[code=40058:class=dm-worker:scope=internal:level=high], "msg: 'there is a subtask does not run syncer', workaround: ''" ErrWorkerCannotUpdateSourceID,[code=40059:class=dm-worker:scope=internal:level=high], "msg: 'update source ID is not allowed', workaround: ''" ErrWorkerNoAvailUnits,[code=40060:class=dm-worker:scope=internal:level=high], "msg: 'subtask %s has no dm units for mode %s', workaround: ''" -ErrWorkerDDLLockInfoNotFound,[code=40061:class=dm-worker:scope=internal:level=high], "msg: 'DDLLockInfo with ID %s not found', workaround: ''" +ErrWorkerDDLLockInfoNotFound,[code=40061:class=dm-worker:scope=internal:level=high], "msg: 'DDLLockInfo with ID %s not found', workaround: 'Please use show-ddl-locks command to see lock id.'" ErrWorkerDDLLockInfoExists,[code=40062:class=dm-worker:scope=internal:level=high], "msg: 'DDLLockInfo for task %s already exists', workaround: ''" ErrWorkerCacheDDLInfoExists,[code=40063:class=dm-worker:scope=internal:level=high], "msg: 'CacheDDLInfo for task %s already exists', workaround: ''" ErrWorkerExecSkipDDLConflict,[code=40064:class=dm-worker:scope=internal:level=high], "msg: 'execDDL and skipDDL can not specify both at the same time', workaround: ''" ErrWorkerExecDDLSyncerOnly,[code=40065:class=dm-worker:scope=internal:level=high], "msg: 'only syncer support ExecuteDDL, but current unit is %s', workaround: ''" -ErrWorkerExecDDLTimeout,[code=40066:class=dm-worker:scope=internal:level=high], "msg: 'ExecuteDDL timeout (exceeding %s), try use `query-status` to query whether the DDL is still blocking', workaround: ''" +ErrWorkerExecDDLTimeout,[code=40066:class=dm-worker:scope=internal:level=high], "msg: 'ExecuteDDL timeout (exceeding %s)', workaround: 'Please try use `query-status` to query whether the DDL is still blocking.'" ErrWorkerWaitRelayCatchupTimeout,[code=40067:class=dm-worker:scope=internal:level=high], "msg: 'waiting for relay binlog pos to catch up with loader end binlog pos is timeout (exceeding %s), loader end binlog pos: %s, relay binlog pos: %s', workaround: ''" -ErrWorkerRelayIsPurging,[code=40068:class=dm-worker:scope=internal:level=high], "msg: 'relay log purger is purging, cannot start sub task %s, please try again later', workaround: ''" -ErrWorkerHostPortNotValid,[code=40069:class=dm-worker:scope=internal:level=high], "msg: 'host:port '%s' not valid', workaround: ''" +ErrWorkerRelayIsPurging,[code=40068:class=dm-worker:scope=internal:level=high], "msg: 'relay log purger is purging, cannot start sub task %s', workaround: 'Please try again later.'" +ErrWorkerHostPortNotValid,[code=40069:class=dm-worker:scope=internal:level=high], "msg: 'host:port '%s' not valid', workaround: 'Please check configs in worker configuration file.'" ErrWorkerSourceNotMatch,[code=40072:class=dm-worker:scope=internal:level=high], "msg: 'source of request does not match with source in worker', workaround: ''" ErrWorkerFailToGetSubtaskConfigFromEtcd,[code=40073:class=dm-worker:scope=internal:level=medium], "msg: 'there is no relative subtask config for task %s in etcd', workaround: ''" ErrWorkerFailToGetSourceConfigFromEtcd,[code=40074:class=dm-worker:scope=internal:level=medium], "msg: 'there is no relative source config for source %s in etcd', workaround: ''" ErrTracerParseFlagSet,[code=42001:class=dm-tracer:scope=internal:level=medium], "msg: 'parse dm-tracer config flag set', workaround: ''" -ErrTracerConfigTomlTransform,[code=42002:class=dm-tracer:scope=internal:level=medium], "msg: 'config toml transform', workaround: ''" +ErrTracerConfigTomlTransform,[code=42002:class=dm-tracer:scope=internal:level=medium], "msg: 'config toml transform', workaround: 'Please check the configuration file has correct TOML format.'" ErrTracerConfigInvalidFlag,[code=42003:class=dm-tracer:scope=internal:level=medium], "msg: ''%s' is an invalid flag', workaround: ''" ErrTracerTraceEventNotFound,[code=42004:class=dm-tracer:scope=internal:level=medium], "msg: 'trace event %s not found', workaround: ''" ErrTracerTraceIDNotProvided,[code=42005:class=dm-tracer:scope=internal:level=medium], "msg: 'trace id not provided', workaround: ''" @@ -438,7 +438,7 @@ ErrSchedulerNotStarted,[code=46001:class=scheduler:scope=internal:level=high], " ErrSchedulerStarted,[code=46002:class=scheduler:scope=internal:level=medium], "msg: 'the scheduler has already started', workaround: ''" ErrSchedulerWorkerExist,[code=46003:class=scheduler:scope=internal:level=medium], "msg: 'dm-worker with name %s already exists', workaround: ''" ErrSchedulerWorkerNotExist,[code=46004:class=scheduler:scope=internal:level=medium], "msg: 'dm-worker with name %s not exists', workaround: ''" -ErrSchedulerWorkerOnline,[code=46005:class=scheduler:scope=internal:level=medium], "msg: 'dm-worker with name %s is still online, must shut it down first', workaround: ''" +ErrSchedulerWorkerOnline,[code=46005:class=scheduler:scope=internal:level=medium], "msg: 'dm-worker with name %s is still online', workaround: 'Please shut it down first.'" ErrSchedulerWorkerInvalidTrans,[code=46006:class=scheduler:scope=internal:level=medium], "msg: 'invalid stage transformation for dm-worker %s, from %s to %s', workaround: ''" ErrSchedulerSourceCfgExist,[code=46007:class=scheduler:scope=internal:level=medium], "msg: 'source config with ID %s already exists', workaround: ''" ErrSchedulerSourceCfgNotExist,[code=46008:class=scheduler:scope=internal:level=medium], "msg: 'source config with ID %s not exists', workaround: ''" diff --git a/checker/checker.go b/checker/checker.go index fb082ee13f..550fad57b6 100644 --- a/checker/checker.go +++ b/checker/checker.go @@ -301,7 +301,7 @@ func (c *Checker) updateInstruction(result *check.Results) { switch r.Extra { case check.AutoIncrementKeyChecking: if strings.HasPrefix(r.Instruction, "please handle it by yourself") { - r.Instruction += ", read document https://pingcap.com/docs-cn/dev/reference/tools/data-migration/usage-scenarios/best-practice-dm-shard/#自增主键冲突处理 for more detail (only have Chinese document now, will translate to English later)" + r.Instruction += ", refer to https://docs.pingcap.com/tidb-data-migration/stable/shard-merge-best-practices#handle-conflicts-of-auto-increment-primary-key) for details." } } } diff --git a/errors.toml b/errors.toml index fc841bb6fc..85343d7afb 100644 --- a/errors.toml +++ b/errors.toml @@ -1,19 +1,19 @@ [error.DM-database-10001] message = "database driver error" description = "" -workaround = "" +workaround = "Please check the database connection and the database config in configuration file." tags = ["not-set", "high"] [error.DM-database-10002] message = "database driver" description = "" -workaround = "" +workaround = "Please check the database connection, then use `pause-task` to pause the task and then use `resume-task` to resume the task." tags = ["not-set", "high"] [error.DM-database-10003] message = "database driver" description = "" -workaround = "" +workaround = "Please check the database connection, then use `pause-task` to stop the task and then use `resume-task` to resume the task." tags = ["not-set", "high"] [error.DM-database-10004] @@ -49,31 +49,31 @@ tags = ["internal", "high"] [error.DM-functional-11003] message = "not allowed operation: drop multiple tables in one statement" description = "" -workaround = "" +workaround = "It is recommended to include only one DDL operation in a statement executed upstream. Please manually handle it using dmctl (skipping the DDL statement or replacing the DDL statement with a specified DDL statement). For details, see https://docs.pingcap.com/tidb-data-migration/stable/skip-or-replace-abnormal-sql-statements" tags = ["internal", "high"] [error.DM-functional-11004] message = "not allowed operation: rename multiple tables in one statement" description = "" -workaround = "" +workaround = "It is recommended to include only one DDL operation in a statement executed upstream. Please manually handle it using dmctl (skipping the DDL statement or replacing the DDL statement with a specified DDL statement). For details, see https://docs.pingcap.com/tidb-data-migration/stable/skip-or-replace-abnormal-sql-statements" tags = ["internal", "high"] [error.DM-functional-11005] message = "not allowed operation: alter multiple tables in one statement" description = "" -workaround = "" +workaround = "It is recommended to include only one DDL operation in a statement executed upstream. Please manually handle it using dmctl (skipping the DDL statement or replacing the DDL statement with a specified DDL statement). For details, see https://docs.pingcap.com/tidb-data-migration/stable/skip-or-replace-abnormal-sql-statements" tags = ["internal", "high"] [error.DM-functional-11006] message = "parse statement" description = "" -workaround = "" +workaround = "Please manually handle it using dmctl (skipping the DDL statement or replacing the DDL statement with a specified DDL statement). For details, see https://docs.pingcap.com/tidb-data-migration/stable/skip-or-replace-abnormal-sql-statements" tags = ["internal", "high"] [error.DM-functional-11007] message = "unknown type ddl %+v" description = "" -workaround = "" +workaround = "Please manually handle it using dmctl (skipping the DDL statement or replacing the DDL statement with a specified DDL statement). For details, see https://docs.pingcap.com/tidb-data-migration/stable/skip-or-replace-abnormal-sql-statements" tags = ["internal", "high"] [error.DM-functional-11008] @@ -91,7 +91,7 @@ tags = ["internal", "high"] [error.DM-functional-11010] message = "flavor %s not supported" description = "" -workaround = "" +workaround = "Please check `flavor` config in source configuration file." tags = ["internal", "high"] [error.DM-functional-11011] @@ -133,7 +133,7 @@ tags = ["internal", "high"] [error.DM-functional-11017] message = "" description = "" -workaround = "" +workaround = "Please make sure the args are correct." tags = ["internal", "low"] [error.DM-functional-11018] @@ -161,7 +161,7 @@ workaround = "" tags = ["internal", "high"] [error.DM-functional-11022] -message = "stage %s, expect %s, please start sync first" +message = "stage %s, expect %s" description = "" workaround = "" tags = ["internal", "high"] @@ -169,7 +169,7 @@ tags = ["internal", "high"] [error.DM-functional-11023] message = "empty relay dir" description = "" -workaround = "" +workaround = "Please check `relay-dir` config in task configuration file." tags = ["internal", "high"] [error.DM-functional-11024] @@ -233,9 +233,9 @@ workaround = "" tags = ["internal", "high"] [error.DM-functional-11034] -message = "file size of relay log %s become smaller, please check the status of relay log and re-pull it. If you want to re-pull it, you should open relay.meta, set the binlog-name to the error pos name, set binlog-pos to 4, delete the stashed relay log and run `resume-relay` in dmctl" +message = "file size of relay log %s become smaller" description = "" -workaround = "" +workaround = "Please check the status of relay log and re-pull it. If you want to re-pull it, you should open relay.meta, set the binlog-name to the error pos name, set binlog-pos to 4, delete the stashed relay log and run `resume-relay` in dmctl." tags = ["internal", "high"] [error.DM-functional-11035] @@ -263,7 +263,7 @@ workaround = "" tags = ["internal", "high"] [error.DM-functional-11039] -message = "parse for previous sub relay directory finished, but no next sub directory need to switch not supported" +message = "parse for previous sub relay directory finished, but no next sub directory need to switch" description = "" workaround = "" tags = ["internal", "high"] @@ -289,7 +289,7 @@ tags = ["internal", "high"] [error.DM-functional-11043] message = "generate table router" description = "" -workaround = "" +workaround = "Please check `routes` config in task configuration file." tags = ["internal", "high"] [error.DM-functional-11044] @@ -545,7 +545,7 @@ workaround = "" tags = ["internal", "high"] [error.DM-functional-11086] -message = "stage %s, expect %s, please start the writer first" +message = "stage %s, expect %s" description = "" workaround = "" tags = ["internal", "high"] @@ -667,7 +667,7 @@ tags = ["internal", "high"] [error.DM-functional-11106] message = "the given relay log pos %s of meta config is too big, please check it again" description = "" -workaround = "" +workaround = "If the size of the corresponding binlog file has exceeded 4GB, please follow the solution in https://docs.pingcap.com/tidb-data-migration/stable/error-handling#the-relay-unit-throws-error-event-from--in--diff-from-passed-in-event--or-a-replication-task-is-interrupted-with-failing-to-get-or-parse-binlog-errors-like-get-binlog-error-error-1236-hy000-and-binlog-checksum-mismatch-data-may-be-corrupted-returned" tags = ["internal", "high"] [error.DM-functional-11107] @@ -697,55 +697,55 @@ tags = ["internal", "medium"] [error.DM-functional-11111] message = "fail to try sync the optimistic shard ddl lock %s: %s" description = "" -workaround = "" +workaround = "Please use show-ddl-locks command for more details." tags = ["internal", "medium"] [error.DM-config-20001] message = "checking item %s is not supported\n%s" description = "" -workaround = "" +workaround = "Please check `ignore-checking-items` config in task configuration file, which can be set including `all`/`dump_privilege`/`replication_privilege`/`version`/`binlog_enable`/`binlog_format`/`binlog_row_image`/`table_schema`/`schema_of_shard_tables`/`auto_increment_ID`." tags = ["internal", "medium"] [error.DM-config-20002] message = "%s" description = "" -workaround = "" +workaround = "Please check the configuration file has correct TOML format." tags = ["internal", "medium"] [error.DM-config-20003] message = "%s" description = "" -workaround = "" +workaround = "Please check the configuration file has correct YAML format." tags = ["internal", "medium"] [error.DM-config-20004] message = "task name should not be empty" description = "" -workaround = "" +workaround = "Please check the `name` config in task configuration file." tags = ["internal", "medium"] [error.DM-config-20005] message = "empty source-id not valid" description = "" -workaround = "" +workaround = "Please check the `source-id` config in configuration file." tags = ["internal", "medium"] [error.DM-config-20006] message = "too long source-id not valid" description = "" -workaround = "" +workaround = "Please check the `source-id` config in configuration file. The max source id length is 32." tags = ["internal", "medium"] [error.DM-config-20007] message = "online scheme %s not supported" description = "" -workaround = "" +workaround = "Please check the `online-ddl-scheme` config in task configuration file. Only `ghost` and `pt` are currently supported." tags = ["internal", "medium"] [error.DM-config-20008] message = "invalid timezone string: %s" description = "" -workaround = "" +workaround = "Please check the `timezone` config in task configuration file." tags = ["internal", "medium"] [error.DM-config-20009] @@ -763,43 +763,43 @@ tags = ["internal", "medium"] [error.DM-config-20011] message = "binlog-name must specify" description = "" -workaround = "" +workaround = "Please check the `meta` config in task configuration file." tags = ["internal", "medium"] [error.DM-config-20012] message = "mysql instance config must specify" description = "" -workaround = "" +workaround = "Please check the `mysql-instances` config in task configuration file." tags = ["internal", "medium"] [error.DM-config-20013] message = "must specify at least one mysql-instances" description = "" -workaround = "" +workaround = "Please check the `mysql-instances` config in task configuration file." tags = ["internal", "medium"] [error.DM-config-20014] message = "mysql-instance (%d) and (%d) have same source-id (%s)" description = "" -workaround = "" +workaround = "Please check the `mysql-instances` config in task configuration file." tags = ["internal", "medium"] [error.DM-config-20015] message = "mydumper-config-name and mydumper should only specify one" description = "" -workaround = "" +workaround = "Please check the `mydumper-config-name` and `mydumper` config in task configuration file." tags = ["internal", "medium"] [error.DM-config-20016] message = "loader-config-name and loader should only specify one" description = "" -workaround = "" +workaround = "Please check the `loader-config-name` and `loader` config in task configuration file." tags = ["internal", "medium"] [error.DM-config-20017] message = "syncer-config-name and syncer should only specify one" description = "" -workaround = "" +workaround = "Please check the `syncer-config-name` and `syncer` config in task configuration file." tags = ["internal", "medium"] [error.DM-config-20018] @@ -811,91 +811,91 @@ tags = ["internal", "medium"] [error.DM-config-20019] message = "must specify a unique task name" description = "" -workaround = "" +workaround = "Please check the `name` config in task configuration file." tags = ["internal", "medium"] [error.DM-config-20020] message = "please specify right task-mode, support `full`, `incremental`, `all`" description = "" -workaround = "" +workaround = "Please check the `task-mode` config in task configuration file." tags = ["internal", "medium"] [error.DM-config-20021] message = "must specify target-database" description = "" -workaround = "" +workaround = "Please check the `target-database` config in task configuration file." tags = ["internal", "medium"] [error.DM-config-20022] message = "mysql-instance(%d) must set meta for task-mode %s" description = "" -workaround = "" +workaround = "Please check the `meta` config in task configuration file." tags = ["internal", "medium"] [error.DM-config-20023] message = "mysql-instance(%d)'s route-rules %s not exist in routes" description = "" -workaround = "" +workaround = "Please check the `route-rules` config in task configuration file." tags = ["internal", "medium"] [error.DM-config-20024] message = "mysql-instance(%d)'s filter-rules %s not exist in filters" description = "" -workaround = "" +workaround = "Please check the `filter-rules` config in task configuration file." tags = ["internal", "medium"] [error.DM-config-20025] message = "mysql-instance(%d)'s column-mapping-rules %s not exist in column-mapping" description = "" -workaround = "" +workaround = "Please check the `column-mapping-rules` config in task configuration file." tags = ["internal", "medium"] [error.DM-config-20026] message = "mysql-instance(%d)'s list %s not exist in block allow list" description = "" -workaround = "" +workaround = "Please check the `block-allow-list` config in task configuration file." tags = ["internal", "medium"] [error.DM-config-20027] message = "mysql-instance(%d)'s mydumper config %s not exist in mydumpers" description = "" -workaround = "" +workaround = "Please check the `mydumper-config-name` config in task configuration file." tags = ["internal", "medium"] [error.DM-config-20028] message = "mysql-instance(%d)'s mydumper-path must specify a valid path to mydumper binary when task-mode is all or full" description = "" -workaround = "" +workaround = "Please check the `mydumper-path` config in task configuration file." tags = ["internal", "medium"] [error.DM-config-20029] message = "mysql-instance(%d)'s loader config %s not exist in loaders" description = "" -workaround = "" +workaround = "Please check the `loader-config-name` config in task configuration file." tags = ["internal", "medium"] [error.DM-config-20030] message = "mysql-instance(%d)'s syncer config %s not exist in syncer" description = "" -workaround = "" +workaround = "Please check the `syncer-config-name` config in task configuration file." tags = ["internal", "medium"] [error.DM-config-20031] message = "source %s in deployment configuration not found" description = "" -workaround = "" +workaround = "Please use `operate-source create source-config-file-path` to add source." tags = ["internal", "medium"] [error.DM-config-20032] message = "the following mysql configs have duplicate items, please remove the duplicates:\n%s" description = "" -workaround = "" +workaround = "Please check the `mysql-instances` config in task configuration file." tags = ["internal", "medium"] [error.DM-config-20033] message = "shard mode %s not supported" description = "" -workaround = "" +workaround = "Please check the `shard-mode` config in task configuration file, which can be set to `pessimistic`/`optimistic`." tags = ["internal", "medium"] [error.DM-binlog-op-22001] @@ -955,25 +955,25 @@ tags = ["internal", "medium"] [error.DM-task-check-26001] message = "same table name in case-sensitive %v" description = "" -workaround = "" +workaround = "Please check `target-table` config in task configuration file." tags = ["internal", "medium"] [error.DM-task-check-26002] message = "failed to open DSN %s:***@%s:%d" description = "" -workaround = "" +workaround = "Please check the database config in configuration file." tags = ["internal", "high"] [error.DM-task-check-26003] message = "generate table router error" description = "" -workaround = "" +workaround = "Please check the `routes` config in task configuration file." tags = ["internal", "medium"] [error.DM-task-check-26004] message = "generate column mapping error" description = "" -workaround = "" +workaround = "Please check the `column-mappings` config in task configuration file." tags = ["internal", "medium"] [error.DM-task-check-26005] @@ -985,7 +985,7 @@ tags = ["internal", "medium"] [error.DM-task-check-26006] message = "generate block allow list error" description = "" -workaround = "" +workaround = "Please check the `block-allow-list` config in task configuration file." tags = ["internal", "medium"] [error.DM-relay-event-lib-28001] @@ -1013,9 +1013,9 @@ workaround = "" tags = ["internal", "high"] [error.DM-relay-event-lib-28005] -message = "there aren't any data under relay log directory %s. please check relay log using query-status" +message = "there aren't any data under relay log directory %s." description = "" -workaround = "" +workaround = "Please check relay log using query-status." tags = ["internal", "high"] [error.DM-relay-unit-30001] @@ -1039,7 +1039,7 @@ tags = ["internal", "high"] [error.DM-relay-unit-30004] message = "relay-binlog-name %s not valid" description = "" -workaround = "" +workaround = "Please check the `relay-binlog-name` config in source config file." tags = ["internal", "high"] [error.DM-relay-unit-30005] @@ -1063,7 +1063,7 @@ tags = ["internal", "high"] [error.DM-relay-unit-30008] message = "dirpath is empty" description = "" -workaround = "" +workaround = "Please check the `relay-dir` config in source config file." tags = ["internal", "high"] [error.DM-relay-unit-30009] @@ -1079,7 +1079,7 @@ workaround = "" tags = ["internal", "high"] [error.DM-relay-unit-30011] -message = "stage %s, expect %s, please start the reader first" +message = "stage %s, expect %s" description = "" workaround = "" tags = ["internal", "high"] @@ -1121,7 +1121,7 @@ workaround = "" tags = ["internal", "high"] [error.DM-relay-unit-30018] -message = "stage %s, expect %s, please start the writer first" +message = "stage %s, expect %s" description = "" workaround = "" tags = ["internal", "high"] @@ -1219,7 +1219,7 @@ tags = ["internal", "high"] [error.DM-relay-unit-30034] message = "can only switch relay's master server when GTID enabled" description = "" -workaround = "" +workaround = "Please check `enable-gtid` config in source configuration file." tags = ["internal", "high"] [error.DM-relay-unit-30035] @@ -1235,9 +1235,9 @@ workaround = "" tags = ["internal", "high"] [error.DM-relay-unit-30037] -message = "relay log purge is forbidden temporarily, because %s, please try again later" +message = "relay log purge is forbidden temporarily, because %s" description = "" -workaround = "" +workaround = "Please try again later." tags = ["internal", "high"] [error.DM-relay-unit-30038] @@ -1285,19 +1285,19 @@ tags = ["internal", "high"] [error.DM-dump-unit-32002] message = "generate table router" description = "" -workaround = "" +workaround = "Please check `routes` config in task configuration file." tags = ["internal", "high"] [error.DM-dump-unit-32003] message = "generate block allow list" description = "" -workaround = "" +workaround = "Please check the `block-allow-list` config in task configuration file." tags = ["internal", "high"] [error.DM-load-unit-34001] message = "generate schema file" description = "" -workaround = "" +workaround = "Please check the `loaders` config in task configuration file." tags = ["internal", "medium"] [error.DM-load-unit-34002] @@ -1351,13 +1351,13 @@ tags = ["internal", "high"] [error.DM-load-unit-34010] message = "generate table router" description = "" -workaround = "" +workaround = "Please check `routes` config in task configuration file." tags = ["internal", "high"] [error.DM-load-unit-34011] message = "generate column mapping" description = "" -workaround = "" +workaround = "Please check the `column-mapping-rules` config in task configuration file." tags = ["internal", "high"] [error.DM-load-unit-34012] @@ -1387,7 +1387,7 @@ tags = ["internal", "high"] [error.DM-load-unit-34016] message = "generate block allow list" description = "" -workaround = "" +workaround = "Please check the `block-allow-list` config in task configuration file." tags = ["internal", "high"] [error.DM-sync-unit-36001] @@ -1435,7 +1435,7 @@ tags = ["internal", "high"] [error.DM-sync-unit-36008] message = "detect inconsistent DDL sequence from source %+v, right DDL sequence should be %+v" description = "" -workaround = "" +workaround = "Please use `show-ddl-locks` command for more details." tags = ["internal", "high"] [error.DM-sync-unit-36009] @@ -1519,7 +1519,7 @@ tags = ["internal", "high"] [error.DM-sync-unit-36022] message = "ddl on multiple table: %s not supported" description = "" -workaround = "" +workaround = "It is recommended to include only one DDL operation in a statement executed upstream. Please manually handle it using dmctl (skipping the DDL statement or replacing the DDL statement with a specified DDL statement). For details, see https://docs.pingcap.com/tidb-data-migration/stable/skip-or-replace-abnormal-sql-statements" tags = ["internal", "high"] [error.DM-sync-unit-36023] @@ -1573,13 +1573,13 @@ tags = ["internal", "high"] [error.DM-sync-unit-36031] message = "generate table router" description = "" -workaround = "" +workaround = "Please check `routes` config in task configuration file." tags = ["internal", "high"] [error.DM-sync-unit-36032] message = "generate column mapping" description = "" -workaround = "" +workaround = "Please check the `column-mappings` config in task configuration file." tags = ["internal", "high"] [error.DM-sync-unit-36033] @@ -1597,7 +1597,7 @@ tags = ["internal", "high"] [error.DM-sync-unit-36035] message = "" description = "" -workaround = "" +workaround = "Please check `heartbeat` config in task configuration file." tags = ["internal", "medium"] [error.DM-sync-unit-36036] @@ -1627,7 +1627,7 @@ tags = ["internal", "high"] [error.DM-sync-unit-36040] message = "online ddl scheme (%s) not supported" description = "" -workaround = "" +workaround = "Please check the `online-ddl-scheme` config in task configuration file. Only `ghost` and `pt` are currently supported." tags = ["internal", "high"] [error.DM-sync-unit-36041] @@ -1735,7 +1735,7 @@ tags = ["internal", "high"] [error.DM-sync-unit-36058] message = "try update config when some tables' (%v) sharding DDL not synced not supported" description = "" -workaround = "" +workaround = "Please try again later." tags = ["internal", "high"] [error.DM-sync-unit-36059] @@ -1747,7 +1747,7 @@ tags = ["internal", "high"] [error.DM-sync-unit-36060] message = "generate block allow list" description = "" -workaround = "" +workaround = "Please check the `block-allow-list` config in task configuration file." tags = ["internal", "high"] [error.DM-sync-unit-36061] @@ -1759,7 +1759,7 @@ tags = ["internal", "high"] [error.DM-sync-unit-36062] message = "fail to handle shard ddl %v in optimistic mode, because schema conflict detected" description = "" -workaround = "" +workaround = "Please use show-ddl-locks command for more details." tags = ["internal", "high"] [error.DM-sync-unit-36063] @@ -1843,7 +1843,7 @@ tags = ["internal", "medium"] [error.DM-dm-master-38013] message = "config toml transform" description = "" -workaround = "" +workaround = "Please check the configuration file has correct TOML format." tags = ["internal", "medium"] [error.DM-dm-master-38014] @@ -1861,7 +1861,7 @@ tags = ["internal", "high"] [error.DM-dm-master-38016] message = "sharding ddls in ddl lock %s is different with %s" description = "" -workaround = "" +workaround = "Please use show-ddl-locks command for more details." tags = ["internal", "high"] [error.DM-dm-master-38017] @@ -1879,7 +1879,7 @@ tags = ["internal", "high"] [error.DM-dm-master-38019] message = "lock with ID %s not found" description = "" -workaround = "" +workaround = "Please use show-ddl-locks command to see lock id." tags = ["internal", "high"] [error.DM-dm-master-38020] @@ -1919,9 +1919,9 @@ workaround = "" tags = ["internal", "high"] [error.DM-dm-master-38026] -message = "worker %s exist ddl lock, please unlock ddl lock first" +message = "worker %s exist ddl lock" description = "" -workaround = "" +workaround = "Please unlock ddl lock first." tags = ["internal", "high"] [error.DM-dm-master-38027] @@ -1949,21 +1949,21 @@ workaround = "" tags = ["internal", "high"] [error.DM-dm-master-38031] -message = "operation %d of task %s on worker %s not found, please execute `query-status` to check status" +message = "operation %d of task %s on worker %s not found" description = "" -workaround = "" +workaround = "Please execute `query-status` to check status." tags = ["internal", "high"] [error.DM-dm-master-38032] message = "some error occurs in dm-worker: %s" description = "" -workaround = "" +workaround = "Please execute `query-status` to check status." tags = ["internal", "high"] [error.DM-dm-master-38033] -message = "request to dm-worker %s is timeout, but request may be successful, please execute `query-status` to check status" +message = "request to dm-worker %s is timeout, but request may be successful" description = "" -workaround = "" +workaround = "Please execute `query-status` to check status." tags = ["internal", "high"] [error.DM-dm-master-38034] @@ -1975,7 +1975,7 @@ tags = ["internal", "high"] [error.DM-dm-master-38035] message = "host:port '%s' not valid" description = "" -workaround = "" +workaround = "Please check the `master-addr` config in master configuration file." tags = ["internal", "high"] [error.DM-dm-master-38036] @@ -1987,7 +1987,7 @@ tags = ["internal", "high"] [error.DM-dm-master-38037] message = "fail to generate config item %s for embed etcd" description = "" -workaround = "" +workaround = "Please check configs in master configuration file." tags = ["internal", "high"] [error.DM-dm-master-38038] @@ -1999,13 +1999,13 @@ tags = ["internal", "high"] [error.DM-dm-master-38039] message = "fail to parse URL %s" description = "" -workaround = "" +workaround = "Please check configs in master configuration file." tags = ["internal", "high"] [error.DM-dm-master-38040] message = "fail to join embed etcd: %s" description = "" -workaround = "" +workaround = "Please check configs in master configuration file." tags = ["internal", "high"] [error.DM-dm-master-38041] @@ -2017,7 +2017,7 @@ tags = ["internal", "medium"] [error.DM-dm-master-38042] message = "advertise address %s not valid" description = "" -workaround = "" +workaround = "Please check the `advertise-addr` config in master configuration file." tags = ["internal", "high"] [error.DM-dm-master-38043] @@ -2053,13 +2053,13 @@ tags = ["internal", "medium"] [error.DM-dm-master-38048] message = "dm-master with name %s not exists" description = "" -workaround = "" +workaround = "Please use list-member command to see masters." tags = ["internal", "low"] [error.DM-dm-master-38049] -message = "offline member type %s is invalid, please use master/worker" +message = "offline member type %s is invalid" description = "" -workaround = "" +workaround = "Please use master/worker." tags = ["internal", "low"] [error.DM-dm-worker-40001] @@ -2077,13 +2077,13 @@ tags = ["internal", "medium"] [error.DM-dm-worker-40003] message = "toml decode file" description = "" -workaround = "" +workaround = "Please check the configuration file has correct TOML format." tags = ["internal", "medium"] [error.DM-dm-worker-40004] message = "worker config contains unknown configuration options: %s" description = "" -workaround = "" +workaround = "Please check configs in worker configurtion file." tags = ["internal", "medium"] [error.DM-dm-worker-40005] @@ -2371,7 +2371,7 @@ tags = ["internal", "high"] [error.DM-dm-worker-40052] message = "can only update task on Paused stage, but current stage is %s" description = "" -workaround = "" +workaround = "Please use `pause-task` command to pause the task." tags = ["internal", "high"] [error.DM-dm-worker-40053] @@ -2425,7 +2425,7 @@ tags = ["internal", "high"] [error.DM-dm-worker-40061] message = "DDLLockInfo with ID %s not found" description = "" -workaround = "" +workaround = "Please use show-ddl-locks command to see lock id." tags = ["internal", "high"] [error.DM-dm-worker-40062] @@ -2453,9 +2453,9 @@ workaround = "" tags = ["internal", "high"] [error.DM-dm-worker-40066] -message = "ExecuteDDL timeout (exceeding %s), try use `query-status` to query whether the DDL is still blocking" +message = "ExecuteDDL timeout (exceeding %s)" description = "" -workaround = "" +workaround = "Please try use `query-status` to query whether the DDL is still blocking." tags = ["internal", "high"] [error.DM-dm-worker-40067] @@ -2465,15 +2465,15 @@ workaround = "" tags = ["internal", "high"] [error.DM-dm-worker-40068] -message = "relay log purger is purging, cannot start sub task %s, please try again later" +message = "relay log purger is purging, cannot start sub task %s" description = "" -workaround = "" +workaround = "Please try again later." tags = ["internal", "high"] [error.DM-dm-worker-40069] message = "host:port '%s' not valid" description = "" -workaround = "" +workaround = "Please check configs in worker configuration file." tags = ["internal", "high"] [error.DM-dm-worker-40070] @@ -2515,7 +2515,7 @@ tags = ["internal", "medium"] [error.DM-dm-tracer-42002] message = "config toml transform" description = "" -workaround = "" +workaround = "Please check the configuration file has correct TOML format." tags = ["internal", "medium"] [error.DM-dm-tracer-42003] @@ -2639,9 +2639,9 @@ workaround = "" tags = ["internal", "medium"] [error.DM-scheduler-46005] -message = "dm-worker with name %s is still online, must shut it down first" +message = "dm-worker with name %s is still online" description = "" -workaround = "" +workaround = "Please shut it down first." tags = ["internal", "medium"] [error.DM-scheduler-46006] diff --git a/pkg/terror/error_list.go b/pkg/terror/error_list.go index c03bbbdf5b..f0e788d421 100644 --- a/pkg/terror/error_list.go +++ b/pkg/terror/error_list.go @@ -549,9 +549,9 @@ const ( // Error instances var ( // Database operation related error - ErrDBDriverError = New(codeDBDriverError, ClassDatabase, ScopeNotSet, LevelHigh, "database driver error", "") - ErrDBBadConn = New(codeDBBadConn, ClassDatabase, ScopeNotSet, LevelHigh, "database driver", "") - ErrDBInvalidConn = New(codeDBInvalidConn, ClassDatabase, ScopeNotSet, LevelHigh, "database driver", "") + ErrDBDriverError = New(codeDBDriverError, ClassDatabase, ScopeNotSet, LevelHigh, "database driver error", "Please check the database connection and the database config in configuration file.") + ErrDBBadConn = New(codeDBBadConn, ClassDatabase, ScopeNotSet, LevelHigh, "database driver", "Please check the database connection, then use `pause-task` to pause the task and then use `resume-task` to resume the task.") + ErrDBInvalidConn = New(codeDBInvalidConn, ClassDatabase, ScopeNotSet, LevelHigh, "database driver", "Please check the database connection, then use `pause-task` to stop the task and then use `resume-task` to resume the task.") ErrDBUnExpect = New(codeDBUnExpect, ClassDatabase, ScopeNotSet, LevelHigh, "unexpect database error: %s", "") ErrDBQueryFailed = New(codeDBQueryFailed, ClassDatabase, ScopeNotSet, LevelHigh, "query statement failed: %s", "") @@ -560,28 +560,28 @@ var ( // Functional error ErrParseMydumperMeta = New(codeParseMydumperMeta, ClassFunctional, ScopeInternal, LevelHigh, "parse mydumper metadata error: %s", "") ErrGetFileSize = New(codeGetFileSize, ClassFunctional, ScopeInternal, LevelHigh, "get file %s size", "") - ErrDropMultipleTables = New(codeDropMultipleTables, ClassFunctional, ScopeInternal, LevelHigh, "not allowed operation: drop multiple tables in one statement", "") - ErrRenameMultipleTables = New(codeRenameMultipleTables, ClassFunctional, ScopeInternal, LevelHigh, "not allowed operation: rename multiple tables in one statement", "") - ErrAlterMultipleTables = New(codeAlterMultipleTables, ClassFunctional, ScopeInternal, LevelHigh, "not allowed operation: alter multiple tables in one statement", "") - ErrParseSQL = New(codeParseSQL, ClassFunctional, ScopeInternal, LevelHigh, "parse statement", "") - ErrUnknownTypeDDL = New(codeUnknownTypeDDL, ClassFunctional, ScopeInternal, LevelHigh, "unknown type ddl %+v", "") + ErrDropMultipleTables = New(codeDropMultipleTables, ClassFunctional, ScopeInternal, LevelHigh, "not allowed operation: drop multiple tables in one statement", "It is recommended to include only one DDL operation in a statement executed upstream. Please manually handle it using dmctl (skipping the DDL statement or replacing the DDL statement with a specified DDL statement). For details, see https://docs.pingcap.com/tidb-data-migration/stable/skip-or-replace-abnormal-sql-statements") + ErrRenameMultipleTables = New(codeRenameMultipleTables, ClassFunctional, ScopeInternal, LevelHigh, "not allowed operation: rename multiple tables in one statement", "It is recommended to include only one DDL operation in a statement executed upstream. Please manually handle it using dmctl (skipping the DDL statement or replacing the DDL statement with a specified DDL statement). For details, see https://docs.pingcap.com/tidb-data-migration/stable/skip-or-replace-abnormal-sql-statements") + ErrAlterMultipleTables = New(codeAlterMultipleTables, ClassFunctional, ScopeInternal, LevelHigh, "not allowed operation: alter multiple tables in one statement", "It is recommended to include only one DDL operation in a statement executed upstream. Please manually handle it using dmctl (skipping the DDL statement or replacing the DDL statement with a specified DDL statement). For details, see https://docs.pingcap.com/tidb-data-migration/stable/skip-or-replace-abnormal-sql-statements") + ErrParseSQL = New(codeParseSQL, ClassFunctional, ScopeInternal, LevelHigh, "parse statement", "Please manually handle it using dmctl (skipping the DDL statement or replacing the DDL statement with a specified DDL statement). For details, see https://docs.pingcap.com/tidb-data-migration/stable/skip-or-replace-abnormal-sql-statements") + ErrUnknownTypeDDL = New(codeUnknownTypeDDL, ClassFunctional, ScopeInternal, LevelHigh, "unknown type ddl %+v", "Please manually handle it using dmctl (skipping the DDL statement or replacing the DDL statement with a specified DDL statement). For details, see https://docs.pingcap.com/tidb-data-migration/stable/skip-or-replace-abnormal-sql-statements") ErrRestoreASTNode = New(codeRestoreASTNode, ClassFunctional, ScopeInternal, LevelHigh, "restore ast node", "") ErrParseGTID = New(codeParseGTID, ClassFunctional, ScopeInternal, LevelHigh, "parse GTID %s", "") - ErrNotSupportedFlavor = New(codeNotSupportedFlavor, ClassFunctional, ScopeInternal, LevelHigh, "flavor %s not supported", "") + ErrNotSupportedFlavor = New(codeNotSupportedFlavor, ClassFunctional, ScopeInternal, LevelHigh, "flavor %s not supported", "Please check `flavor` config in source configuration file.") ErrNotMySQLGTID = New(codeNotMySQLGTID, ClassFunctional, ScopeInternal, LevelHigh, "%s is not mysql GTID set", "") ErrNotMariaDBGTID = New(codeNotMariaDBGTID, ClassFunctional, ScopeInternal, LevelHigh, "%s is not mariadb GTID set", "") ErrNotUUIDString = New(codeNotUUIDString, ClassFunctional, ScopeInternal, LevelHigh, "%v is not UUID string", "") ErrMariaDBDomainID = New(codeMariaDBDomainID, ClassFunctional, ScopeInternal, LevelHigh, "%v is not uint32", "") ErrInvalidServerID = New(codeInvalidServerID, ClassFunctional, ScopeInternal, LevelHigh, "invalid server id %s", "") ErrGetSQLModeFromStr = New(codeGetSQLModeFromStr, ClassFunctional, ScopeInternal, LevelHigh, "get sql mode from string literal %s", "") - ErrVerifySQLOperateArgs = New(codeVerifySQLOperateArgs, ClassFunctional, ScopeInternal, LevelLow, "", "") + ErrVerifySQLOperateArgs = New(codeVerifySQLOperateArgs, ClassFunctional, ScopeInternal, LevelLow, "", "Please make sure the args are correct.") ErrStatFileSize = New(codeStatFileSize, ClassFunctional, ScopeInternal, LevelHigh, "get file statfs", "") ErrReaderAlreadyRunning = New(codeReaderAlreadyRunning, ClassFunctional, ScopeInternal, LevelHigh, "binlog reader is already running", "") ErrReaderAlreadyStarted = New(codeReaderAlreadyStarted, ClassFunctional, ScopeInternal, LevelHigh, "stage %s, expect %s, already started", "") ErrReaderStateCannotClose = New(codeReaderStateCannotClose, ClassFunctional, ScopeInternal, LevelHigh, "stage %s, expect %s, can not close", "") - ErrReaderShouldStartSync = New(codeReaderShouldStartSync, ClassFunctional, ScopeInternal, LevelHigh, "stage %s, expect %s, please start sync first", "") + ErrReaderShouldStartSync = New(codeReaderShouldStartSync, ClassFunctional, ScopeInternal, LevelHigh, "stage %s, expect %s", "") // pkg/streamer - ErrEmptyRelayDir = New(codeEmptyRelayDir, ClassFunctional, ScopeInternal, LevelHigh, "empty relay dir", "") + ErrEmptyRelayDir = New(codeEmptyRelayDir, ClassFunctional, ScopeInternal, LevelHigh, "empty relay dir", "Please check `relay-dir` config in task configuration file.") ErrReadDir = New(codeReadDir, ClassFunctional, ScopeInternal, LevelHigh, "read dir: %s", "") ErrBaseFileNotFound = New(codeBaseFileNotFound, ClassFunctional, ScopeInternal, LevelHigh, "base file %s in directory %s not found", "") ErrBinFileCmpCondNotSupport = New(codeBinFileCmpCondNotSupport, ClassFunctional, ScopeInternal, LevelHigh, "cmp condition %v not supported", "") @@ -592,17 +592,17 @@ var ( ErrWatcherStart = New(codeWatcherStart, ClassFunctional, ScopeInternal, LevelHigh, "watcher starts for relay log dir %s", "") ErrWatcherChanClosed = New(codeWatcherChanClosed, ClassFunctional, ScopeInternal, LevelHigh, "watcher's %s chan for relay log dir %s closed", "") ErrWatcherChanRecvError = New(codeWatcherChanRecvError, ClassFunctional, ScopeInternal, LevelHigh, "watcher receives error, relay log dir %s", "") - ErrRelayLogFileSizeSmaller = New(codeRelayLogFileSizeSmaller, ClassFunctional, ScopeInternal, LevelHigh, "file size of relay log %s become smaller, please check the status of relay log and re-pull it. If you want to re-pull it, you should open relay.meta, set the binlog-name to the error pos name, set binlog-pos to 4, delete the stashed relay log and run `resume-relay` in dmctl", "") + ErrRelayLogFileSizeSmaller = New(codeRelayLogFileSizeSmaller, ClassFunctional, ScopeInternal, LevelHigh, "file size of relay log %s become smaller", "Please check the status of relay log and re-pull it. If you want to re-pull it, you should open relay.meta, set the binlog-name to the error pos name, set binlog-pos to 4, delete the stashed relay log and run `resume-relay` in dmctl.") ErrBinlogFileNotSpecified = New(codeBinlogFileNotSpecified, ClassFunctional, ScopeInternal, LevelHigh, "binlog file must be specified", "") ErrNoRelayLogMatchPos = New(codeNoRelayLogMatchPos, ClassFunctional, ScopeInternal, LevelHigh, "no relay log files in dir %s match pos %s", "") ErrFirstRelayLogNotMatchPos = New(codeFirstRelayLogNotMatchPos, ClassFunctional, ScopeInternal, LevelHigh, "the first relay log %s not match the start pos %v", "") ErrParserParseRelayLog = New(codeParserParseRelayLog, ClassFunctional, ScopeInternal, LevelHigh, "parse relay log file %s", "") - ErrNoSubdirToSwitch = New(codeNoSubdirToSwitch, ClassFunctional, ScopeInternal, LevelHigh, "parse for previous sub relay directory finished, but no next sub directory need to switch not supported", "") + ErrNoSubdirToSwitch = New(codeNoSubdirToSwitch, ClassFunctional, ScopeInternal, LevelHigh, "parse for previous sub relay directory finished, but no next sub directory need to switch", "") ErrNeedSyncAgain = New(codeNeedSyncAgain, ClassFunctional, ScopeInternal, LevelHigh, "Last sync error or closed, try sync and get event again", "") ErrSyncClosed = New(codeSyncClosed, ClassFunctional, ScopeInternal, LevelHigh, "Sync was closed", "") // pkg/utils ErrSchemaTableNameNotValid = New(codeSchemaTableNameNotValid, ClassFunctional, ScopeInternal, LevelHigh, "table name %s not valid", "") - ErrGenTableRouter = New(codeGenTableRouter, ClassFunctional, ScopeInternal, LevelHigh, "generate table router", "") + ErrGenTableRouter = New(codeGenTableRouter, ClassFunctional, ScopeInternal, LevelHigh, "generate table router", "Please check `routes` config in task configuration file.") ErrEncryptSecretKeyNotValid = New(codeEncryptSecretKeyNotValid, ClassFunctional, ScopeInternal, LevelHigh, "key size should be 16, 24 or 32, but input key's size is %d", "") ErrEncryptGenCipher = New(codeEncryptGenCipher, ClassFunctional, ScopeInternal, LevelHigh, "generate cipher", "") ErrEncryptGenIV = New(codeEncryptGenIV, ClassFunctional, ScopeInternal, LevelHigh, "generate iv", "") @@ -646,7 +646,7 @@ var ( ErrBinlogReadFileByGTID = New(codeBinlogReadFileByGTID, ClassFunctional, ScopeInternal, LevelHigh, "read from file by GTID not supported", "") ErrBinlogWriterNotStateNew = New(codeBinlogWriterNotStateNew, ClassFunctional, ScopeInternal, LevelHigh, "stage %s, expect %s, already started", "") ErrBinlogWriterStateCannotClose = New(codeBinlogWriterStateCannotClose, ClassFunctional, ScopeInternal, LevelHigh, "stage %s, expect %s, can not close", "") - ErrBinlogWriterNeedStart = New(codeBinlogWriterNeedStart, ClassFunctional, ScopeInternal, LevelHigh, "stage %s, expect %s, please start the writer first", "") + ErrBinlogWriterNeedStart = New(codeBinlogWriterNeedStart, ClassFunctional, ScopeInternal, LevelHigh, "stage %s, expect %s", "") ErrBinlogWriterOpenFile = New(codeBinlogWriterOpenFile, ClassFunctional, ScopeInternal, LevelHigh, "open file", "") ErrBinlogWriterGetFileStat = New(codeBinlogWriterGetFileStat, ClassFunctional, ScopeInternal, LevelHigh, "get stat for %s", "") ErrBinlogWriterWriteDataLen = New(codeBinlogWriterWriteDataLen, ClassFunctional, ScopeInternal, LevelHigh, "data length %d", "") @@ -672,7 +672,7 @@ var ( // pkg/gtid ErrGTIDTruncateInvalid = New(codeGTIDTruncateInvalid, ClassFunctional, ScopeInternal, LevelHigh, "truncate GTID sets %v to %v not valid", "") // pkg/streamer - ErrRelayLogGivenPosTooBig = New(codeRelayLogGivenPosTooBig, ClassFunctional, ScopeInternal, LevelHigh, "the given relay log pos %s of meta config is too big, please check it again", "") + ErrRelayLogGivenPosTooBig = New(codeRelayLogGivenPosTooBig, ClassFunctional, ScopeInternal, LevelHigh, "the given relay log pos %s of meta config is too big, please check it again", "If the size of the corresponding binlog file has exceeded 4GB, please follow the solution in https://docs.pingcap.com/tidb-data-migration/stable/error-handling#the-relay-unit-throws-error-event-from--in--diff-from-passed-in-event--or-a-replication-task-is-interrupted-with-failing-to-get-or-parse-binlog-errors-like-get-binlog-error-error-1236-hy000-and-binlog-checksum-mismatch-data-may-be-corrupted-returned") // pkg/election ErrElectionCampaignFail = New(codeElectionCampaignFail, ClassFunctional, ScopeInternal, LevelHigh, "fail to campaign leader: %s", "") ErrElectionGetLeaderIDFail = New(codeElectionGetLeaderIDFail, ClassFunctional, ScopeInternal, LevelMedium, "fail to get leader ID", "") @@ -684,42 +684,42 @@ var ( ErrDecodeEtcdKeyFail = New(codeDecodeEtcdKeyFail, ClassFunctional, ScopeInternal, LevelMedium, "fail to decode etcd key: %s", "") // pkg/shardddl/optimism - ErrShardDDLOptimismTrySyncFail = New(codeShardDDLOptimismTrySyncFail, ClassFunctional, ScopeInternal, LevelMedium, "fail to try sync the optimistic shard ddl lock %s: %s", "") + ErrShardDDLOptimismTrySyncFail = New(codeShardDDLOptimismTrySyncFail, ClassFunctional, ScopeInternal, LevelMedium, "fail to try sync the optimistic shard ddl lock %s: %s", "Please use show-ddl-locks command for more details.") // Config related error - ErrConfigCheckItemNotSupport = New(codeConfigCheckItemNotSupport, ClassConfig, ScopeInternal, LevelMedium, "checking item %s is not supported\n%s", "") - ErrConfigTomlTransform = New(codeConfigTomlTransform, ClassConfig, ScopeInternal, LevelMedium, "%s", "") - ErrConfigTaskYamlTransform = New(codeConfigTaskYamlTransform, ClassConfig, ScopeInternal, LevelMedium, "%s", "") - ErrConfigTaskNameEmpty = New(codeConfigTaskNameEmpty, ClassConfig, ScopeInternal, LevelMedium, "task name should not be empty", "") - ErrConfigEmptySourceID = New(codeConfigEmptySourceID, ClassConfig, ScopeInternal, LevelMedium, "empty source-id not valid", "") - ErrConfigTooLongSourceID = New(codeConfigTooLongSourceID, ClassConfig, ScopeInternal, LevelMedium, "too long source-id not valid", "") - ErrConfigOnlineSchemeNotSupport = New(codeConfigOnlineSchemeNotSupport, ClassConfig, ScopeInternal, LevelMedium, "online scheme %s not supported", "") - ErrConfigInvalidTimezone = New(codeConfigInvalidTimezone, ClassConfig, ScopeInternal, LevelMedium, "invalid timezone string: %s", "") + ErrConfigCheckItemNotSupport = New(codeConfigCheckItemNotSupport, ClassConfig, ScopeInternal, LevelMedium, "checking item %s is not supported\n%s", "Please check `ignore-checking-items` config in task configuration file, which can be set including `all`/`dump_privilege`/`replication_privilege`/`version`/`binlog_enable`/`binlog_format`/`binlog_row_image`/`table_schema`/`schema_of_shard_tables`/`auto_increment_ID`.") + ErrConfigTomlTransform = New(codeConfigTomlTransform, ClassConfig, ScopeInternal, LevelMedium, "%s", "Please check the configuration file has correct TOML format.") + ErrConfigTaskYamlTransform = New(codeConfigTaskYamlTransform, ClassConfig, ScopeInternal, LevelMedium, "%s", "Please check the configuration file has correct YAML format.") + ErrConfigTaskNameEmpty = New(codeConfigTaskNameEmpty, ClassConfig, ScopeInternal, LevelMedium, "task name should not be empty", "Please check the `name` config in task configuration file.") + ErrConfigEmptySourceID = New(codeConfigEmptySourceID, ClassConfig, ScopeInternal, LevelMedium, "empty source-id not valid", "Please check the `source-id` config in configuration file.") + ErrConfigTooLongSourceID = New(codeConfigTooLongSourceID, ClassConfig, ScopeInternal, LevelMedium, "too long source-id not valid", "Please check the `source-id` config in configuration file. The max source id length is 32.") + ErrConfigOnlineSchemeNotSupport = New(codeConfigOnlineSchemeNotSupport, ClassConfig, ScopeInternal, LevelMedium, "online scheme %s not supported", "Please check the `online-ddl-scheme` config in task configuration file. Only `ghost` and `pt` are currently supported.") + ErrConfigInvalidTimezone = New(codeConfigInvalidTimezone, ClassConfig, ScopeInternal, LevelMedium, "invalid timezone string: %s", "Please check the `timezone` config in task configuration file.") ErrConfigParseFlagSet = New(codeConfigParseFlagSet, ClassConfig, ScopeInternal, LevelMedium, "parse subtask config flag set", "") ErrConfigDecryptDBPassword = New(codeConfigDecryptDBPassword, ClassConfig, ScopeInternal, LevelMedium, "decrypt DB password %s failed", "") - ErrConfigMetaNoBinlogName = New(codeConfigMetaNoBinlogName, ClassConfig, ScopeInternal, LevelMedium, "binlog-name must specify", "") - ErrConfigMySQLInstNotFound = New(codeConfigMySQLInstNotFound, ClassConfig, ScopeInternal, LevelMedium, "mysql instance config must specify", "") - ErrConfigMySQLInstsAtLeastOne = New(codeConfigMySQLInstsAtLeastOne, ClassConfig, ScopeInternal, LevelMedium, "must specify at least one mysql-instances", "") - ErrConfigMySQLInstSameSourceID = New(codeConfigMySQLInstSameSourceID, ClassConfig, ScopeInternal, LevelMedium, "mysql-instance (%d) and (%d) have same source-id (%s)", "") - ErrConfigMydumperCfgConflict = New(codeConfigMydumperCfgConflict, ClassConfig, ScopeInternal, LevelMedium, "mydumper-config-name and mydumper should only specify one", "") - ErrConfigLoaderCfgConflict = New(codeConfigLoaderCfgConflict, ClassConfig, ScopeInternal, LevelMedium, "loader-config-name and loader should only specify one", "") - ErrConfigSyncerCfgConflict = New(codeConfigSyncerCfgConflict, ClassConfig, ScopeInternal, LevelMedium, "syncer-config-name and syncer should only specify one", "") + ErrConfigMetaNoBinlogName = New(codeConfigMetaNoBinlogName, ClassConfig, ScopeInternal, LevelMedium, "binlog-name must specify", "Please check the `meta` config in task configuration file.") + ErrConfigMySQLInstNotFound = New(codeConfigMySQLInstNotFound, ClassConfig, ScopeInternal, LevelMedium, "mysql instance config must specify", "Please check the `mysql-instances` config in task configuration file.") + ErrConfigMySQLInstsAtLeastOne = New(codeConfigMySQLInstsAtLeastOne, ClassConfig, ScopeInternal, LevelMedium, "must specify at least one mysql-instances", "Please check the `mysql-instances` config in task configuration file.") + ErrConfigMySQLInstSameSourceID = New(codeConfigMySQLInstSameSourceID, ClassConfig, ScopeInternal, LevelMedium, "mysql-instance (%d) and (%d) have same source-id (%s)", "Please check the `mysql-instances` config in task configuration file.") + ErrConfigMydumperCfgConflict = New(codeConfigMydumperCfgConflict, ClassConfig, ScopeInternal, LevelMedium, "mydumper-config-name and mydumper should only specify one", "Please check the `mydumper-config-name` and `mydumper` config in task configuration file.") + ErrConfigLoaderCfgConflict = New(codeConfigLoaderCfgConflict, ClassConfig, ScopeInternal, LevelMedium, "loader-config-name and loader should only specify one", "Please check the `loader-config-name` and `loader` config in task configuration file.") + ErrConfigSyncerCfgConflict = New(codeConfigSyncerCfgConflict, ClassConfig, ScopeInternal, LevelMedium, "syncer-config-name and syncer should only specify one", "Please check the `syncer-config-name` and `syncer` config in task configuration file.") ErrConfigReadTaskCfgFromFile = New(codeConfigReadTaskCfgFromFile, ClassConfig, ScopeInternal, LevelMedium, "read config file %v", "") - ErrConfigNeedUniqueTaskName = New(codeConfigNeedUniqueTaskName, ClassConfig, ScopeInternal, LevelMedium, "must specify a unique task name", "") - ErrConfigInvalidTaskMode = New(codeConfigInvalidTaskMode, ClassConfig, ScopeInternal, LevelMedium, "please specify right task-mode, support `full`, `incremental`, `all`", "") - ErrConfigNeedTargetDB = New(codeConfigNeedTargetDB, ClassConfig, ScopeInternal, LevelMedium, "must specify target-database", "") - ErrConfigMetadataNotSet = New(codeConfigMetadataNotSet, ClassConfig, ScopeInternal, LevelMedium, "mysql-instance(%d) must set meta for task-mode %s", "") - ErrConfigRouteRuleNotFound = New(codeConfigRouteRuleNotFound, ClassConfig, ScopeInternal, LevelMedium, "mysql-instance(%d)'s route-rules %s not exist in routes", "") - ErrConfigFilterRuleNotFound = New(codeConfigFilterRuleNotFound, ClassConfig, ScopeInternal, LevelMedium, "mysql-instance(%d)'s filter-rules %s not exist in filters", "") - ErrConfigColumnMappingNotFound = New(codeConfigColumnMappingNotFound, ClassConfig, ScopeInternal, LevelMedium, "mysql-instance(%d)'s column-mapping-rules %s not exist in column-mapping", "") - ErrConfigBAListNotFound = New(codeConfigBAListNotFound, ClassConfig, ScopeInternal, LevelMedium, "mysql-instance(%d)'s list %s not exist in block allow list", "") - ErrConfigMydumperCfgNotFound = New(codeConfigMydumperCfgNotFound, ClassConfig, ScopeInternal, LevelMedium, "mysql-instance(%d)'s mydumper config %s not exist in mydumpers", "") - ErrConfigMydumperPathNotValid = New(codeConfigMydumperPathNotValid, ClassConfig, ScopeInternal, LevelMedium, "mysql-instance(%d)'s mydumper-path must specify a valid path to mydumper binary when task-mode is all or full", "") - ErrConfigLoaderCfgNotFound = New(codeConfigLoaderCfgNotFound, ClassConfig, ScopeInternal, LevelMedium, "mysql-instance(%d)'s loader config %s not exist in loaders", "") - ErrConfigSyncerCfgNotFound = New(codeConfigSyncerCfgNotFound, ClassConfig, ScopeInternal, LevelMedium, "mysql-instance(%d)'s syncer config %s not exist in syncer", "") - ErrConfigSourceIDNotFound = New(codeConfigSourceIDNotFound, ClassConfig, ScopeInternal, LevelMedium, "source %s in deployment configuration not found", "") - ErrConfigDuplicateCfgItem = New(codeConfigDuplicateCfgItem, ClassConfig, ScopeInternal, LevelMedium, "the following mysql configs have duplicate items, please remove the duplicates:\n%s", "") - ErrConfigShardModeNotSupport = New(codeConfigShardModeNotSupport, ClassConfig, ScopeInternal, LevelMedium, "shard mode %s not supported", "") + ErrConfigNeedUniqueTaskName = New(codeConfigNeedUniqueTaskName, ClassConfig, ScopeInternal, LevelMedium, "must specify a unique task name", "Please check the `name` config in task configuration file.") + ErrConfigInvalidTaskMode = New(codeConfigInvalidTaskMode, ClassConfig, ScopeInternal, LevelMedium, "please specify right task-mode, support `full`, `incremental`, `all`", "Please check the `task-mode` config in task configuration file.") + ErrConfigNeedTargetDB = New(codeConfigNeedTargetDB, ClassConfig, ScopeInternal, LevelMedium, "must specify target-database", "Please check the `target-database` config in task configuration file.") + ErrConfigMetadataNotSet = New(codeConfigMetadataNotSet, ClassConfig, ScopeInternal, LevelMedium, "mysql-instance(%d) must set meta for task-mode %s", "Please check the `meta` config in task configuration file.") + ErrConfigRouteRuleNotFound = New(codeConfigRouteRuleNotFound, ClassConfig, ScopeInternal, LevelMedium, "mysql-instance(%d)'s route-rules %s not exist in routes", "Please check the `route-rules` config in task configuration file.") + ErrConfigFilterRuleNotFound = New(codeConfigFilterRuleNotFound, ClassConfig, ScopeInternal, LevelMedium, "mysql-instance(%d)'s filter-rules %s not exist in filters", "Please check the `filter-rules` config in task configuration file.") + ErrConfigColumnMappingNotFound = New(codeConfigColumnMappingNotFound, ClassConfig, ScopeInternal, LevelMedium, "mysql-instance(%d)'s column-mapping-rules %s not exist in column-mapping", "Please check the `column-mapping-rules` config in task configuration file.") + ErrConfigBAListNotFound = New(codeConfigBAListNotFound, ClassConfig, ScopeInternal, LevelMedium, "mysql-instance(%d)'s list %s not exist in block allow list", "Please check the `block-allow-list` config in task configuration file.") + ErrConfigMydumperCfgNotFound = New(codeConfigMydumperCfgNotFound, ClassConfig, ScopeInternal, LevelMedium, "mysql-instance(%d)'s mydumper config %s not exist in mydumpers", "Please check the `mydumper-config-name` config in task configuration file.") + ErrConfigMydumperPathNotValid = New(codeConfigMydumperPathNotValid, ClassConfig, ScopeInternal, LevelMedium, "mysql-instance(%d)'s mydumper-path must specify a valid path to mydumper binary when task-mode is all or full", "Please check the `mydumper-path` config in task configuration file.") + ErrConfigLoaderCfgNotFound = New(codeConfigLoaderCfgNotFound, ClassConfig, ScopeInternal, LevelMedium, "mysql-instance(%d)'s loader config %s not exist in loaders", "Please check the `loader-config-name` config in task configuration file.") + ErrConfigSyncerCfgNotFound = New(codeConfigSyncerCfgNotFound, ClassConfig, ScopeInternal, LevelMedium, "mysql-instance(%d)'s syncer config %s not exist in syncer", "Please check the `syncer-config-name` config in task configuration file.") + ErrConfigSourceIDNotFound = New(codeConfigSourceIDNotFound, ClassConfig, ScopeInternal, LevelMedium, "source %s in deployment configuration not found", "Please use `operate-source create source-config-file-path` to add source.") + ErrConfigDuplicateCfgItem = New(codeConfigDuplicateCfgItem, ClassConfig, ScopeInternal, LevelMedium, "the following mysql configs have duplicate items, please remove the duplicates:\n%s", "Please check the `mysql-instances` config in task configuration file.") + ErrConfigShardModeNotSupport = New(codeConfigShardModeNotSupport, ClassConfig, ScopeInternal, LevelMedium, "shard mode %s not supported", "Please check the `shard-mode` config in task configuration file, which can be set to `pessimistic`/`optimistic`.") // Binlog operation error ErrBinlogExtractPosition = New(codeBinlogExtractPosition, ClassBinlogOp, ScopeInternal, LevelHigh, "", "") @@ -735,39 +735,39 @@ var ( ErrCheckpointRestoreCountGreater = New(codeCheckpointRestoreCountGreater, ClassCheckpoint, ScopeInternal, LevelMedium, "restoring count greater than total count for table[%v]", "") // Task check error - ErrTaskCheckSameTableName = New(codeTaskCheckSameTableName, ClassTaskCheck, ScopeInternal, LevelMedium, "same table name in case-sensitive %v", "") - ErrTaskCheckFailedOpenDB = New(codeTaskCheckFailedOpenDB, ClassTaskCheck, ScopeInternal, LevelHigh, "failed to open DSN %s:***@%s:%d", "") - ErrTaskCheckGenTableRouter = New(codeTaskCheckGenTableRouter, ClassTaskCheck, ScopeInternal, LevelMedium, "generate table router error", "") - ErrTaskCheckGenColumnMapping = New(codeTaskCheckGenColumnMapping, ClassTaskCheck, ScopeInternal, LevelMedium, "generate column mapping error", "") + ErrTaskCheckSameTableName = New(codeTaskCheckSameTableName, ClassTaskCheck, ScopeInternal, LevelMedium, "same table name in case-sensitive %v", "Please check `target-table` config in task configuration file.") + ErrTaskCheckFailedOpenDB = New(codeTaskCheckFailedOpenDB, ClassTaskCheck, ScopeInternal, LevelHigh, "failed to open DSN %s:***@%s:%d", "Please check the database config in configuration file.") + ErrTaskCheckGenTableRouter = New(codeTaskCheckGenTableRouter, ClassTaskCheck, ScopeInternal, LevelMedium, "generate table router error", "Please check the `routes` config in task configuration file.") + ErrTaskCheckGenColumnMapping = New(codeTaskCheckGenColumnMapping, ClassTaskCheck, ScopeInternal, LevelMedium, "generate column mapping error", "Please check the `column-mappings` config in task configuration file.") ErrTaskCheckSyncConfigError = New(codeTaskCheckSyncConfigError, ClassTaskCheck, ScopeInternal, LevelMedium, "%s: %v\n detail: %v", "") - ErrTaskCheckGenBAList = New(codeTaskCheckGenBAList, ClassTaskCheck, ScopeInternal, LevelMedium, "generate block allow list error", "") + ErrTaskCheckGenBAList = New(codeTaskCheckGenBAList, ClassTaskCheck, ScopeInternal, LevelMedium, "generate block allow list error", "Please check the `block-allow-list` config in task configuration file.") // Relay log basic API error ErrRelayParseUUIDIndex = New(codeRelayParseUUIDIndex, ClassRelayEventLib, ScopeInternal, LevelHigh, "parse server-uuid.index", "") ErrRelayParseUUIDSuffix = New(codeRelayParseUUIDSuffix, ClassRelayEventLib, ScopeInternal, LevelHigh, "UUID (with suffix) %s not valid", "") ErrRelayUUIDWithSuffixNotFound = New(codeRelayUUIDWithSuffixNotFound, ClassRelayEventLib, ScopeInternal, LevelHigh, "no UUID (with suffix) matched %s found in %s, all UUIDs are %v", "") ErrRelayGenFakeRotateEvent = New(codeRelayGenFakeRotateEvent, ClassRelayEventLib, ScopeInternal, LevelHigh, "generate fake rotate event", "") - ErrRelayNoValidRelaySubDir = New(codeRelayNoValidRelaySubDir, ClassRelayEventLib, ScopeInternal, LevelHigh, "there aren't any data under relay log directory %s. please check relay log using query-status", "") + ErrRelayNoValidRelaySubDir = New(codeRelayNoValidRelaySubDir, ClassRelayEventLib, ScopeInternal, LevelHigh, "there aren't any data under relay log directory %s.", "Please check relay log using query-status.") // Relay unit error ErrRelayUUIDSuffixNotValid = New(codeRelayUUIDSuffixNotValid, ClassRelayUnit, ScopeInternal, LevelHigh, "UUID %s suffix %d should be 1 larger than previous suffix %d", "") ErrRelayUUIDSuffixLessThanPrev = New(codeRelayUUIDSuffixLessThanPrev, ClassRelayUnit, ScopeInternal, LevelHigh, "previous UUID %s has suffix larger than %s", "") ErrRelayLoadMetaData = New(codeRelayLoadMetaData, ClassRelayUnit, ScopeInternal, LevelHigh, "load meta data", "") - ErrRelayBinlogNameNotValid = New(codeRelayBinlogNameNotValid, ClassRelayUnit, ScopeInternal, LevelHigh, "relay-binlog-name %s not valid", "") + ErrRelayBinlogNameNotValid = New(codeRelayBinlogNameNotValid, ClassRelayUnit, ScopeInternal, LevelHigh, "relay-binlog-name %s not valid", "Please check the `relay-binlog-name` config in source config file.") ErrRelayNoCurrentUUID = New(codeRelayNoCurrentUUID, ClassRelayUnit, ScopeInternal, LevelHigh, "no current UUID set", "") ErrRelayFlushLocalMeta = New(codeRelayFlushLocalMeta, ClassRelayUnit, ScopeInternal, LevelHigh, "flush local meta", "") ErrRelayUpdateIndexFile = New(codeRelayUpdateIndexFile, ClassRelayUnit, ScopeInternal, LevelHigh, "update UUID index file %s", "") - ErrRelayLogDirpathEmpty = New(codeRelayLogDirpathEmpty, ClassRelayUnit, ScopeInternal, LevelHigh, "dirpath is empty", "") + ErrRelayLogDirpathEmpty = New(codeRelayLogDirpathEmpty, ClassRelayUnit, ScopeInternal, LevelHigh, "dirpath is empty", "Please check the `relay-dir` config in source config file.") ErrRelayReaderNotStateNew = New(codeRelayReaderNotStateNew, ClassRelayUnit, ScopeInternal, LevelHigh, "stage %s, expect %s, already started", "") ErrRelayReaderStateCannotClose = New(codeRelayReaderStateCannotClose, ClassRelayUnit, ScopeInternal, LevelHigh, "stage %s, expect %s, can not close", "") - ErrRelayReaderNeedStart = New(codeRelayReaderNeedStart, ClassRelayUnit, ScopeInternal, LevelHigh, "stage %s, expect %s, please start the reader first", "") + ErrRelayReaderNeedStart = New(codeRelayReaderNeedStart, ClassRelayUnit, ScopeInternal, LevelHigh, "stage %s, expect %s", "") ErrRelayTCPReaderStartSync = New(codeRelayTCPReaderStartSync, ClassRelayUnit, ScopeUpstream, LevelHigh, "start sync from position %s", "") ErrRelayTCPReaderNilGTID = New(codeRelayTCPReaderNilGTID, ClassRelayUnit, ScopeInternal, LevelHigh, "nil GTID set not valid", "") ErrRelayTCPReaderStartSyncGTID = New(codeRelayTCPReaderStartSyncGTID, ClassRelayUnit, ScopeUpstream, LevelHigh, "start sync from GTID set %s", "") ErrRelayTCPReaderGetEvent = New(codeRelayTCPReaderGetEvent, ClassRelayUnit, ScopeUpstream, LevelHigh, "TCPReader get relay event with error", "") ErrRelayWriterNotStateNew = New(codeRelayWriterNotStateNew, ClassRelayUnit, ScopeInternal, LevelHigh, "stage %s, expect %s, already started", "") ErrRelayWriterStateCannotClose = New(codeRelayWriterStateCannotClose, ClassRelayUnit, ScopeInternal, LevelHigh, "stage %s, expect %s, can not close", "") - ErrRelayWriterNeedStart = New(codeRelayWriterNeedStart, ClassRelayUnit, ScopeInternal, LevelHigh, "stage %s, expect %s, please start the writer first", "") + ErrRelayWriterNeedStart = New(codeRelayWriterNeedStart, ClassRelayUnit, ScopeInternal, LevelHigh, "stage %s, expect %s", "") ErrRelayWriterNotOpened = New(codeRelayWriterNotOpened, ClassRelayUnit, ScopeInternal, LevelHigh, "no underlying writer opened", "") ErrRelayWriterExpectRotateEv = New(codeRelayWriterExpectRotateEv, ClassRelayUnit, ScopeInternal, LevelHigh, "except RotateEvent, but got %+v", "") ErrRelayWriterRotateEvWithNoWriter = New(codeRelayWriterRotateEvWithNoWriter, ClassRelayUnit, ScopeInternal, LevelHigh, "non-fake RotateEvent %+v received, but no binlog file opened", "") @@ -783,10 +783,10 @@ var ( ErrRelayNeedPrevGTIDEvBeforeGTIDEv = New(codeRelayNeedPrevGTIDEvBeforeGTIDEv, ClassRelayUnit, ScopeInternal, LevelHigh, "should have a PreviousGTIDsEvent before the GTIDEvent %+v", "") ErrRelayNeedMaGTIDListEvBeforeGTIDEv = New(codeRelayNeedMaGTIDListEvBeforeGTIDEv, ClassRelayUnit, ScopeInternal, LevelHigh, "should have a MariadbGTIDListEvent before the MariadbGTIDEvent %+v", "") ErrRelayMkdir = New(codeRelayMkdir, ClassRelayUnit, ScopeInternal, LevelHigh, "relay mkdir", "") - ErrRelaySwitchMasterNeedGTID = New(codeRelaySwitchMasterNeedGTID, ClassRelayUnit, ScopeInternal, LevelHigh, "can only switch relay's master server when GTID enabled", "") + ErrRelaySwitchMasterNeedGTID = New(codeRelaySwitchMasterNeedGTID, ClassRelayUnit, ScopeInternal, LevelHigh, "can only switch relay's master server when GTID enabled", "Please check `enable-gtid` config in source configuration file.") ErrRelayThisStrategyIsPurging = New(codeRelayThisStrategyIsPurging, ClassRelayUnit, ScopeInternal, LevelHigh, "this strategy is purging", "") ErrRelayOtherStrategyIsPurging = New(codeRelayOtherStrategyIsPurging, ClassRelayUnit, ScopeInternal, LevelHigh, "%s is purging", "") - ErrRelayPurgeIsForbidden = New(codeRelayPurgeIsForbidden, ClassRelayUnit, ScopeInternal, LevelHigh, "relay log purge is forbidden temporarily, because %s, please try again later", "") + ErrRelayPurgeIsForbidden = New(codeRelayPurgeIsForbidden, ClassRelayUnit, ScopeInternal, LevelHigh, "relay log purge is forbidden temporarily, because %s", "Please try again later.") ErrRelayNoActiveRelayLog = New(codeRelayNoActiveRelayLog, ClassRelayUnit, ScopeInternal, LevelHigh, "no active relay log file found", "") ErrRelayPurgeRequestNotValid = New(codeRelayPurgeRequestNotValid, ClassRelayUnit, ScopeInternal, LevelHigh, "request %+v not valid", "") ErrRelayTrimUUIDNotFound = New(codeRelayTrimUUIDNotFound, ClassRelayUnit, ScopeInternal, LevelHigh, "UUID %s in UUIDs %v not found", "") @@ -796,11 +796,11 @@ var ( // Dump unit error ErrDumpUnitRuntime = New(codeDumpUnitRuntime, ClassDumpUnit, ScopeInternal, LevelHigh, "mydumper runs with error", "") - ErrDumpUnitGenTableRouter = New(codeDumpUnitGenTableRouter, ClassDumpUnit, ScopeInternal, LevelHigh, "generate table router", "") - ErrDumpUnitGenBAList = New(codeDumpUnitGenBAList, ClassDumpUnit, ScopeInternal, LevelHigh, "generate block allow list", "") + ErrDumpUnitGenTableRouter = New(codeDumpUnitGenTableRouter, ClassDumpUnit, ScopeInternal, LevelHigh, "generate table router", "Please check `routes` config in task configuration file.") + ErrDumpUnitGenBAList = New(codeDumpUnitGenBAList, ClassDumpUnit, ScopeInternal, LevelHigh, "generate block allow list", "Please check the `block-allow-list` config in task configuration file.") // Load unit error - ErrLoadUnitCreateSchemaFile = New(codeLoadUnitCreateSchemaFile, ClassLoadUnit, ScopeInternal, LevelMedium, "generate schema file", "") + ErrLoadUnitCreateSchemaFile = New(codeLoadUnitCreateSchemaFile, ClassLoadUnit, ScopeInternal, LevelMedium, "generate schema file", "Please check the `loaders` config in task configuration file.") ErrLoadUnitInvalidFileEnding = New(codeLoadUnitInvalidFileEnding, ClassLoadUnit, ScopeInternal, LevelHigh, "corresponding ending of sql: ')' not found", "") ErrLoadUnitParseQuoteValues = New(codeLoadUnitParseQuoteValues, ClassLoadUnit, ScopeInternal, LevelHigh, "parse quote values error", "") ErrLoadUnitDoColumnMapping = New(codeLoadUnitDoColumnMapping, ClassLoadUnit, ScopeInternal, LevelHigh, "mapping row data %v for table %+v", "") @@ -809,13 +809,13 @@ var ( ErrLoadUnitNotCreateTable = New(codeLoadUnitNotCreateTable, ClassLoadUnit, ScopeInternal, LevelHigh, "statement %s for %s/%s is not create table statement", "") ErrLoadUnitDispatchSQLFromFile = New(codeLoadUnitDispatchSQLFromFile, ClassLoadUnit, ScopeInternal, LevelHigh, "dispatch sql", "") ErrLoadUnitInvalidInsertSQL = New(codeLoadUnitInvalidInsertSQL, ClassLoadUnit, ScopeInternal, LevelHigh, "invalid insert sql %s", "") - ErrLoadUnitGenTableRouter = New(codeLoadUnitGenTableRouter, ClassLoadUnit, ScopeInternal, LevelHigh, "generate table router", "") - ErrLoadUnitGenColumnMapping = New(codeLoadUnitGenColumnMapping, ClassLoadUnit, ScopeInternal, LevelHigh, "generate column mapping", "") + ErrLoadUnitGenTableRouter = New(codeLoadUnitGenTableRouter, ClassLoadUnit, ScopeInternal, LevelHigh, "generate table router", "Please check `routes` config in task configuration file.") + ErrLoadUnitGenColumnMapping = New(codeLoadUnitGenColumnMapping, ClassLoadUnit, ScopeInternal, LevelHigh, "generate column mapping", "Please check the `column-mapping-rules` config in task configuration file.") ErrLoadUnitNoDBFile = New(codeLoadUnitNoDBFile, ClassLoadUnit, ScopeInternal, LevelHigh, "invalid data sql file, cannot find db - %s", "") ErrLoadUnitNoTableFile = New(codeLoadUnitNoTableFile, ClassLoadUnit, ScopeInternal, LevelHigh, "invalid data sql file, cannot find table - %s", "") ErrLoadUnitDumpDirNotFound = New(codeLoadUnitDumpDirNotFound, ClassLoadUnit, ScopeInternal, LevelHigh, "%s does not exist or it's not a dir", "") ErrLoadUnitDuplicateTableFile = New(codeLoadUnitDuplicateTableFile, ClassLoadUnit, ScopeInternal, LevelHigh, "invalid table schema file, duplicated item - %s", "") - ErrLoadUnitGenBAList = New(codeLoadUnitGenBAList, ClassLoadUnit, ScopeInternal, LevelHigh, "generate block allow list", "") + ErrLoadUnitGenBAList = New(codeLoadUnitGenBAList, ClassLoadUnit, ScopeInternal, LevelHigh, "generate block allow list", "Please check the `block-allow-list` config in task configuration file.") // Sync unit error ErrSyncerUnitPanic = New(codeSyncerUnitPanic, ClassSyncUnit, ScopeInternal, LevelHigh, "panic error: %v", "") @@ -825,7 +825,7 @@ var ( ErrSyncUnitAddTableInSharding = New(codeSyncUnitAddTableInSharding, ClassSyncUnit, ScopeInternal, LevelMedium, "in sequence sharding, add table, activeDDL: %s, sharding sequence: %s not supported", "") ErrSyncUnitDropSchemaTableInSharding = New(codeSyncUnitDropSchemaTableInSharding, ClassSyncUnit, ScopeInternal, LevelMedium, "in sequence sharding try drop sources %v not supported, activeDDL: %s, sharding sequence: %s", "") ErrSyncUnitInvalidShardMeta = New(codeSyncUnitInvalidShardMeta, ClassSyncUnit, ScopeInternal, LevelHigh, "invalid sharding meta data", "") - ErrSyncUnitDDLWrongSequence = New(codeSyncUnitDDLWrongSequence, ClassSyncUnit, ScopeInternal, LevelHigh, "detect inconsistent DDL sequence from source %+v, right DDL sequence should be %+v", "") + ErrSyncUnitDDLWrongSequence = New(codeSyncUnitDDLWrongSequence, ClassSyncUnit, ScopeInternal, LevelHigh, "detect inconsistent DDL sequence from source %+v, right DDL sequence should be %+v", "Please use `show-ddl-locks` command for more details.") ErrSyncUnitDDLActiveIndexLarger = New(codeSyncUnitDDLActiveIndexLarger, ClassSyncUnit, ScopeInternal, LevelHigh, "activeIdx %d larger than length of global DDLItems: %v", "") ErrSyncUnitDupTableGroup = New(codeSyncUnitDupTableGroup, ClassSyncUnit, ScopeInternal, LevelHigh, "table group %s exists", "") ErrSyncUnitShardingGroupNotFound = New(codeSyncUnitShardingGroupNotFound, ClassSyncUnit, ScopeInternal, LevelHigh, "sharding group for `%s`.`%s` not found", "") @@ -840,7 +840,7 @@ var ( ErrSyncerUnitDDLExecChanCloseOrBusy = New(codeSyncerUnitDDLExecChanCloseOrBusy, ClassSyncUnit, ScopeInternal, LevelHigh, "the chan has closed or already in sending", "") ErrSyncerUnitDDLChanDone = New(codeSyncerUnitDDLChanDone, ClassSyncUnit, ScopeInternal, LevelHigh, "canceled from external", "") ErrSyncerUnitDDLChanCanceled = New(codeSyncerUnitDDLChanCanceled, ClassSyncUnit, ScopeInternal, LevelHigh, "canceled by Close or Renew", "") - ErrSyncerUnitDDLOnMultipleTable = New(codeSyncerUnitDDLOnMultipleTable, ClassSyncUnit, ScopeInternal, LevelHigh, "ddl on multiple table: %s not supported", "") + ErrSyncerUnitDDLOnMultipleTable = New(codeSyncerUnitDDLOnMultipleTable, ClassSyncUnit, ScopeInternal, LevelHigh, "ddl on multiple table: %s not supported", "It is recommended to include only one DDL operation in a statement executed upstream. Please manually handle it using dmctl (skipping the DDL statement or replacing the DDL statement with a specified DDL statement). For details, see https://docs.pingcap.com/tidb-data-migration/stable/skip-or-replace-abnormal-sql-statements") ErrSyncerUnitInjectDDLOnly = New(codeSyncerUnitInjectDDLOnly, ClassSyncUnit, ScopeInternal, LevelLow, "only support inject DDL for sharding group to be synced currently, but got %s", "") ErrSyncerUnitInjectDDLWithoutSchema = New(codeSyncerUnitInjectDDLWithoutSchema, ClassSyncUnit, ScopeInternal, LevelLow, "injected DDL %s without schema name not valid", "") ErrSyncerUnitNotSupportedOperate = New(codeSyncerUnitNotSupportedOperate, ClassSyncUnit, ScopeInternal, LevelMedium, "op %s not supported", "") @@ -849,16 +849,16 @@ var ( ErrSyncerUnitDMLOldNewValueMismatch = New(codeSyncerUnitDMLOldNewValueMismatch, ClassSyncUnit, ScopeInternal, LevelHigh, "Old value count doesn't match new value count: %d (old) vs %d (new)", "") ErrSyncerUnitDMLPruneColumnMismatch = New(codeSyncerUnitDMLPruneColumnMismatch, ClassSyncUnit, ScopeInternal, LevelHigh, "prune DML columns and data mismatch in length: %d (columns) %d (data)", "") ErrSyncerUnitGenBinlogEventFilter = New(codeSyncerUnitGenBinlogEventFilter, ClassSyncUnit, ScopeInternal, LevelHigh, "generate binlog event filter", "") - ErrSyncerUnitGenTableRouter = New(codeSyncerUnitGenTableRouter, ClassSyncUnit, ScopeInternal, LevelHigh, "generate table router", "") - ErrSyncerUnitGenColumnMapping = New(codeSyncerUnitGenColumnMapping, ClassSyncUnit, ScopeInternal, LevelHigh, "generate column mapping", "") + ErrSyncerUnitGenTableRouter = New(codeSyncerUnitGenTableRouter, ClassSyncUnit, ScopeInternal, LevelHigh, "generate table router", "Please check `routes` config in task configuration file.") + ErrSyncerUnitGenColumnMapping = New(codeSyncerUnitGenColumnMapping, ClassSyncUnit, ScopeInternal, LevelHigh, "generate column mapping", "Please check the `column-mappings` config in task configuration file.") ErrSyncerUnitDoColumnMapping = New(codeSyncerUnitDoColumnMapping, ClassSyncUnit, ScopeInternal, LevelHigh, "mapping row data %v for table `%s`.`%s`", "") ErrSyncerUnitCacheKeyNotFound = New(codeSyncerUnitCacheKeyNotFound, ClassSyncUnit, ScopeInternal, LevelHigh, "cache key %s in %s not found", "") - ErrSyncerUnitHeartbeatCheckConfig = New(codeSyncerUnitHeartbeatCheckConfig, ClassSyncUnit, ScopeInternal, LevelMedium, "", "") + ErrSyncerUnitHeartbeatCheckConfig = New(codeSyncerUnitHeartbeatCheckConfig, ClassSyncUnit, ScopeInternal, LevelMedium, "", "Please check `heartbeat` config in task configuration file.") ErrSyncerUnitHeartbeatRecordExists = New(codeSyncerUnitHeartbeatRecordExists, ClassSyncUnit, ScopeInternal, LevelMedium, "heartbeat slave record for task %s already exists", "") ErrSyncerUnitHeartbeatRecordNotFound = New(codeSyncerUnitHeartbeatRecordNotFound, ClassSyncUnit, ScopeInternal, LevelMedium, "heartbeat slave record for task %s not found", "") ErrSyncerUnitHeartbeatRecordNotValid = New(codeSyncerUnitHeartbeatRecordNotValid, ClassSyncUnit, ScopeInternal, LevelMedium, "heartbeat record %s not valid", "") ErrSyncerUnitOnlineDDLInvalidMeta = New(codeSyncerUnitOnlineDDLInvalidMeta, ClassSyncUnit, ScopeInternal, LevelHigh, "online ddl meta invalid", "") - ErrSyncerUnitOnlineDDLSchemeNotSupport = New(codeSyncerUnitOnlineDDLSchemeNotSupport, ClassSyncUnit, ScopeInternal, LevelHigh, "online ddl scheme (%s) not supported", "") + ErrSyncerUnitOnlineDDLSchemeNotSupport = New(codeSyncerUnitOnlineDDLSchemeNotSupport, ClassSyncUnit, ScopeInternal, LevelHigh, "online ddl scheme (%s) not supported", "Please check the `online-ddl-scheme` config in task configuration file. Only `ghost` and `pt` are currently supported.") ErrSyncerUnitOnlineDDLOnMultipleTable = New(codeSyncerUnitOnlineDDLOnMultipleTable, ClassSyncUnit, ScopeInternal, LevelHigh, "online ddl changes on multiple table: %s not supported", "") ErrSyncerUnitGhostApplyEmptyTable = New(codeSyncerUnitGhostApplyEmptyTable, ClassSyncUnit, ScopeInternal, LevelHigh, "empty tables not valid", "") ErrSyncerUnitGhostRenameTableNotValid = New(codeSyncerUnitGhostRenameTableNotValid, ClassSyncUnit, ScopeInternal, LevelHigh, "tables should contain old and new table name", "") @@ -876,11 +876,11 @@ var ( ErrSyncerUnitFirstEndPosNotFound = New(codeSyncerUnitFirstEndPosNotFound, ClassSyncUnit, ScopeInternal, LevelHigh, "no valid End_log_pos of the first DDL exists for sharding group with source %s", "") ErrSyncerUnitResolveCasualityFail = New(codeSyncerUnitResolveCasualityFail, ClassSyncUnit, ScopeInternal, LevelHigh, "resolve karam error %v", "") ErrSyncerUnitReopenStreamNotSupport = New(codeSyncerUnitReopenStreamNotSupport, ClassSyncUnit, ScopeInternal, LevelHigh, "reopen %T not supported", "") - ErrSyncerUnitUpdateConfigInSharding = New(codeSyncerUnitUpdateConfigInSharding, ClassSyncUnit, ScopeInternal, LevelHigh, "try update config when some tables' (%v) sharding DDL not synced not supported", "") + ErrSyncerUnitUpdateConfigInSharding = New(codeSyncerUnitUpdateConfigInSharding, ClassSyncUnit, ScopeInternal, LevelHigh, "try update config when some tables' (%v) sharding DDL not synced not supported", "Please try again later.") ErrSyncerUnitExecWithNoBlockingDDL = New(codeSyncerUnitExecWithNoBlockingDDL, ClassSyncUnit, ScopeInternal, LevelHigh, "process unit not waiting for sharding DDL to sync", "") - ErrSyncerUnitGenBAList = New(codeSyncerUnitGenBAList, ClassSyncUnit, ScopeInternal, LevelHigh, "generate block allow list", "") + ErrSyncerUnitGenBAList = New(codeSyncerUnitGenBAList, ClassSyncUnit, ScopeInternal, LevelHigh, "generate block allow list", "Please check the `block-allow-list` config in task configuration file.") ErrSyncerUnitHandleDDLFailed = New(codeSyncerUnitHandleDDLFailed, ClassSyncUnit, ScopeInternal, LevelHigh, "fail to handle ddl job for %s", "") - ErrSyncerShardDDLConflict = New(codeSyncerShardDDLConflict, ClassSyncUnit, ScopeInternal, LevelHigh, "fail to handle shard ddl %v in optimistic mode, because schema conflict detected", "") + ErrSyncerShardDDLConflict = New(codeSyncerShardDDLConflict, ClassSyncUnit, ScopeInternal, LevelHigh, "fail to handle shard ddl %v in optimistic mode, because schema conflict detected", "Please use show-ddl-locks command for more details.") ErrSyncerFailpoint = New(codeSyncerFailpoint, ClassSyncUnit, ScopeInternal, LevelLow, "failpoint specified error", "") // DM-master error @@ -896,50 +896,50 @@ var ( ErrMasterConfigParseFlagSet = New(codeMasterConfigParseFlagSet, ClassDMMaster, ScopeInternal, LevelMedium, "parse config flag set", "") ErrMasterConfigUnknownItem = New(codeMasterConfigUnknownItem, ClassDMMaster, ScopeInternal, LevelMedium, "master config contained unknown configuration options: %s", "") ErrMasterConfigInvalidFlag = New(codeMasterConfigInvalidFlag, ClassDMMaster, ScopeInternal, LevelMedium, "'%s' is an invalid flag", "") - ErrMasterConfigTomlTransform = New(codeMasterConfigTomlTransform, ClassDMMaster, ScopeInternal, LevelMedium, "config toml transform", "") + ErrMasterConfigTomlTransform = New(codeMasterConfigTomlTransform, ClassDMMaster, ScopeInternal, LevelMedium, "config toml transform", "Please check the configuration file has correct TOML format.") ErrMasterConfigTimeoutParse = New(codeMasterConfigTimeoutParse, ClassDMMaster, ScopeInternal, LevelMedium, "parse rpc timeout str", "") ErrMasterConfigUpdateCfgFile = New(codeMasterConfigUpdateCfgFile, ClassDMMaster, ScopeInternal, LevelHigh, "update config file", "") - ErrMasterShardingDDLDiff = New(codeMasterShardingDDLDiff, ClassDMMaster, ScopeInternal, LevelHigh, "sharding ddls in ddl lock %s is different with %s", "") + ErrMasterShardingDDLDiff = New(codeMasterShardingDDLDiff, ClassDMMaster, ScopeInternal, LevelHigh, "sharding ddls in ddl lock %s is different with %s", "Please use show-ddl-locks command for more details.") ErrMasterStartService = New(codeMasterStartService, ClassDMMaster, ScopeInternal, LevelHigh, "start server", "") ErrMasterNoEmitToken = New(codeMasterNoEmitToken, ClassDMMaster, ScopeInternal, LevelHigh, "fail to get emit opportunity for source %s", "") - ErrMasterLockNotFound = New(codeMasterLockNotFound, ClassDMMaster, ScopeInternal, LevelHigh, "lock with ID %s not found", "") + ErrMasterLockNotFound = New(codeMasterLockNotFound, ClassDMMaster, ScopeInternal, LevelHigh, "lock with ID %s not found", "Please use show-ddl-locks command to see lock id.") ErrMasterLockIsResolving = New(codeMasterLockIsResolving, ClassDMMaster, ScopeInternal, LevelHigh, "lock %s is resolving", "") ErrMasterWorkerCliNotFound = New(codeMasterWorkerCliNotFound, ClassDMMaster, ScopeInternal, LevelHigh, "worker %s relevant worker-client not found", "") ErrMasterWorkerNotWaitLock = New(codeMasterWorkerNotWaitLock, ClassDMMaster, ScopeInternal, LevelHigh, "worker %s not waiting for DDL lock %s", "") ErrMasterHandleSQLReqFail = New(codeMasterHandleSQLReqFail, ClassDMMaster, ScopeInternal, LevelHigh, "request DDL lock %s owner %s handle SQLs request %s fail %s", "") ErrMasterOwnerExecDDL = New(codeMasterOwnerExecDDL, ClassDMMaster, ScopeInternal, LevelHigh, "owner %s ExecuteDDL fail", "") ErrMasterPartWorkerExecDDLFail = New(codeMasterPartWorkerExecDDLFail, ClassDMMaster, ScopeInternal, LevelHigh, "DDL lock %s owner ExecuteDDL successfully, so DDL lock removed. but some dm-workers ExecuteDDL fail, you should to handle dm-worker directly", "") - ErrMasterWorkerExistDDLLock = New(codeMasterWorkerExistDDLLock, ClassDMMaster, ScopeInternal, LevelHigh, "worker %s exist ddl lock, please unlock ddl lock first", "") + ErrMasterWorkerExistDDLLock = New(codeMasterWorkerExistDDLLock, ClassDMMaster, ScopeInternal, LevelHigh, "worker %s exist ddl lock", "Please unlock ddl lock first.") ErrMasterGetWorkerCfgExtractor = New(codeMasterGetWorkerCfgExtractor, ClassDMMaster, ScopeInternal, LevelHigh, "", "") ErrMasterTaskConfigExtractor = New(codeMasterTaskConfigExtractor, ClassDMMaster, ScopeInternal, LevelHigh, "", "") ErrMasterWorkerArgsExtractor = New(codeMasterWorkerArgsExtractor, ClassDMMaster, ScopeInternal, LevelHigh, "", "") ErrMasterQueryWorkerConfig = New(codeMasterQueryWorkerConfig, ClassDMMaster, ScopeInternal, LevelHigh, "", "") - ErrMasterOperNotFound = New(codeMasterOperNotFound, ClassDMMaster, ScopeInternal, LevelHigh, "operation %d of task %s on worker %s not found, please execute `query-status` to check status", "") - ErrMasterOperRespNotSuccess = New(codeMasterOperRespNotSuccess, ClassDMMaster, ScopeInternal, LevelHigh, "some error occurs in dm-worker: %s", "") - ErrMasterOperRequestTimeout = New(codeMasterOperRequestTimeout, ClassDMMaster, ScopeInternal, LevelHigh, "request to dm-worker %s is timeout, but request may be successful, please execute `query-status` to check status", "") + ErrMasterOperNotFound = New(codeMasterOperNotFound, ClassDMMaster, ScopeInternal, LevelHigh, "operation %d of task %s on worker %s not found", "Please execute `query-status` to check status.") + ErrMasterOperRespNotSuccess = New(codeMasterOperRespNotSuccess, ClassDMMaster, ScopeInternal, LevelHigh, "some error occurs in dm-worker: %s", "Please execute `query-status` to check status.") + ErrMasterOperRequestTimeout = New(codeMasterOperRequestTimeout, ClassDMMaster, ScopeInternal, LevelHigh, "request to dm-worker %s is timeout, but request may be successful", "Please execute `query-status` to check status.") ErrMasterHandleHTTPApis = New(codeMasterHandleHTTPApis, ClassDMMaster, ScopeInternal, LevelHigh, "serve http apis to grpc", "") - ErrMasterHostPortNotValid = New(codeMasterHostPortNotValid, ClassDMMaster, ScopeInternal, LevelHigh, "host:port '%s' not valid", "") + ErrMasterHostPortNotValid = New(codeMasterHostPortNotValid, ClassDMMaster, ScopeInternal, LevelHigh, "host:port '%s' not valid", "Please check the `master-addr` config in master configuration file.") ErrMasterGetHostnameFail = New(codeMasterGetHostnameFail, ClassDMMaster, ScopeInternal, LevelHigh, "get hostname fail", "") - ErrMasterGenEmbedEtcdConfigFail = New(codeMasterGenEmbedEtcdConfigFail, ClassDMMaster, ScopeInternal, LevelHigh, "fail to generate config item %s for embed etcd", "") + ErrMasterGenEmbedEtcdConfigFail = New(codeMasterGenEmbedEtcdConfigFail, ClassDMMaster, ScopeInternal, LevelHigh, "fail to generate config item %s for embed etcd", "Please check configs in master configuration file.") ErrMasterStartEmbedEtcdFail = New(codeMasterStartEmbedEtcdFail, ClassDMMaster, ScopeInternal, LevelHigh, "fail to start embed etcd", "") - ErrMasterParseURLFail = New(codeMasterParseURLFail, ClassDMMaster, ScopeInternal, LevelHigh, "fail to parse URL %s", "") - ErrMasterJoinEmbedEtcdFail = New(codeMasterJoinEmbedEtcdFail, ClassDMMaster, ScopeInternal, LevelHigh, "fail to join embed etcd: %s", "") + ErrMasterParseURLFail = New(codeMasterParseURLFail, ClassDMMaster, ScopeInternal, LevelHigh, "fail to parse URL %s", "Please check configs in master configuration file.") + ErrMasterJoinEmbedEtcdFail = New(codeMasterJoinEmbedEtcdFail, ClassDMMaster, ScopeInternal, LevelHigh, "fail to join embed etcd: %s", "Please check configs in master configuration file.") ErrMasterInvalidOperateOp = New(codeMasterInvalidOperateOp, ClassDMMaster, ScopeInternal, LevelMedium, "invalid op %s on %s", "") - ErrMasterAdvertiseAddrNotValid = New(codeMasterAdvertiseAddrNotValid, ClassDMMaster, ScopeInternal, LevelHigh, "advertise address %s not valid", "") + ErrMasterAdvertiseAddrNotValid = New(codeMasterAdvertiseAddrNotValid, ClassDMMaster, ScopeInternal, LevelHigh, "advertise address %s not valid", "Please check the `advertise-addr` config in master configuration file.") ErrMasterRequestIsNotForwardToLeader = New(codeMasterRequestIsNotForwardToLeader, ClassDMMaster, ScopeInternal, LevelHigh, "master is not leader, and can't forward request to leader", "") ErrMasterIsNotAsyncRequest = New(codeMasterIsNotAsyncRequest, ClassDMMaster, ScopeInternal, LevelMedium, "request %s is not an async one, needn't wait for ok", "") ErrMasterFailToGetExpectResult = New(codeMasterFailToGetExpectResult, ClassDMMaster, ScopeInternal, LevelMedium, "fail to get expected result", "") ErrMasterPessimistNotStarted = New(codeMasterPessimistNotStarted, ClassDMMaster, ScopeInternal, LevelMedium, "the shardddl pessimist has not started", "") ErrMasterOptimistNotStarted = New(codeMasterOptimistNotStarted, ClassDMMaster, ScopeInternal, LevelMedium, "the shardddl optimist has not started", "") - ErrMasterMasterNameNotExist = New(codeMasterMasterNameNotExist, ClassDMMaster, ScopeInternal, LevelLow, "dm-master with name %s not exists", "") - ErrMasterInvalidOfflineType = New(codeMasterInvalidOfflineType, ClassDMMaster, ScopeInternal, LevelLow, "offline member type %s is invalid, please use master/worker", "") + ErrMasterMasterNameNotExist = New(codeMasterMasterNameNotExist, ClassDMMaster, ScopeInternal, LevelLow, "dm-master with name %s not exists", "Please use list-member command to see masters.") + ErrMasterInvalidOfflineType = New(codeMasterInvalidOfflineType, ClassDMMaster, ScopeInternal, LevelLow, "offline member type %s is invalid", "Please use master/worker.") // DM-worker error ErrWorkerParseFlagSet = New(codeWorkerParseFlagSet, ClassDMWorker, ScopeInternal, LevelMedium, "parse dm-worker config flag set", "") ErrWorkerInvalidFlag = New(codeWorkerInvalidFlag, ClassDMWorker, ScopeInternal, LevelMedium, "'%s' is an invalid flag", "") - ErrWorkerDecodeConfigFromFile = New(codeWorkerDecodeConfigFromFile, ClassDMWorker, ScopeInternal, LevelMedium, "toml decode file", "") - ErrWorkerUndecodedItemFromFile = New(codeWorkerUndecodedItemFromFile, ClassDMWorker, ScopeInternal, LevelMedium, "worker config contains unknown configuration options: %s", "") + ErrWorkerDecodeConfigFromFile = New(codeWorkerDecodeConfigFromFile, ClassDMWorker, ScopeInternal, LevelMedium, "toml decode file", "Please check the configuration file has correct TOML format.") + ErrWorkerUndecodedItemFromFile = New(codeWorkerUndecodedItemFromFile, ClassDMWorker, ScopeInternal, LevelMedium, "worker config contains unknown configuration options: %s", "Please check configs in worker configurtion file.") ErrWorkerNeedSourceID = New(codeWorkerNeedSourceID, ClassDMWorker, ScopeInternal, LevelMedium, "dm-worker should bind a non-empty source ID which represents a MySQL/MariaDB instance or a replica group. \n notice: if you use old version dm-ansible, please update to newest version.", "") ErrWorkerTooLongSourceID = New(codeWorkerTooLongSourceID, ClassDMWorker, ScopeInternal, LevelMedium, "the length of source ID %s is more than max allowed value %d", "") ErrWorkerRelayBinlogName = New(codeWorkerRelayBinlogName, ClassDMWorker, ScopeInternal, LevelMedium, "relay-binlog-name %s not valid", "") @@ -989,7 +989,7 @@ var ( ErrWorkerAlreadyStart = New(codeWorkerAlreadyStarted, ClassDMWorker, ScopeInternal, LevelHigh, "worker already started", "") ErrWorkerNotRunningStage = New(codeWorkerNotRunningStage, ClassDMWorker, ScopeInternal, LevelHigh, "current stage is %s but not running, invalid", "") ErrWorkerNotPausedStage = New(codeWorkerNotPausedStage, ClassDMWorker, ScopeInternal, LevelHigh, "current stage is %s but not paused, invalid", "") - ErrWorkerUpdateTaskStage = New(codeWorkerUpdateTaskStage, ClassDMWorker, ScopeInternal, LevelHigh, "can only update task on Paused stage, but current stage is %s", "") + ErrWorkerUpdateTaskStage = New(codeWorkerUpdateTaskStage, ClassDMWorker, ScopeInternal, LevelHigh, "can only update task on Paused stage, but current stage is %s", "Please use `pause-task` command to pause the task.") ErrWorkerMigrateStopRelay = New(codeWorkerMigrateStopRelay, ClassDMWorker, ScopeInternal, LevelHigh, "relay unit has stopped, can not be migrated", "") ErrWorkerSubTaskNotFound = New(codeWorkerSubTaskNotFound, ClassDMWorker, ScopeInternal, LevelHigh, "sub task with name %s not found", "") ErrWorkerSubTaskExists = New(codeWorkerSubTaskExists, ClassDMWorker, ScopeInternal, LevelHigh, "sub task %s already exists", "") @@ -998,15 +998,15 @@ var ( ErrWorkerNoSyncerRunning = New(codeWorkerNoSyncerRunning, ClassDMWorker, ScopeInternal, LevelHigh, "there is a subtask does not run syncer", "") ErrWorkerCannotUpdateSourceID = New(codeWorkerCannotUpdateSourceID, ClassDMWorker, ScopeInternal, LevelHigh, "update source ID is not allowed", "") ErrWorkerNoAvailUnits = New(codeWorkerNoAvailUnits, ClassDMWorker, ScopeInternal, LevelHigh, "subtask %s has no dm units for mode %s", "") - ErrWorkerDDLLockInfoNotFound = New(codeWorkerDDLLockInfoNotFound, ClassDMWorker, ScopeInternal, LevelHigh, "DDLLockInfo with ID %s not found", "") + ErrWorkerDDLLockInfoNotFound = New(codeWorkerDDLLockInfoNotFound, ClassDMWorker, ScopeInternal, LevelHigh, "DDLLockInfo with ID %s not found", "Please use show-ddl-locks command to see lock id.") ErrWorkerDDLLockInfoExists = New(codeWorkerDDLLockInfoExists, ClassDMWorker, ScopeInternal, LevelHigh, "DDLLockInfo for task %s already exists", "") ErrWorkerCacheDDLInfoExists = New(codeWorkerCacheDDLInfoExists, ClassDMWorker, ScopeInternal, LevelHigh, "CacheDDLInfo for task %s already exists", "") ErrWorkerExecSkipDDLConflict = New(codeWorkerExecSkipDDLConflict, ClassDMWorker, ScopeInternal, LevelHigh, "execDDL and skipDDL can not specify both at the same time", "") ErrWorkerExecDDLSyncerOnly = New(codeWorkerExecDDLSyncerOnly, ClassDMWorker, ScopeInternal, LevelHigh, "only syncer support ExecuteDDL, but current unit is %s", "") - ErrWorkerExecDDLTimeout = New(codeWorkerExecDDLTimeout, ClassDMWorker, ScopeInternal, LevelHigh, "ExecuteDDL timeout (exceeding %s), try use `query-status` to query whether the DDL is still blocking", "") + ErrWorkerExecDDLTimeout = New(codeWorkerExecDDLTimeout, ClassDMWorker, ScopeInternal, LevelHigh, "ExecuteDDL timeout (exceeding %s)", "Please try use `query-status` to query whether the DDL is still blocking.") ErrWorkerWaitRelayCatchupTimeout = New(codeWorkerWaitRelayCatchupTimeout, ClassDMWorker, ScopeInternal, LevelHigh, "waiting for relay binlog pos to catch up with loader end binlog pos is timeout (exceeding %s), loader end binlog pos: %s, relay binlog pos: %s", "") - ErrWorkerRelayIsPurging = New(codeWorkerRelayIsPurging, ClassDMWorker, ScopeInternal, LevelHigh, "relay log purger is purging, cannot start sub task %s, please try again later", "") - ErrWorkerHostPortNotValid = New(codeWorkerHostPortNotValid, ClassDMWorker, ScopeInternal, LevelHigh, "host:port '%s' not valid", "") + ErrWorkerRelayIsPurging = New(codeWorkerRelayIsPurging, ClassDMWorker, ScopeInternal, LevelHigh, "relay log purger is purging, cannot start sub task %s", "Please try again later.") + ErrWorkerHostPortNotValid = New(codeWorkerHostPortNotValid, ClassDMWorker, ScopeInternal, LevelHigh, "host:port '%s' not valid", "Please check configs in worker configuration file.") ErrWorkerSourceNotMatch = New(codeWorkerSourceNotMatch, ClassDMWorker, ScopeInternal, LevelHigh, "source of request does not match with source in worker", "") ErrWorkerFailToGetSubtaskConfigFromEtcd = New(codeWorkerFailToGetSubtaskConfigFromEtcd, ClassDMWorker, ScopeInternal, LevelMedium, "there is no relative subtask config for task %s in etcd", "") @@ -1014,7 +1014,7 @@ var ( // DM-tracer error ErrTracerParseFlagSet = New(codeTracerParseFlagSet, ClassDMTracer, ScopeInternal, LevelMedium, "parse dm-tracer config flag set", "") - ErrTracerConfigTomlTransform = New(codeTracerConfigTomlTransform, ClassDMTracer, ScopeInternal, LevelMedium, "config toml transform", "") + ErrTracerConfigTomlTransform = New(codeTracerConfigTomlTransform, ClassDMTracer, ScopeInternal, LevelMedium, "config toml transform", "Please check the configuration file has correct TOML format.") ErrTracerConfigInvalidFlag = New(codeTracerConfigInvalidFlag, ClassDMTracer, ScopeInternal, LevelMedium, "'%s' is an invalid flag", "") ErrTracerTraceEventNotFound = New(codeTracerTraceEventNotFound, ClassDMTracer, ScopeInternal, LevelMedium, "trace event %s not found", "") ErrTracerTraceIDNotProvided = New(codeTracerTraceIDNotProvided, ClassDMTracer, ScopeInternal, LevelMedium, "trace id not provided", "") @@ -1044,7 +1044,7 @@ var ( ErrSchedulerStarted = New(codeSchedulerStarted, ClassScheduler, ScopeInternal, LevelMedium, "the scheduler has already started", "") ErrSchedulerWorkerExist = New(codeSchedulerWorkerExist, ClassScheduler, ScopeInternal, LevelMedium, "dm-worker with name %s already exists", "") ErrSchedulerWorkerNotExist = New(codeSchedulerWorkerNotExist, ClassScheduler, ScopeInternal, LevelMedium, "dm-worker with name %s not exists", "") - ErrSchedulerWorkerOnline = New(codeSchedulerWorkerOnline, ClassScheduler, ScopeInternal, LevelMedium, "dm-worker with name %s is still online, must shut it down first", "") + ErrSchedulerWorkerOnline = New(codeSchedulerWorkerOnline, ClassScheduler, ScopeInternal, LevelMedium, "dm-worker with name %s is still online", "Please shut it down first.") ErrSchedulerWorkerInvalidTrans = New(codeSchedulerWorkerInvalidTrans, ClassScheduler, ScopeInternal, LevelMedium, "invalid stage transformation for dm-worker %s, from %s to %s", "") ErrSchedulerSourceCfgExist = New(codeSchedulerSourceCfgExist, ClassScheduler, ScopeInternal, LevelMedium, "source config with ID %s already exists", "") ErrSchedulerSourceCfgNotExist = New(codeSchedulerSourceCfgNotExist, ClassScheduler, ScopeInternal, LevelMedium, "source config with ID %s not exists", "")