diff --git a/_utils/terror_gen/checker_template.go b/_utils/terror_gen/checker_template.go index 63c5017abf..009a0b16fc 100644 --- a/_utils/terror_gen/checker_template.go +++ b/_utils/terror_gen/checker_template.go @@ -71,7 +71,13 @@ func genErrors() { w := bufio.NewWriter(f) for _, item := range errors { s := strings.SplitN(item.err.Error(), " ", 2) - w.WriteString(fmt.Sprintf("%s,%s \"%s\"\n", item.name, s[0], strings.ReplaceAll(s[1], "\n", "\\n"))) + if len(s) > 1 { + // errName,[code:class:scope:level], "Message, RawCause, Workaround" + w.WriteString(fmt.Sprintf("%s,%s \"%s\"\n", item.name, s[0], strings.ReplaceAll(s[1], "\n", "\\n"))) + } else { + // errName,[code:class:scope:level] + w.WriteString(fmt.Sprintf("%s,%s\n", item.name, s[0])) + } body := tomlErrorBody{ Message: item.err.Message(), diff --git a/_utils/terror_gen/errors_release.txt b/_utils/terror_gen/errors_release.txt index 547cad0f95..0472b37382 100644 --- a/_utils/terror_gen/errors_release.txt +++ b/_utils/terror_gen/errors_release.txt @@ -1,453 +1,454 @@ -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: '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: '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: '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', 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: ''" -ErrBinlogFileNotValid,[code=11027:class=functional:scope=internal:level=high], "msg: 'binlog file %s not valid', workaround: ''" -ErrBinlogFilesNotFound,[code=11028:class=functional:scope=internal:level=high], "msg: 'binlog files in dir %s not found', workaround: ''" -ErrGetRelayLogStat,[code=11029:class=functional:scope=internal:level=high], "msg: 'get stat for relay log %s', workaround: ''" -ErrAddWatchForRelayLogDir,[code=11030:class=functional:scope=internal:level=high], "msg: 'add watch for relay log dir %s', workaround: ''" -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', 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', 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: '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: ''" -ErrCiphertextLenNotValid,[code=11047:class=functional:scope=internal:level=high], "msg: 'ciphertext's length should be greater than %d, but got %d not valid', workaround: ''" -ErrCiphertextContextNotValid,[code=11048:class=functional:scope=internal:level=high], "msg: 'ciphertext's content not valid', workaround: ''" -ErrInvalidBinlogPosStr,[code=11049:class=functional:scope=internal:level=high], "msg: 'invalid mysql position string: %s', workaround: ''" -ErrEncCipherTextBase64Decode,[code=11050:class=functional:scope=internal:level=high], "msg: 'decode base64 encoded password %s', workaround: ''" -ErrBinlogWriteBinaryData,[code=11051:class=functional:scope=internal:level=high], "msg: '', workaround: ''" -ErrBinlogWriteDataToBuffer,[code=11052:class=functional:scope=internal:level=high], "msg: '', workaround: ''" -ErrBinlogHeaderLengthNotValid,[code=11053:class=functional:scope=internal:level=high], "msg: 'header length should be %d, but got %d not valid', workaround: ''" -ErrBinlogEventDecode,[code=11054:class=functional:scope=internal:level=high], "msg: 'decode % X', workaround: ''" -ErrBinlogEmptyNextBinName,[code=11055:class=functional:scope=internal:level=high], "msg: 'empty next binlog name not valid', workaround: ''" -ErrBinlogParseSID,[code=11056:class=functional:scope=internal:level=high], "msg: '', workaround: ''" -ErrBinlogEmptyGTID,[code=11057:class=functional:scope=internal:level=high], "msg: 'empty GTID set not valid', workaround: ''" -ErrBinlogGTIDSetNotValid,[code=11058:class=functional:scope=internal:level=high], "msg: 'GTID set %s with flavor %s not valid', workaround: ''" -ErrBinlogGTIDMySQLNotValid,[code=11059:class=functional:scope=internal:level=high], "msg: 'GTID set string %s for MySQL not valid', workaround: ''" -ErrBinlogGTIDMariaDBNotValid,[code=11060:class=functional:scope=internal:level=high], "msg: 'GTID set string %s for MariaDB not valid', workaround: ''" -ErrBinlogMariaDBServerIDMismatch,[code=11061:class=functional:scope=internal:level=high], "msg: 'server_id mismatch, in GTID (%d), in event header/server_id (%d)', workaround: ''" -ErrBinlogOnlyOneGTIDSupport,[code=11062:class=functional:scope=internal:level=high], "msg: 'only one GTID in set is supported, but got %d (%s)', workaround: ''" -ErrBinlogOnlyOneIntervalInUUID,[code=11063:class=functional:scope=internal:level=high], "msg: 'only one Interval in UUIDSet is supported, but got %d (%s)', workaround: ''" -ErrBinlogIntervalValueNotValid,[code=11064:class=functional:scope=internal:level=high], "msg: 'Interval's Stop should equal to Start+1, but got %+v (%s)', workaround: ''" -ErrBinlogEmptyQuery,[code=11065:class=functional:scope=internal:level=high], "msg: 'empty query not valid', workaround: ''" -ErrBinlogTableMapEvNotValid,[code=11066:class=functional:scope=internal:level=high], "msg: 'empty schema (% X) or table (% X) or column type (% X)', workaround: ''" -ErrBinlogExpectFormatDescEv,[code=11067:class=functional:scope=internal:level=high], "msg: 'expect FormatDescriptionEvent, but got %+v', workaround: ''" -ErrBinlogExpectTableMapEv,[code=11068:class=functional:scope=internal:level=high], "msg: 'expect TableMapEvent, but got %+v', workaround: ''" -ErrBinlogExpectRowsEv,[code=11069:class=functional:scope=internal:level=high], "msg: 'expect event with type (%d), but got %+v', workaround: ''" -ErrBinlogUnexpectedEv,[code=11070:class=functional:scope=internal:level=high], "msg: 'unexpected event %+v', workaround: ''" -ErrBinlogParseSingleEv,[code=11071:class=functional:scope=internal:level=high], "msg: '', workaround: ''" -ErrBinlogEventTypeNotValid,[code=11072:class=functional:scope=internal:level=high], "msg: 'event type %d not valid', workaround: ''" -ErrBinlogEventNoRows,[code=11073:class=functional:scope=internal:level=high], "msg: 'no rows not valid', workaround: ''" -ErrBinlogEventNoColumns,[code=11074:class=functional:scope=internal:level=high], "msg: 'no columns not valid', workaround: ''" -ErrBinlogEventRowLengthNotEq,[code=11075:class=functional:scope=internal:level=high], "msg: 'length of row (%d) not equal to length of column-type (%d)', workaround: ''" -ErrBinlogColumnTypeNotSupport,[code=11076:class=functional:scope=internal:level=high], "msg: 'column type %d in binlog not supported', workaround: ''" -ErrBinlogGoMySQLTypeNotSupport,[code=11077:class=functional:scope=internal:level=high], "msg: 'go-mysql type %d in event generator not supported', workaround: ''" -ErrBinlogColumnTypeMisMatch,[code=11078:class=functional:scope=internal:level=high], "msg: 'value %+v (type %v) with column type %v not valid', workaround: ''" -ErrBinlogDummyEvSizeTooSmall,[code=11079:class=functional:scope=internal:level=high], "msg: 'required dummy event size (%d) is too small, the minimum supported size is %d', workaround: ''" -ErrBinlogFlavorNotSupport,[code=11080:class=functional:scope=internal:level=high], "msg: 'flavor %s not supported', workaround: ''" -ErrBinlogDMLEmptyData,[code=11081:class=functional:scope=internal:level=high], "msg: 'empty data not valid', workaround: ''" -ErrBinlogLatestGTIDNotInPrev,[code=11082:class=functional:scope=internal:level=high], "msg: 'latest GTID %s is not one of the latest previousGTIDs %s not valid', workaround: ''" -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', 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: ''" -ErrBinlogWriterFileNotOpened,[code=11090:class=functional:scope=internal:level=high], "msg: 'file %s not opened', workaround: ''" -ErrBinlogWriterFileSync,[code=11091:class=functional:scope=internal:level=high], "msg: 'sync file', workaround: ''" -ErrBinlogPrevGTIDEvNotValid,[code=11092:class=functional:scope=internal:level=high], "msg: 'the event should be a PreviousGTIDsEvent in go-mysql, but got %T', workaround: ''" -ErrBinlogDecodeMySQLGTIDSet,[code=11093:class=functional:scope=internal:level=high], "msg: 'decode from % X', workaround: ''" -ErrBinlogNeedMariaDBGTIDSet,[code=11094:class=functional:scope=internal:level=high], "msg: 'the event should be a MariadbGTIDListEvent, but got %T', workaround: ''" -ErrBinlogParseMariaDBGTIDSet,[code=11095:class=functional:scope=internal:level=high], "msg: 'parse MariaDB GTID set', workaround: ''" -ErrBinlogMariaDBAddGTIDSet,[code=11096:class=functional:scope=internal:level=high], "msg: 'add set %v to GTID set', workaround: ''" -ErrTracingEventDataNotValid,[code=11097:class=functional:scope=internal:level=high], "msg: 'invalid event data for type: %s', workaround: ''" -ErrTracingUploadData,[code=11098:class=functional:scope=internal:level=high], "msg: 'upload event', workaround: ''" -ErrTracingEventTypeNotValid,[code=11099:class=functional:scope=internal:level=high], "msg: 'invalid event type %s, will not process', workaround: ''" -ErrTracingGetTraceCode,[code=11100:class=functional:scope=internal:level=high], "msg: 'failed to get code information from runtime.Caller', workaround: ''" -ErrTracingDataChecksum,[code=11101:class=functional:scope=internal:level=high], "msg: 'calc data checksum', workaround: ''" -ErrTracingGetTSO,[code=11102:class=functional:scope=internal:level=high], "msg: 'get tso', workaround: ''" -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: '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: '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: '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: '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: ''" -ErrCheckpointInvalidTaskMode,[code=24001:class=checkpoint:scope=internal:level=medium], "msg: 'invalid task mode: %s', workaround: ''" -ErrCheckpointSaveInvalidPos,[code=24002:class=checkpoint:scope=internal:level=high], "msg: 'save point %s is older than current location %s', workaround: ''" -ErrCheckpointInvalidTableFile,[code=24003:class=checkpoint:scope=internal:level=medium], "msg: 'invalid db table sql file - %s', workaround: ''" -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: '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: '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.', 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: '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: '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', 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', 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: ''" -ErrRelayWriterStatusNotValid,[code=30022:class=relay-unit:scope=internal:level=high], "msg: 'invalid status type %T of the underlying writer', workaround: ''" -ErrRelayWriterGetFileStat,[code=30023:class=relay-unit:scope=internal:level=high], "msg: 'get stat for %s', workaround: ''" -ErrRelayWriterLatestPosGTFileSize,[code=30024:class=relay-unit:scope=internal:level=high], "msg: 'latest pos %d greater than file size %d, should not happen', workaround: ''" -ErrRelayWriterFileOperate,[code=30025:class=relay-unit:scope=internal:level=high], "msg: '', workaround: ''" -ErrRelayCheckBinlogFileHeaderExist,[code=30026:class=relay-unit:scope=internal:level=high], "msg: '', workaround: ''" -ErrRelayCheckFormatDescEventExist,[code=30027:class=relay-unit:scope=internal:level=high], "msg: '', workaround: ''" -ErrRelayCheckFormatDescEventParseEv,[code=30028:class=relay-unit:scope=internal:level=high], "msg: 'parse %s', workaround: ''" -ErrRelayCheckIsDuplicateEvent,[code=30029:class=relay-unit:scope=internal:level=high], "msg: '', workaround: ''" -ErrRelayUpdateGTID,[code=30030:class=relay-unit:scope=internal:level=high], "msg: 'update GTID set %v with GTID %s', workaround: ''" -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: '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', 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: ''" -ErrRelayRemoveFileFail,[code=30041:class=relay-unit:scope=internal:level=high], "msg: 'remove relay log %s %s', workaround: ''" -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: '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: ''" -ErrLoadUnitReadSchemaFile,[code=34005:class=load-unit:scope=internal:level=high], "msg: 'read schema from sql file %s', workaround: ''" -ErrLoadUnitParseStatement,[code=34006:class=load-unit:scope=internal:level=high], "msg: 'parse statement %s', workaround: ''" -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: '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: '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: ''" -ErrSyncUnitNotSupportedDML,[code=36004:class=sync-unit:scope=internal:level=high], "msg: 'DMLNode %v not supported', workaround: ''" -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: '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: ''" -ErrSyncUnitSafeModeSetCount,[code=36012:class=sync-unit:scope=internal:level=high], "msg: '', workaround: ''" -ErrSyncUnitCausalityConflict,[code=36013:class=sync-unit:scope=internal:level=high], "msg: 'some conflicts in causality, must be resolved', workaround: ''" -ErrSyncUnitDMLStatementFound,[code=36014:class=sync-unit:scope=internal:level=high], "msg: 'only support ROW format binlog, unexpected DML statement found in query event', workaround: ''" -ErrSyncerUnitBinlogEventFilter,[code=36015:class=sync-unit:scope=internal:level=high], "msg: '', workaround: ''" -ErrSyncerUnitInvalidReplicaEvent,[code=36016:class=sync-unit:scope=internal:level=high], "msg: 'invalid replication event type %v', workaround: ''" -ErrSyncerUnitParseStmt,[code=36017:class=sync-unit:scope=internal:level=high], "msg: '', workaround: ''" -ErrSyncerUnitUUIDNotLatest,[code=36018:class=sync-unit:scope=internal:level=high], "msg: 'UUID %s not the latest one in UUIDs %v', workaround: ''" -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: '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: ''" -ErrSyncerUnitNilOperatorReq,[code=36026:class=sync-unit:scope=internal:level=medium], "msg: 'nil request not valid', workaround: ''" -ErrSyncerUnitDMLColumnNotMatch,[code=36027:class=sync-unit:scope=internal:level=high], "msg: 'Column count doesn't match value count: %d (columns) vs %d (values)', workaround: ''" -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: '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: '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: '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: ''" -ErrSyncerUnitGhostRenameToGhostTable,[code=36044:class=sync-unit:scope=internal:level=high], "msg: 'rename table to gh-ost temporary table %s not supported', workaround: ''" -ErrSyncerUnitGhostRenameGhostTblToOther,[code=36045:class=sync-unit:scope=internal:level=high], "msg: 'rename gh-ost temporary table to other temporary table %s not supported', workaround: ''" -ErrSyncerUnitGhostOnlineDDLOnGhostTbl,[code=36046:class=sync-unit:scope=internal:level=high], "msg: 'online ddl metadata for ghost temporary table `%s`.`%s` not found', workaround: ''" -ErrSyncerUnitPTApplyEmptyTable,[code=36047:class=sync-unit:scope=internal:level=high], "msg: 'empty tables not valid', workaround: ''" -ErrSyncerUnitPTRenameTableNotValid,[code=36048:class=sync-unit:scope=internal:level=high], "msg: 'tables should contain old and new table name', workaround: ''" -ErrSyncerUnitPTRenameToPTTable,[code=36049:class=sync-unit:scope=internal:level=high], "msg: 'rename table to pt temporary table %s not supported', workaround: ''" -ErrSyncerUnitPTRenamePTTblToOther,[code=36050:class=sync-unit:scope=internal:level=high], "msg: 'rename pt temporary table to other temporary table %s not supported', workaround: ''" -ErrSyncerUnitPTOnlineDDLOnPTTbl,[code=36051:class=sync-unit:scope=internal:level=high], "msg: 'online ddl metadata for pt temporary table `%s`.`%s` not found', workaround: ''" -ErrSyncerUnitRemoteSteamerWithGTID,[code=36052:class=sync-unit:scope=internal:level=high], "msg: 'open remote streamer with GTID mode not supported', workaround: ''" -ErrSyncerUnitRemoteSteamerStartSync,[code=36053:class=sync-unit:scope=internal:level=high], "msg: 'start syncing binlog from remote streamer', workaround: ''" -ErrSyncerUnitGetTableFromDB,[code=36054:class=sync-unit:scope=internal:level=high], "msg: 'invalid table `%s`.`%s`', workaround: ''" -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: '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: '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: '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: ''" -ErrMasterSQLOpWithoutSharding,[code=38003:class=dm-master:scope=internal:level=medium], "msg: 'operate request without --sharding specified not valid', workaround: ''" -ErrMasterGRPCCreateConn,[code=38004:class=dm-master:scope=internal:level=high], "msg: 'create grpc connection', workaround: ''" -ErrMasterGRPCSendOnCloseConn,[code=38005:class=dm-master:scope=internal:level=high], "msg: 'send request on a closed client', workaround: ''" -ErrMasterGRPCClientClose,[code=38006:class=dm-master:scope=internal:level=high], "msg: 'close rpc client', workaround: ''" -ErrMasterGRPCInvalidReqType,[code=38007:class=dm-master:scope=internal:level=high], "msg: 'invalid request type: %v', workaround: ''" -ErrMasterGRPCRequestError,[code=38008:class=dm-master:scope=internal:level=high], "msg: 'grpc request error', workaround: ''" -ErrMasterDeployMapperVerify,[code=38009:class=dm-master:scope=internal:level=high], "msg: 'user should specify valid relation between source(mysql/mariadb) and dm-worker, config %+v not valid', workaround: ''" -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: '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: '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: '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', 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', 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: '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: '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: '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: '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: '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: '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: ''" -ErrWorkerWriteConfigFile,[code=40008:class=dm-worker:scope=internal:level=medium], "msg: 'write config to local file', workaround: ''" -ErrWorkerLogInvalidHandler,[code=40009:class=dm-worker:scope=internal:level=high], "msg: 'handler is nil, please pass a leveldb.DB or leveldb.Transaction', workaround: ''" -ErrWorkerLogPointerInvalid,[code=40010:class=dm-worker:scope=internal:level=high], "msg: 'not valid length data as pointer % X', workaround: ''" -ErrWorkerLogFetchPointer,[code=40011:class=dm-worker:scope=internal:level=high], "msg: 'fetch handled pointer', workaround: ''" -ErrWorkerLogUnmarshalPointer,[code=40012:class=dm-worker:scope=internal:level=high], "msg: 'unmarshal handle pointer % X', workaround: ''" -ErrWorkerLogClearPointer,[code=40013:class=dm-worker:scope=internal:level=high], "msg: 'clear handled pointer', workaround: ''" -ErrWorkerLogTaskKeyNotValid,[code=40014:class=dm-worker:scope=internal:level=high], "msg: 'not valid length data as task log key % X', workaround: ''" -ErrWorkerLogUnmarshalTaskKey,[code=40015:class=dm-worker:scope=internal:level=high], "msg: 'unmarshal task log % X', workaround: ''" -ErrWorkerLogFetchLogIter,[code=40016:class=dm-worker:scope=internal:level=high], "msg: 'fetch logs from meta with handle pointer %+v', workaround: ''" -ErrWorkerLogGetTaskLog,[code=40017:class=dm-worker:scope=internal:level=high], "msg: 'get task log %d from leveldb', workaround: ''" -ErrWorkerLogUnmarshalBinary,[code=40018:class=dm-worker:scope=internal:level=high], "msg: 'unmarshal task log binary % X', workaround: ''" -ErrWorkerLogForwardPointer,[code=40019:class=dm-worker:scope=internal:level=high], "msg: 'forward handled pointer to %d', workaround: ''" -ErrWorkerLogMarshalTask,[code=40020:class=dm-worker:scope=internal:level=high], "msg: 'marshal task log %+v', workaround: ''" -ErrWorkerLogSaveTask,[code=40021:class=dm-worker:scope=internal:level=high], "msg: 'save task log %+v', workaround: ''" -ErrWorkerLogDeleteKV,[code=40022:class=dm-worker:scope=internal:level=high], "msg: 'delete kv with prefix % X until % X', workaround: ''" -ErrWorkerLogDeleteKVIter,[code=40023:class=dm-worker:scope=internal:level=high], "msg: 'iterate kv with prefix % X', workaround: ''" -ErrWorkerLogUnmarshalTaskMeta,[code=40024:class=dm-worker:scope=internal:level=high], "msg: 'unmarshal task meta % X', workaround: ''" -ErrWorkerLogFetchTaskFromMeta,[code=40025:class=dm-worker:scope=internal:level=high], "msg: 'fetch tasks from meta with prefix % X', workaround: ''" -ErrWorkerLogVerifyTaskMeta,[code=40026:class=dm-worker:scope=internal:level=high], "msg: '', workaround: ''" -ErrWorkerLogSaveTaskMeta,[code=40027:class=dm-worker:scope=internal:level=high], "msg: 'save task meta %s into kv db', workaround: ''" -ErrWorkerLogGetTaskMeta,[code=40028:class=dm-worker:scope=internal:level=high], "msg: 'get task meta %s from kv db', workaround: ''" -ErrWorkerLogDeleteTaskMeta,[code=40029:class=dm-worker:scope=internal:level=high], "msg: 'delete task meta %s from kv db', workaround: ''" -ErrWorkerMetaTomlTransform,[code=40030:class=dm-worker:scope=internal:level=high], "msg: 'meta toml transform', workaround: ''" -ErrWorkerMetaOldFileStat,[code=40031:class=dm-worker:scope=internal:level=high], "msg: 'get old file stat', workaround: ''" -ErrWorkerMetaOldReadFile,[code=40032:class=dm-worker:scope=internal:level=high], "msg: 'read old metadata file %s', workaround: ''" -ErrWorkerMetaEncodeTask,[code=40033:class=dm-worker:scope=internal:level=high], "msg: 'encode task %v', workaround: ''" -ErrWorkerMetaRemoveOldDir,[code=40034:class=dm-worker:scope=internal:level=high], "msg: 'remove old meta dir', workaround: ''" -ErrWorkerMetaTaskLogNotFound,[code=40035:class=dm-worker:scope=internal:level=high], "msg: 'any task operation log not found', workaround: ''" -ErrWorkerMetaHandleTaskOrder,[code=40036:class=dm-worker:scope=internal:level=high], "msg: 'please handle task operation order by log ID, the log need to be handled is %+v, not %+v', workaround: ''" -ErrWorkerMetaOpenTxn,[code=40037:class=dm-worker:scope=internal:level=high], "msg: 'open kv db txn', workaround: ''" -ErrWorkerMetaCommitTxn,[code=40038:class=dm-worker:scope=internal:level=high], "msg: 'commit kv db txn', workaround: ''" -ErrWorkerRelayStageNotValid,[code=40039:class=dm-worker:scope=internal:level=high], "msg: 'current stage is %s, %s required, relay op %s', workaround: ''" -ErrWorkerRelayOperNotSupport,[code=40040:class=dm-worker:scope=internal:level=high], "msg: 'operation %s not supported', workaround: ''" -ErrWorkerOpenKVDBFile,[code=40041:class=dm-worker:scope=internal:level=high], "msg: 'open kv db file', workaround: ''" -ErrWorkerUpgradeCheckKVDir,[code=40042:class=dm-worker:scope=internal:level=high], "msg: '', workaround: ''" -ErrWorkerMarshalVerBinary,[code=40043:class=dm-worker:scope=internal:level=high], "msg: 'marshal version %s to binary data', workaround: ''" -ErrWorkerUnmarshalVerBinary,[code=40044:class=dm-worker:scope=internal:level=high], "msg: 'unmarshal version from data % X', workaround: ''" -ErrWorkerGetVersionFromKV,[code=40045:class=dm-worker:scope=internal:level=high], "msg: 'load version with key %v from levelDB', workaround: ''" -ErrWorkerSaveVersionToKV,[code=40046:class=dm-worker:scope=internal:level=high], "msg: 'save version %v into levelDB with key %v', workaround: ''" -ErrWorkerVerAutoDowngrade,[code=40047:class=dm-worker:scope=internal:level=high], "msg: 'the previous version %s is newer than current %s, automatic downgrade is not supported now, please handle it manually', workaround: ''" -ErrWorkerStartService,[code=40048:class=dm-worker:scope=internal:level=high], "msg: 'start server', workaround: ''" -ErrWorkerNoStart,[code=40070:class=dm-worker:scope=internal:level=high], "msg: 'worker has not started', workaround: ''" -ErrWorkerAlreadyClosed,[code=40049:class=dm-worker:scope=internal:level=high], "msg: 'worker already closed', workaround: ''" -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: '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: ''" -ErrWorkerOperSyncUnitOnly,[code=40056:class=dm-worker:scope=internal:level=high], "msg: 'such operation is only available for syncer, but now syncer is not running. current unit is %s', workaround: ''" -ErrWorkerRelayUnitStage,[code=40057:class=dm-worker:scope=internal:level=high], "msg: 'Worker's relay log unit in invalid stage: %s', workaround: ''" -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: '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)', 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', 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: '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: ''" -ErrTracerParamNotValid,[code=42006:class=dm-tracer:scope=internal:level=medium], "msg: 'param %s value %s not valid', workaround: ''" -ErrTracerPostMethodOnly,[code=42007:class=dm-tracer:scope=internal:level=medium], "msg: 'post method only', workaround: ''" -ErrTracerEventAssertionFail,[code=42008:class=dm-tracer:scope=internal:level=high], "msg: 'type %s event: %v not valid', workaround: ''" -ErrTracerEventTypeNotValid,[code=42009:class=dm-tracer:scope=internal:level=high], "msg: 'trace event type %d not valid', workaround: ''" -ErrTracerStartService,[code=42010:class=dm-tracer:scope=internal:level=high], "msg: 'start server', workaround: ''" -ErrSchemaTrackerInvalidJSON,[code=44001:class=schema-tracker:scope=downstream:level=high], "msg: 'saved schema of `%s`.`%s` is not proper JSON', workaround: ''" -ErrSchemaTrackerCannotCreateSchema,[code=44002:class=schema-tracker:scope=internal:level=high], "msg: 'failed to create database for `%s` in schema tracker', workaround: ''" -ErrSchemaTrackerCannotCreateTable,[code=44003:class=schema-tracker:scope=internal:level=high], "msg: 'failed to create table for `%s`.`%s` in schema tracker', workaround: ''" -ErrSchemaTrackerCannotSerialize,[code=44004:class=schema-tracker:scope=internal:level=high], "msg: 'failed to serialize table info for `%s`.`%s`', workaround: ''" -ErrSchemaTrackerCannotGetTable,[code=44005:class=schema-tracker:scope=internal:level=high], "msg: 'cannot get table info for `%s`.`%s` from schema tracker', workaround: ''" -ErrSchemaTrackerCannotExecDDL,[code=44006:class=schema-tracker:scope=internal:level=high], "msg: 'cannot track DDL: %s', workaround: ''" -ErrSchemaTrackerCannotFetchDownstreamTable,[code=44007:class=schema-tracker:scope=downstream:level=medium], "msg: 'cannot fetch downstream table schema of `%s`.`%s` to initialize upstream schema `%s`.`%s` in schema tracker', workaround: ''" -ErrSchemaTrackerCannotParseDownstreamTable,[code=44008:class=schema-tracker:scope=internal:level=high], "msg: 'cannot parse downstream table schema of `%s`.`%s` to initialize upstream schema `%s`.`%s` in schema tracker', workaround: ''" -ErrSchedulerNotStarted,[code=46001:class=scheduler:scope=internal:level=high], "msg: 'the scheduler has not started', workaround: ''" -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', 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: ''" -ErrSchedulerSourcesUnbound,[code=46009:class=dm-master:scope=internal:level=medium], "msg: 'sources %v have not bound', workaround: ''" -ErrSchedulerSourceOpTaskExist,[code=46010:class=dm-master:scope=internal:level=medium], "msg: 'source with name % need to operate with tasks %v exist', workaround: ''" -ErrSchedulerRelayStageInvalidUpdate,[code=46011:class=scheduler:scope=internal:level=medium], "msg: 'invalid new expectant relay stage %s', workaround: ''" -ErrSchedulerRelayStageSourceNotExist,[code=46012:class=scheduler:scope=internal:level=medium], "msg: 'sources %v need to update expectant relay stage not exist', workaround: ''" -ErrSchedulerMultiTask,[code=46013:class=scheduler:scope=internal:level=medium], "msg: 'the scheduler cannot perform multiple different tasks %v in one operation', workaround: ''" -ErrSchedulerSubTaskExist,[code=46014:class=scheduler:scope=internal:level=medium], "msg: 'subtasks with name %s for sources %v already exist', workaround: ''" -ErrSchedulerSubTaskStageInvalidUpdate,[code=46015:class=dm-master:scope=internal:level=medium], "msg: 'invalid new expectant subtask stage %s', workaround: ''" -ErrSchedulerSubTaskOpTaskNotExist,[code=46016:class=dm-master:scope=internal:level=medium], "msg: 'subtasks with name %s need to be operate not exist', workaround: ''" -ErrSchedulerSubTaskOpSourceNotExist,[code=46017:class=dm-master:scope=internal:level=medium], "msg: 'sources %v need to be operate not exist', workaround: ''" +ErrDBDriverError,[code=10001:class=database:scope=not-set:level=high], "Message: 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], "Message: 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], "Message: 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], "Message: unexpect database error: %s" +ErrDBQueryFailed,[code=10005:class=database:scope=not-set:level=high], "Message: query statement failed: %s" +ErrDBExecuteFailed,[code=10006:class=database:scope=not-set:level=high], "Message: execute statement failed: %s" +ErrParseMydumperMeta,[code=11001:class=functional:scope=internal:level=high], "Message: parse mydumper metadata error: %s" +ErrGetFileSize,[code=11002:class=functional:scope=internal:level=high], "Message: get file %s size" +ErrDropMultipleTables,[code=11003:class=functional:scope=internal:level=high], "Message: 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], "Message: 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], "Message: 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], "Message: 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], "Message: 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], "Message: restore ast node" +ErrParseGTID,[code=11009:class=functional:scope=internal:level=high], "Message: parse GTID %s" +ErrNotSupportedFlavor,[code=11010:class=functional:scope=internal:level=high], "Message: flavor %s not supported, Workaround: Please check `flavor` config in source configuration file." +ErrNotMySQLGTID,[code=11011:class=functional:scope=internal:level=high], "Message: %s is not mysql GTID set" +ErrNotMariaDBGTID,[code=11012:class=functional:scope=internal:level=high], "Message: %s is not mariadb GTID set" +ErrNotUUIDString,[code=11013:class=functional:scope=internal:level=high], "Message: %v is not UUID string" +ErrMariaDBDomainID,[code=11014:class=functional:scope=internal:level=high], "Message: %v is not uint32" +ErrInvalidServerID,[code=11015:class=functional:scope=internal:level=high], "Message: invalid server id %s" +ErrGetSQLModeFromStr,[code=11016:class=functional:scope=internal:level=high], "Message: get sql mode from string literal %s" +ErrVerifySQLOperateArgs,[code=11017:class=functional:scope=internal:level=low], "Workaround: Please make sure the args are correct." +ErrStatFileSize,[code=11018:class=functional:scope=internal:level=high], "Message: get file statfs" +ErrReaderAlreadyRunning,[code=11019:class=functional:scope=internal:level=high], "Message: binlog reader is already running" +ErrReaderAlreadyStarted,[code=11020:class=functional:scope=internal:level=high], "Message: stage %s, expect %s, already started" +ErrReaderStateCannotClose,[code=11021:class=functional:scope=internal:level=high], "Message: stage %s, expect %s, can not close" +ErrReaderShouldStartSync,[code=11022:class=functional:scope=internal:level=high], "Message: stage %s, expect %s" +ErrEmptyRelayDir,[code=11023:class=functional:scope=internal:level=high], "Message: empty relay dir, Workaround: Please check `relay-dir` config in task configuration file." +ErrReadDir,[code=11024:class=functional:scope=internal:level=high], "Message: read dir: %s" +ErrBaseFileNotFound,[code=11025:class=functional:scope=internal:level=high], "Message: base file %s in directory %s not found" +ErrBinFileCmpCondNotSupport,[code=11026:class=functional:scope=internal:level=high], "Message: cmp condition %v not supported" +ErrBinlogFileNotValid,[code=11027:class=functional:scope=internal:level=high], "Message: binlog file %s not valid" +ErrBinlogFilesNotFound,[code=11028:class=functional:scope=internal:level=high], "Message: binlog files in dir %s not found" +ErrGetRelayLogStat,[code=11029:class=functional:scope=internal:level=high], "Message: get stat for relay log %s" +ErrAddWatchForRelayLogDir,[code=11030:class=functional:scope=internal:level=high], "Message: add watch for relay log dir %s" +ErrWatcherStart,[code=11031:class=functional:scope=internal:level=high], "Message: watcher starts for relay log dir %s" +ErrWatcherChanClosed,[code=11032:class=functional:scope=internal:level=high], "Message: watcher's %s chan for relay log dir %s closed" +ErrWatcherChanRecvError,[code=11033:class=functional:scope=internal:level=high], "Message: watcher receives error, relay log dir %s" +ErrRelayLogFileSizeSmaller,[code=11034:class=functional:scope=internal:level=high], "Message: 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], "Message: binlog file must be specified" +ErrNoRelayLogMatchPos,[code=11036:class=functional:scope=internal:level=high], "Message: no relay log files in dir %s match pos %s" +ErrFirstRelayLogNotMatchPos,[code=11037:class=functional:scope=internal:level=high], "Message: the first relay log %s not match the start pos %v" +ErrParserParseRelayLog,[code=11038:class=functional:scope=internal:level=high], "Message: parse relay log file %s" +ErrNoSubdirToSwitch,[code=11039:class=functional:scope=internal:level=high], "Message: parse for previous sub relay directory finished, but no next sub directory need to switch" +ErrNeedSyncAgain,[code=11040:class=functional:scope=internal:level=high], "Message: Last sync error or closed, try sync and get event again" +ErrSyncClosed,[code=11041:class=functional:scope=internal:level=high], "Message: Sync was closed" +ErrSchemaTableNameNotValid,[code=11042:class=functional:scope=internal:level=high], "Message: table name %s not valid" +ErrGenTableRouter,[code=11043:class=functional:scope=internal:level=high], "Message: generate table router, Workaround: Please check `routes` config in task configuration file." +ErrEncryptSecretKeyNotValid,[code=11044:class=functional:scope=internal:level=high], "Message: key size should be 16, 24 or 32, but input key's size is %d" +ErrEncryptGenCipher,[code=11045:class=functional:scope=internal:level=high], "Message: generate cipher" +ErrEncryptGenIV,[code=11046:class=functional:scope=internal:level=high], "Message: generate iv" +ErrCiphertextLenNotValid,[code=11047:class=functional:scope=internal:level=high], "Message: ciphertext's length should be greater than %d, but got %d not valid" +ErrCiphertextContextNotValid,[code=11048:class=functional:scope=internal:level=high], "Message: ciphertext's content not valid" +ErrInvalidBinlogPosStr,[code=11049:class=functional:scope=internal:level=high], "Message: invalid mysql position string: %s" +ErrEncCipherTextBase64Decode,[code=11050:class=functional:scope=internal:level=high], "Message: decode base64 encoded password %s" +ErrBinlogWriteBinaryData,[code=11051:class=functional:scope=internal:level=high] +ErrBinlogWriteDataToBuffer,[code=11052:class=functional:scope=internal:level=high] +ErrBinlogHeaderLengthNotValid,[code=11053:class=functional:scope=internal:level=high], "Message: header length should be %d, but got %d not valid" +ErrBinlogEventDecode,[code=11054:class=functional:scope=internal:level=high], "Message: decode % X" +ErrBinlogEmptyNextBinName,[code=11055:class=functional:scope=internal:level=high], "Message: empty next binlog name not valid" +ErrBinlogParseSID,[code=11056:class=functional:scope=internal:level=high] +ErrBinlogEmptyGTID,[code=11057:class=functional:scope=internal:level=high], "Message: empty GTID set not valid" +ErrBinlogGTIDSetNotValid,[code=11058:class=functional:scope=internal:level=high], "Message: GTID set %s with flavor %s not valid" +ErrBinlogGTIDMySQLNotValid,[code=11059:class=functional:scope=internal:level=high], "Message: GTID set string %s for MySQL not valid" +ErrBinlogGTIDMariaDBNotValid,[code=11060:class=functional:scope=internal:level=high], "Message: GTID set string %s for MariaDB not valid" +ErrBinlogMariaDBServerIDMismatch,[code=11061:class=functional:scope=internal:level=high], "Message: server_id mismatch, in GTID (%d), in event header/server_id (%d)" +ErrBinlogOnlyOneGTIDSupport,[code=11062:class=functional:scope=internal:level=high], "Message: only one GTID in set is supported, but got %d (%s)" +ErrBinlogOnlyOneIntervalInUUID,[code=11063:class=functional:scope=internal:level=high], "Message: only one Interval in UUIDSet is supported, but got %d (%s)" +ErrBinlogIntervalValueNotValid,[code=11064:class=functional:scope=internal:level=high], "Message: Interval's Stop should equal to Start+1, but got %+v (%s)" +ErrBinlogEmptyQuery,[code=11065:class=functional:scope=internal:level=high], "Message: empty query not valid" +ErrBinlogTableMapEvNotValid,[code=11066:class=functional:scope=internal:level=high], "Message: empty schema (% X) or table (% X) or column type (% X)" +ErrBinlogExpectFormatDescEv,[code=11067:class=functional:scope=internal:level=high], "Message: expect FormatDescriptionEvent, but got %+v" +ErrBinlogExpectTableMapEv,[code=11068:class=functional:scope=internal:level=high], "Message: expect TableMapEvent, but got %+v" +ErrBinlogExpectRowsEv,[code=11069:class=functional:scope=internal:level=high], "Message: expect event with type (%d), but got %+v" +ErrBinlogUnexpectedEv,[code=11070:class=functional:scope=internal:level=high], "Message: unexpected event %+v" +ErrBinlogParseSingleEv,[code=11071:class=functional:scope=internal:level=high] +ErrBinlogEventTypeNotValid,[code=11072:class=functional:scope=internal:level=high], "Message: event type %d not valid" +ErrBinlogEventNoRows,[code=11073:class=functional:scope=internal:level=high], "Message: no rows not valid" +ErrBinlogEventNoColumns,[code=11074:class=functional:scope=internal:level=high], "Message: no columns not valid" +ErrBinlogEventRowLengthNotEq,[code=11075:class=functional:scope=internal:level=high], "Message: length of row (%d) not equal to length of column-type (%d)" +ErrBinlogColumnTypeNotSupport,[code=11076:class=functional:scope=internal:level=high], "Message: column type %d in binlog not supported" +ErrBinlogGoMySQLTypeNotSupport,[code=11077:class=functional:scope=internal:level=high], "Message: go-mysql type %d in event generator not supported" +ErrBinlogColumnTypeMisMatch,[code=11078:class=functional:scope=internal:level=high], "Message: value %+v (type %v) with column type %v not valid" +ErrBinlogDummyEvSizeTooSmall,[code=11079:class=functional:scope=internal:level=high], "Message: required dummy event size (%d) is too small, the minimum supported size is %d" +ErrBinlogFlavorNotSupport,[code=11080:class=functional:scope=internal:level=high], "Message: flavor %s not supported" +ErrBinlogDMLEmptyData,[code=11081:class=functional:scope=internal:level=high], "Message: empty data not valid" +ErrBinlogLatestGTIDNotInPrev,[code=11082:class=functional:scope=internal:level=high], "Message: latest GTID %s is not one of the latest previousGTIDs %s not valid" +ErrBinlogReadFileByGTID,[code=11083:class=functional:scope=internal:level=high], "Message: read from file by GTID not supported" +ErrBinlogWriterNotStateNew,[code=11084:class=functional:scope=internal:level=high], "Message: stage %s, expect %s, already started" +ErrBinlogWriterStateCannotClose,[code=11085:class=functional:scope=internal:level=high], "Message: stage %s, expect %s, can not close" +ErrBinlogWriterNeedStart,[code=11086:class=functional:scope=internal:level=high], "Message: stage %s, expect %s" +ErrBinlogWriterOpenFile,[code=11087:class=functional:scope=internal:level=high], "Message: open file" +ErrBinlogWriterGetFileStat,[code=11088:class=functional:scope=internal:level=high], "Message: get stat for %s" +ErrBinlogWriterWriteDataLen,[code=11089:class=functional:scope=internal:level=high], "Message: data length %d" +ErrBinlogWriterFileNotOpened,[code=11090:class=functional:scope=internal:level=high], "Message: file %s not opened" +ErrBinlogWriterFileSync,[code=11091:class=functional:scope=internal:level=high], "Message: sync file" +ErrBinlogPrevGTIDEvNotValid,[code=11092:class=functional:scope=internal:level=high], "Message: the event should be a PreviousGTIDsEvent in go-mysql, but got %T" +ErrBinlogDecodeMySQLGTIDSet,[code=11093:class=functional:scope=internal:level=high], "Message: decode from % X" +ErrBinlogNeedMariaDBGTIDSet,[code=11094:class=functional:scope=internal:level=high], "Message: the event should be a MariadbGTIDListEvent, but got %T" +ErrBinlogParseMariaDBGTIDSet,[code=11095:class=functional:scope=internal:level=high], "Message: parse MariaDB GTID set" +ErrBinlogMariaDBAddGTIDSet,[code=11096:class=functional:scope=internal:level=high], "Message: add set %v to GTID set" +ErrTracingEventDataNotValid,[code=11097:class=functional:scope=internal:level=high], "Message: invalid event data for type: %s" +ErrTracingUploadData,[code=11098:class=functional:scope=internal:level=high], "Message: upload event" +ErrTracingEventTypeNotValid,[code=11099:class=functional:scope=internal:level=high], "Message: invalid event type %s, will not process" +ErrTracingGetTraceCode,[code=11100:class=functional:scope=internal:level=high], "Message: failed to get code information from runtime.Caller" +ErrTracingDataChecksum,[code=11101:class=functional:scope=internal:level=high], "Message: calc data checksum" +ErrTracingGetTSO,[code=11102:class=functional:scope=internal:level=high], "Message: get tso" +ErrBackoffArgsNotValid,[code=11103:class=functional:scope=internal:level=medium], "Message: backoff argument %s value %v not valid" +ErrInitLoggerFail,[code=11104:class=functional:scope=internal:level=medium], "Message: init logger failed" +ErrGTIDTruncateInvalid,[code=11105:class=functional:scope=internal:level=high], "Message: truncate GTID sets %v to %v not valid" +ErrRelayLogGivenPosTooBig,[code=11106:class=functional:scope=internal:level=high], "Message: 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], "Message: fail to campaign leader: %s" +ErrElectionGetLeaderIDFail,[code=11108:class=functional:scope=internal:level=medium], "Message: fail to get leader ID" +ErrBinlogInvalidFilenameWithUUIDSuffix,[code=11109:class=functional:scope=internal:level=high], "Message: invalid binlog filename with uuid suffix %s" +ErrDecodeEtcdKeyFail,[code=11110:class=functional:scope=internal:level=medium], "Message: fail to decode etcd key: %s" +ErrShardDDLOptimismTrySyncFail,[code=11111:class=functional:scope=internal:level=medium], "Message: 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], "Message: 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], "Message: %s, Workaround: Please check the configuration file has correct TOML format." +ErrConfigTaskYamlTransform,[code=20003:class=config:scope=internal:level=medium], "Message: %s, Workaround: Please check the configuration file has correct YAML format." +ErrConfigTaskNameEmpty,[code=20004:class=config:scope=internal:level=medium], "Message: 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], "Message: empty source-id not valid, Workaround: Please check the `source-id` config in configuration file." +ErrConfigTooLongSourceID,[code=20006:class=config:scope=internal:level=medium], "Message: 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], "Message: 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], "Message: invalid timezone string: %s, Workaround: Please check the `timezone` config in task configuration file." +ErrConfigParseFlagSet,[code=20009:class=config:scope=internal:level=medium], "Message: parse subtask config flag set" +ErrConfigDecryptDBPassword,[code=20010:class=config:scope=internal:level=medium], "Message: decrypt DB password %s failed" +ErrConfigMetaNoBinlogName,[code=20011:class=config:scope=internal:level=medium], "Message: binlog-name must specify, Workaround: Please check the `meta` config in task configuration file." +ErrConfigMySQLInstNotFound,[code=20012:class=config:scope=internal:level=medium], "Message: 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], "Message: 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], "Message: 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], "Message: 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], "Message: 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], "Message: 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], "Message: read config file %v" +ErrConfigNeedUniqueTaskName,[code=20019:class=config:scope=internal:level=medium], "Message: 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], "Message: 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], "Message: must specify target-database, Workaround: Please check the `target-database` config in task configuration file." +ErrConfigMetadataNotSet,[code=20022:class=config:scope=internal:level=medium], "Message: 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], "Message: 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], "Message: 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], "Message: 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], "Message: 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], "Message: 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], "Message: 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], "Message: 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], "Message: 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], "Message: 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], "Message: 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], "Message: 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] +ErrBinlogInvalidFilename,[code=22002:class=binlog-op:scope=internal:level=high], "Message: invalid binlog filename" +ErrBinlogParsePosFromStr,[code=22003:class=binlog-op:scope=internal:level=high] +ErrCheckpointInvalidTaskMode,[code=24001:class=checkpoint:scope=internal:level=medium], "Message: invalid task mode: %s" +ErrCheckpointSaveInvalidPos,[code=24002:class=checkpoint:scope=internal:level=high], "Message: save point %s is older than current location %s" +ErrCheckpointInvalidTableFile,[code=24003:class=checkpoint:scope=internal:level=medium], "Message: invalid db table sql file - %s" +ErrCheckpointDBNotExistInFile,[code=24004:class=checkpoint:scope=internal:level=medium], "Message: db (%s) not exist in data files, but in checkpoint" +ErrCheckpointTableNotExistInFile,[code=24005:class=checkpoint:scope=internal:level=medium], "Message: table (%s) not exist in db (%s) data files, but in checkpoint" +ErrCheckpointRestoreCountGreater,[code=24006:class=checkpoint:scope=internal:level=medium], "Message: restoring count greater than total count for table[%v]" +ErrTaskCheckSameTableName,[code=26001:class=task-check:scope=internal:level=medium], "Message: 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], "Message: 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], "Message: generate table router error, Workaround: Please check the `routes` config in task configuration file." +ErrTaskCheckGenColumnMapping,[code=26004:class=task-check:scope=internal:level=medium], "Message: 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], "Message: %s: %v\n detail: %v" +ErrTaskCheckGenBAList,[code=26006:class=task-check:scope=internal:level=medium], "Message: 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], "Message: parse server-uuid.index" +ErrRelayParseUUIDSuffix,[code=28002:class=relay-event-lib:scope=internal:level=high], "Message: UUID (with suffix) %s not valid" +ErrRelayUUIDWithSuffixNotFound,[code=28003:class=relay-event-lib:scope=internal:level=high], "Message: no UUID (with suffix) matched %s found in %s, all UUIDs are %v" +ErrRelayGenFakeRotateEvent,[code=28004:class=relay-event-lib:scope=internal:level=high], "Message: generate fake rotate event" +ErrRelayNoValidRelaySubDir,[code=28005:class=relay-event-lib:scope=internal:level=high], "Message: 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], "Message: UUID %s suffix %d should be 1 larger than previous suffix %d" +ErrRelayUUIDSuffixLessThanPrev,[code=30002:class=relay-unit:scope=internal:level=high], "Message: previous UUID %s has suffix larger than %s" +ErrRelayLoadMetaData,[code=30003:class=relay-unit:scope=internal:level=high], "Message: load meta data" +ErrRelayBinlogNameNotValid,[code=30004:class=relay-unit:scope=internal:level=high], "Message: 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], "Message: no current UUID set" +ErrRelayFlushLocalMeta,[code=30006:class=relay-unit:scope=internal:level=high], "Message: flush local meta" +ErrRelayUpdateIndexFile,[code=30007:class=relay-unit:scope=internal:level=high], "Message: update UUID index file %s" +ErrRelayLogDirpathEmpty,[code=30008:class=relay-unit:scope=internal:level=high], "Message: dirpath is empty, Workaround: Please check the `relay-dir` config in source config file." +ErrRelayReaderNotStateNew,[code=30009:class=relay-unit:scope=internal:level=high], "Message: stage %s, expect %s, already started" +ErrRelayReaderStateCannotClose,[code=30010:class=relay-unit:scope=internal:level=high], "Message: stage %s, expect %s, can not close" +ErrRelayReaderNeedStart,[code=30011:class=relay-unit:scope=internal:level=high], "Message: stage %s, expect %s" +ErrRelayTCPReaderStartSync,[code=30012:class=relay-unit:scope=upstream:level=high], "Message: start sync from position %s" +ErrRelayTCPReaderNilGTID,[code=30013:class=relay-unit:scope=internal:level=high], "Message: nil GTID set not valid" +ErrRelayTCPReaderStartSyncGTID,[code=30014:class=relay-unit:scope=upstream:level=high], "Message: start sync from GTID set %s" +ErrRelayTCPReaderGetEvent,[code=30015:class=relay-unit:scope=upstream:level=high], "Message: TCPReader get relay event with error" +ErrRelayWriterNotStateNew,[code=30016:class=relay-unit:scope=internal:level=high], "Message: stage %s, expect %s, already started" +ErrRelayWriterStateCannotClose,[code=30017:class=relay-unit:scope=internal:level=high], "Message: stage %s, expect %s, can not close" +ErrRelayWriterNeedStart,[code=30018:class=relay-unit:scope=internal:level=high], "Message: stage %s, expect %s" +ErrRelayWriterNotOpened,[code=30019:class=relay-unit:scope=internal:level=high], "Message: no underlying writer opened" +ErrRelayWriterExpectRotateEv,[code=30020:class=relay-unit:scope=internal:level=high], "Message: except RotateEvent, but got %+v" +ErrRelayWriterRotateEvWithNoWriter,[code=30021:class=relay-unit:scope=internal:level=high], "Message: non-fake RotateEvent %+v received, but no binlog file opened" +ErrRelayWriterStatusNotValid,[code=30022:class=relay-unit:scope=internal:level=high], "Message: invalid status type %T of the underlying writer" +ErrRelayWriterGetFileStat,[code=30023:class=relay-unit:scope=internal:level=high], "Message: get stat for %s" +ErrRelayWriterLatestPosGTFileSize,[code=30024:class=relay-unit:scope=internal:level=high], "Message: latest pos %d greater than file size %d, should not happen" +ErrRelayWriterFileOperate,[code=30025:class=relay-unit:scope=internal:level=high] +ErrRelayCheckBinlogFileHeaderExist,[code=30026:class=relay-unit:scope=internal:level=high] +ErrRelayCheckFormatDescEventExist,[code=30027:class=relay-unit:scope=internal:level=high] +ErrRelayCheckFormatDescEventParseEv,[code=30028:class=relay-unit:scope=internal:level=high], "Message: parse %s" +ErrRelayCheckIsDuplicateEvent,[code=30029:class=relay-unit:scope=internal:level=high] +ErrRelayUpdateGTID,[code=30030:class=relay-unit:scope=internal:level=high], "Message: update GTID set %v with GTID %s" +ErrRelayNeedPrevGTIDEvBeforeGTIDEv,[code=30031:class=relay-unit:scope=internal:level=high], "Message: should have a PreviousGTIDsEvent before the GTIDEvent %+v" +ErrRelayNeedMaGTIDListEvBeforeGTIDEv,[code=30032:class=relay-unit:scope=internal:level=high], "Message: should have a MariadbGTIDListEvent before the MariadbGTIDEvent %+v" +ErrRelayMkdir,[code=30033:class=relay-unit:scope=internal:level=high], "Message: relay mkdir" +ErrRelaySwitchMasterNeedGTID,[code=30034:class=relay-unit:scope=internal:level=high], "Message: 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], "Message: this strategy is purging" +ErrRelayOtherStrategyIsPurging,[code=30036:class=relay-unit:scope=internal:level=high], "Message: %s is purging" +ErrRelayPurgeIsForbidden,[code=30037:class=relay-unit:scope=internal:level=high], "Message: relay log purge is forbidden temporarily, because %s, Workaround: Please try again later." +ErrRelayNoActiveRelayLog,[code=30038:class=relay-unit:scope=internal:level=high], "Message: no active relay log file found" +ErrRelayPurgeRequestNotValid,[code=30039:class=relay-unit:scope=internal:level=high], "Message: request %+v not valid" +ErrRelayTrimUUIDNotFound,[code=30040:class=relay-unit:scope=internal:level=high], "Message: UUID %s in UUIDs %v not found" +ErrRelayRemoveFileFail,[code=30041:class=relay-unit:scope=internal:level=high], "Message: remove relay log %s %s" +ErrRelayPurgeArgsNotValid,[code=30042:class=relay-unit:scope=internal:level=high], "Message: args (%T) %+v not valid" +ErrPreviousGTIDsNotValid,[code=30043:class=relay-unit:scope=internal:level=high], "Message: previousGTIDs %s not valid" +ErrDumpUnitRuntime,[code=32001:class=dump-unit:scope=internal:level=high], "Message: mydumper runs with error" +ErrDumpUnitGenTableRouter,[code=32002:class=dump-unit:scope=internal:level=high], "Message: generate table router, Workaround: Please check `routes` config in task configuration file." +ErrDumpUnitGenBAList,[code=32003:class=dump-unit:scope=internal:level=high], "Message: 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], "Message: generate schema file, Workaround: Please check the `loaders` config in task configuration file." +ErrLoadUnitInvalidFileEnding,[code=34002:class=load-unit:scope=internal:level=high], "Message: corresponding ending of sql: ')' not found" +ErrLoadUnitParseQuoteValues,[code=34003:class=load-unit:scope=internal:level=high], "Message: parse quote values error" +ErrLoadUnitDoColumnMapping,[code=34004:class=load-unit:scope=internal:level=high], "Message: mapping row data %v for table %+v" +ErrLoadUnitReadSchemaFile,[code=34005:class=load-unit:scope=internal:level=high], "Message: read schema from sql file %s" +ErrLoadUnitParseStatement,[code=34006:class=load-unit:scope=internal:level=high], "Message: parse statement %s" +ErrLoadUnitNotCreateTable,[code=34007:class=load-unit:scope=internal:level=high], "Message: statement %s for %s/%s is not create table statement" +ErrLoadUnitDispatchSQLFromFile,[code=34008:class=load-unit:scope=internal:level=high], "Message: dispatch sql" +ErrLoadUnitInvalidInsertSQL,[code=34009:class=load-unit:scope=internal:level=high], "Message: invalid insert sql %s" +ErrLoadUnitGenTableRouter,[code=34010:class=load-unit:scope=internal:level=high], "Message: generate table router, Workaround: Please check `routes` config in task configuration file." +ErrLoadUnitGenColumnMapping,[code=34011:class=load-unit:scope=internal:level=high], "Message: 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], "Message: invalid data sql file, cannot find db - %s" +ErrLoadUnitNoTableFile,[code=34013:class=load-unit:scope=internal:level=high], "Message: invalid data sql file, cannot find table - %s" +ErrLoadUnitDumpDirNotFound,[code=34014:class=load-unit:scope=internal:level=high], "Message: %s does not exist or it's not a dir" +ErrLoadUnitDuplicateTableFile,[code=34015:class=load-unit:scope=internal:level=high], "Message: invalid table schema file, duplicated item - %s" +ErrLoadUnitGenBAList,[code=34016:class=load-unit:scope=internal:level=high], "Message: 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], "Message: panic error: %v" +ErrSyncUnitInvalidTableName,[code=36002:class=sync-unit:scope=internal:level=high], "Message: extract table name for DML error: %s" +ErrSyncUnitTableNameQuery,[code=36003:class=sync-unit:scope=internal:level=high], "Message: table name parse error: %s" +ErrSyncUnitNotSupportedDML,[code=36004:class=sync-unit:scope=internal:level=high], "Message: DMLNode %v not supported" +ErrSyncUnitAddTableInSharding,[code=36005:class=sync-unit:scope=internal:level=medium], "Message: in sequence sharding, add table, activeDDL: %s, sharding sequence: %s not supported" +ErrSyncUnitDropSchemaTableInSharding,[code=36006:class=sync-unit:scope=internal:level=medium], "Message: in sequence sharding try drop sources %v not supported, activeDDL: %s, sharding sequence: %s" +ErrSyncUnitInvalidShardMeta,[code=36007:class=sync-unit:scope=internal:level=high], "Message: invalid sharding meta data" +ErrSyncUnitDDLWrongSequence,[code=36008:class=sync-unit:scope=internal:level=high], "Message: 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], "Message: activeIdx %d larger than length of global DDLItems: %v" +ErrSyncUnitDupTableGroup,[code=36010:class=sync-unit:scope=internal:level=high], "Message: table group %s exists" +ErrSyncUnitShardingGroupNotFound,[code=36011:class=sync-unit:scope=internal:level=high], "Message: sharding group for `%s`.`%s` not found" +ErrSyncUnitSafeModeSetCount,[code=36012:class=sync-unit:scope=internal:level=high] +ErrSyncUnitCausalityConflict,[code=36013:class=sync-unit:scope=internal:level=high], "Message: some conflicts in causality, must be resolved" +ErrSyncUnitDMLStatementFound,[code=36014:class=sync-unit:scope=internal:level=high], "Message: only support ROW format binlog, unexpected DML statement found in query event" +ErrSyncerUnitBinlogEventFilter,[code=36015:class=sync-unit:scope=internal:level=high] +ErrSyncerUnitInvalidReplicaEvent,[code=36016:class=sync-unit:scope=internal:level=high], "Message: invalid replication event type %v" +ErrSyncerUnitParseStmt,[code=36017:class=sync-unit:scope=internal:level=high] +ErrSyncerUnitUUIDNotLatest,[code=36018:class=sync-unit:scope=internal:level=high], "Message: UUID %s not the latest one in UUIDs %v" +ErrSyncerUnitDDLExecChanCloseOrBusy,[code=36019:class=sync-unit:scope=internal:level=high], "Message: the chan has closed or already in sending" +ErrSyncerUnitDDLChanDone,[code=36020:class=sync-unit:scope=internal:level=high], "Message: canceled from external" +ErrSyncerUnitDDLChanCanceled,[code=36021:class=sync-unit:scope=internal:level=high], "Message: canceled by Close or Renew" +ErrSyncerUnitDDLOnMultipleTable,[code=36022:class=sync-unit:scope=internal:level=high], "Message: 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], "Message: only support inject DDL for sharding group to be synced currently, but got %s" +ErrSyncerUnitInjectDDLWithoutSchema,[code=36024:class=sync-unit:scope=internal:level=low], "Message: injected DDL %s without schema name not valid" +ErrSyncerUnitNotSupportedOperate,[code=36025:class=sync-unit:scope=internal:level=medium], "Message: op %s not supported" +ErrSyncerUnitNilOperatorReq,[code=36026:class=sync-unit:scope=internal:level=medium], "Message: nil request not valid" +ErrSyncerUnitDMLColumnNotMatch,[code=36027:class=sync-unit:scope=internal:level=high], "Message: Column count doesn't match value count: %d (columns) vs %d (values)" +ErrSyncerUnitDMLOldNewValueMismatch,[code=36028:class=sync-unit:scope=internal:level=high], "Message: Old value count doesn't match new value count: %d (old) vs %d (new)" +ErrSyncerUnitDMLPruneColumnMismatch,[code=36029:class=sync-unit:scope=internal:level=high], "Message: prune DML columns and data mismatch in length: %d (columns) %d (data)" +ErrSyncerUnitGenBinlogEventFilter,[code=36030:class=sync-unit:scope=internal:level=high], "Message: generate binlog event filter" +ErrSyncerUnitGenTableRouter,[code=36031:class=sync-unit:scope=internal:level=high], "Message: generate table router, Workaround: Please check `routes` config in task configuration file." +ErrSyncerUnitGenColumnMapping,[code=36032:class=sync-unit:scope=internal:level=high], "Message: generate column mapping, Workaround: Please check the `column-mappings` config in task configuration file." +ErrSyncerUnitDoColumnMapping,[code=36033:class=sync-unit:scope=internal:level=high], "Message: mapping row data %v for table `%s`.`%s`" +ErrSyncerUnitCacheKeyNotFound,[code=36034:class=sync-unit:scope=internal:level=high], "Message: cache key %s in %s not found" +ErrSyncerUnitHeartbeatCheckConfig,[code=36035:class=sync-unit:scope=internal:level=medium], "Workaround: Please check `heartbeat` config in task configuration file." +ErrSyncerUnitHeartbeatRecordExists,[code=36036:class=sync-unit:scope=internal:level=medium], "Message: heartbeat slave record for task %s already exists" +ErrSyncerUnitHeartbeatRecordNotFound,[code=36037:class=sync-unit:scope=internal:level=medium], "Message: heartbeat slave record for task %s not found" +ErrSyncerUnitHeartbeatRecordNotValid,[code=36038:class=sync-unit:scope=internal:level=medium], "Message: heartbeat record %s not valid" +ErrSyncerUnitOnlineDDLInvalidMeta,[code=36039:class=sync-unit:scope=internal:level=high], "Message: online ddl meta invalid" +ErrSyncerUnitOnlineDDLSchemeNotSupport,[code=36040:class=sync-unit:scope=internal:level=high], "Message: 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], "Message: online ddl changes on multiple table: %s not supported" +ErrSyncerUnitGhostApplyEmptyTable,[code=36042:class=sync-unit:scope=internal:level=high], "Message: empty tables not valid" +ErrSyncerUnitGhostRenameTableNotValid,[code=36043:class=sync-unit:scope=internal:level=high], "Message: tables should contain old and new table name" +ErrSyncerUnitGhostRenameToGhostTable,[code=36044:class=sync-unit:scope=internal:level=high], "Message: rename table to gh-ost temporary table %s not supported" +ErrSyncerUnitGhostRenameGhostTblToOther,[code=36045:class=sync-unit:scope=internal:level=high], "Message: rename gh-ost temporary table to other temporary table %s not supported" +ErrSyncerUnitGhostOnlineDDLOnGhostTbl,[code=36046:class=sync-unit:scope=internal:level=high], "Message: online ddl metadata for ghost temporary table `%s`.`%s` not found" +ErrSyncerUnitPTApplyEmptyTable,[code=36047:class=sync-unit:scope=internal:level=high], "Message: empty tables not valid" +ErrSyncerUnitPTRenameTableNotValid,[code=36048:class=sync-unit:scope=internal:level=high], "Message: tables should contain old and new table name" +ErrSyncerUnitPTRenameToPTTable,[code=36049:class=sync-unit:scope=internal:level=high], "Message: rename table to pt temporary table %s not supported" +ErrSyncerUnitPTRenamePTTblToOther,[code=36050:class=sync-unit:scope=internal:level=high], "Message: rename pt temporary table to other temporary table %s not supported" +ErrSyncerUnitPTOnlineDDLOnPTTbl,[code=36051:class=sync-unit:scope=internal:level=high], "Message: online ddl metadata for pt temporary table `%s`.`%s` not found" +ErrSyncerUnitRemoteSteamerWithGTID,[code=36052:class=sync-unit:scope=internal:level=high], "Message: open remote streamer with GTID mode not supported" +ErrSyncerUnitRemoteSteamerStartSync,[code=36053:class=sync-unit:scope=internal:level=high], "Message: start syncing binlog from remote streamer" +ErrSyncerUnitGetTableFromDB,[code=36054:class=sync-unit:scope=internal:level=high], "Message: invalid table `%s`.`%s`" +ErrSyncerUnitFirstEndPosNotFound,[code=36055:class=sync-unit:scope=internal:level=high], "Message: no valid End_log_pos of the first DDL exists for sharding group with source %s" +ErrSyncerUnitResolveCasualityFail,[code=36056:class=sync-unit:scope=internal:level=high], "Message: resolve karam error %v" +ErrSyncerUnitReopenStreamNotSupport,[code=36057:class=sync-unit:scope=internal:level=high], "Message: reopen %T not supported" +ErrSyncerUnitUpdateConfigInSharding,[code=36058:class=sync-unit:scope=internal:level=high], "Message: 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], "Message: process unit not waiting for sharding DDL to sync" +ErrSyncerUnitGenBAList,[code=36060:class=sync-unit:scope=internal:level=high], "Message: 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], "Message: fail to handle ddl job for %s" +ErrSyncerShardDDLConflict,[code=36062:class=sync-unit:scope=internal:level=high], "Message: 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], "Message: failpoint specified error" +ErrMasterSQLOpNilRequest,[code=38001:class=dm-master:scope=internal:level=medium], "Message: nil request not valid" +ErrMasterSQLOpNotSupport,[code=38002:class=dm-master:scope=internal:level=medium], "Message: op %s not supported" +ErrMasterSQLOpWithoutSharding,[code=38003:class=dm-master:scope=internal:level=medium], "Message: operate request without --sharding specified not valid" +ErrMasterGRPCCreateConn,[code=38004:class=dm-master:scope=internal:level=high], "Message: create grpc connection" +ErrMasterGRPCSendOnCloseConn,[code=38005:class=dm-master:scope=internal:level=high], "Message: send request on a closed client" +ErrMasterGRPCClientClose,[code=38006:class=dm-master:scope=internal:level=high], "Message: close rpc client" +ErrMasterGRPCInvalidReqType,[code=38007:class=dm-master:scope=internal:level=high], "Message: invalid request type: %v" +ErrMasterGRPCRequestError,[code=38008:class=dm-master:scope=internal:level=high], "Message: grpc request error" +ErrMasterDeployMapperVerify,[code=38009:class=dm-master:scope=internal:level=high], "Message: user should specify valid relation between source(mysql/mariadb) and dm-worker, config %+v not valid" +ErrMasterConfigParseFlagSet,[code=38010:class=dm-master:scope=internal:level=medium], "Message: parse config flag set" +ErrMasterConfigUnknownItem,[code=38011:class=dm-master:scope=internal:level=medium], "Message: master config contained unknown configuration options: %s" +ErrMasterConfigInvalidFlag,[code=38012:class=dm-master:scope=internal:level=medium], "Message: '%s' is an invalid flag" +ErrMasterConfigTomlTransform,[code=38013:class=dm-master:scope=internal:level=medium], "Message: config toml transform, Workaround: Please check the configuration file has correct TOML format." +ErrMasterConfigTimeoutParse,[code=38014:class=dm-master:scope=internal:level=medium], "Message: parse rpc timeout str" +ErrMasterConfigUpdateCfgFile,[code=38015:class=dm-master:scope=internal:level=high], "Message: update config file" +ErrMasterShardingDDLDiff,[code=38016:class=dm-master:scope=internal:level=high], "Message: 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], "Message: start server" +ErrMasterNoEmitToken,[code=38018:class=dm-master:scope=internal:level=high], "Message: fail to get emit opportunity for source %s" +ErrMasterLockNotFound,[code=38019:class=dm-master:scope=internal:level=high], "Message: 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], "Message: lock %s is resolving" +ErrMasterWorkerCliNotFound,[code=38021:class=dm-master:scope=internal:level=high], "Message: worker %s relevant worker-client not found" +ErrMasterWorkerNotWaitLock,[code=38022:class=dm-master:scope=internal:level=high], "Message: worker %s not waiting for DDL lock %s" +ErrMasterHandleSQLReqFail,[code=38023:class=dm-master:scope=internal:level=high], "Message: request DDL lock %s owner %s handle SQLs request %s fail %s" +ErrMasterOwnerExecDDL,[code=38024:class=dm-master:scope=internal:level=high], "Message: owner %s ExecuteDDL fail" +ErrMasterPartWorkerExecDDLFail,[code=38025:class=dm-master:scope=internal:level=high], "Message: DDL lock %s owner ExecuteDDL successfully, so DDL lock removed. but some dm-workers ExecuteDDL fail, you should to handle dm-worker directly" +ErrMasterWorkerExistDDLLock,[code=38026:class=dm-master:scope=internal:level=high], "Message: worker %s exist ddl lock, Workaround: Please unlock ddl lock first." +ErrMasterGetWorkerCfgExtractor,[code=38027:class=dm-master:scope=internal:level=high] +ErrMasterTaskConfigExtractor,[code=38028:class=dm-master:scope=internal:level=high] +ErrMasterWorkerArgsExtractor,[code=38029:class=dm-master:scope=internal:level=high] +ErrMasterQueryWorkerConfig,[code=38030:class=dm-master:scope=internal:level=high] +ErrMasterOperNotFound,[code=38031:class=dm-master:scope=internal:level=high], "Message: 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], "Message: 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], "Message: 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], "Message: serve http apis to grpc" +ErrMasterHostPortNotValid,[code=38035:class=dm-master:scope=internal:level=high], "Message: 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], "Message: get hostname fail" +ErrMasterGenEmbedEtcdConfigFail,[code=38037:class=dm-master:scope=internal:level=high], "Message: 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], "Message: fail to start embed etcd" +ErrMasterParseURLFail,[code=38039:class=dm-master:scope=internal:level=high], "Message: fail to parse URL %s, Workaround: Please check configs in master configuration file." +ErrMasterJoinEmbedEtcdFail,[code=38040:class=dm-master:scope=internal:level=high], "Message: fail to join embed etcd: %s, Workaround: Please check configs in master configuration file." +ErrMasterInvalidOperateOp,[code=38041:class=dm-master:scope=internal:level=medium], "Message: invalid op %s on %s" +ErrMasterAdvertiseAddrNotValid,[code=38042:class=dm-master:scope=internal:level=high], "Message: 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], "Message: master is not leader, and can't forward request to leader" +ErrMasterIsNotAsyncRequest,[code=38044:class=dm-master:scope=internal:level=medium], "Message: request %s is not an async one, needn't wait for ok" +ErrMasterFailToGetExpectResult,[code=38045:class=dm-master:scope=internal:level=medium], "Message: fail to get expected result" +ErrMasterPessimistNotStarted,[code=38046:class=dm-master:scope=internal:level=medium], "Message: the shardddl pessimist has not started" +ErrMasterOptimistNotStarted,[code=38047:class=dm-master:scope=internal:level=medium], "Message: the shardddl optimist has not started" +ErrMasterMasterNameNotExist,[code=38048:class=dm-master:scope=internal:level=low], "Message: 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], "Message: offline member type %s is invalid, Workaround: Please use master/worker." +ErrWorkerParseFlagSet,[code=40001:class=dm-worker:scope=internal:level=medium], "Message: parse dm-worker config flag set" +ErrWorkerInvalidFlag,[code=40002:class=dm-worker:scope=internal:level=medium], "Message: '%s' is an invalid flag" +ErrWorkerDecodeConfigFromFile,[code=40003:class=dm-worker:scope=internal:level=medium], "Message: toml decode file, Workaround: Please check the configuration file has correct TOML format." +ErrWorkerUndecodedItemFromFile,[code=40004:class=dm-worker:scope=internal:level=medium], "Message: 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], "Message: 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,[code=40006:class=dm-worker:scope=internal:level=medium], "Message: the length of source ID %s is more than max allowed value %d" +ErrWorkerRelayBinlogName,[code=40007:class=dm-worker:scope=internal:level=medium], "Message: relay-binlog-name %s not valid" +ErrWorkerWriteConfigFile,[code=40008:class=dm-worker:scope=internal:level=medium], "Message: write config to local file" +ErrWorkerLogInvalidHandler,[code=40009:class=dm-worker:scope=internal:level=high], "Message: handler is nil, please pass a leveldb.DB or leveldb.Transaction" +ErrWorkerLogPointerInvalid,[code=40010:class=dm-worker:scope=internal:level=high], "Message: not valid length data as pointer % X" +ErrWorkerLogFetchPointer,[code=40011:class=dm-worker:scope=internal:level=high], "Message: fetch handled pointer" +ErrWorkerLogUnmarshalPointer,[code=40012:class=dm-worker:scope=internal:level=high], "Message: unmarshal handle pointer % X" +ErrWorkerLogClearPointer,[code=40013:class=dm-worker:scope=internal:level=high], "Message: clear handled pointer" +ErrWorkerLogTaskKeyNotValid,[code=40014:class=dm-worker:scope=internal:level=high], "Message: not valid length data as task log key % X" +ErrWorkerLogUnmarshalTaskKey,[code=40015:class=dm-worker:scope=internal:level=high], "Message: unmarshal task log % X" +ErrWorkerLogFetchLogIter,[code=40016:class=dm-worker:scope=internal:level=high], "Message: fetch logs from meta with handle pointer %+v" +ErrWorkerLogGetTaskLog,[code=40017:class=dm-worker:scope=internal:level=high], "Message: get task log %d from leveldb" +ErrWorkerLogUnmarshalBinary,[code=40018:class=dm-worker:scope=internal:level=high], "Message: unmarshal task log binary % X" +ErrWorkerLogForwardPointer,[code=40019:class=dm-worker:scope=internal:level=high], "Message: forward handled pointer to %d" +ErrWorkerLogMarshalTask,[code=40020:class=dm-worker:scope=internal:level=high], "Message: marshal task log %+v" +ErrWorkerLogSaveTask,[code=40021:class=dm-worker:scope=internal:level=high], "Message: save task log %+v" +ErrWorkerLogDeleteKV,[code=40022:class=dm-worker:scope=internal:level=high], "Message: delete kv with prefix % X until % X" +ErrWorkerLogDeleteKVIter,[code=40023:class=dm-worker:scope=internal:level=high], "Message: iterate kv with prefix % X" +ErrWorkerLogUnmarshalTaskMeta,[code=40024:class=dm-worker:scope=internal:level=high], "Message: unmarshal task meta % X" +ErrWorkerLogFetchTaskFromMeta,[code=40025:class=dm-worker:scope=internal:level=high], "Message: fetch tasks from meta with prefix % X" +ErrWorkerLogVerifyTaskMeta,[code=40026:class=dm-worker:scope=internal:level=high] +ErrWorkerLogSaveTaskMeta,[code=40027:class=dm-worker:scope=internal:level=high], "Message: save task meta %s into kv db" +ErrWorkerLogGetTaskMeta,[code=40028:class=dm-worker:scope=internal:level=high], "Message: get task meta %s from kv db" +ErrWorkerLogDeleteTaskMeta,[code=40029:class=dm-worker:scope=internal:level=high], "Message: delete task meta %s from kv db" +ErrWorkerMetaTomlTransform,[code=40030:class=dm-worker:scope=internal:level=high], "Message: meta toml transform" +ErrWorkerMetaOldFileStat,[code=40031:class=dm-worker:scope=internal:level=high], "Message: get old file stat" +ErrWorkerMetaOldReadFile,[code=40032:class=dm-worker:scope=internal:level=high], "Message: read old metadata file %s" +ErrWorkerMetaEncodeTask,[code=40033:class=dm-worker:scope=internal:level=high], "Message: encode task %v" +ErrWorkerMetaRemoveOldDir,[code=40034:class=dm-worker:scope=internal:level=high], "Message: remove old meta dir" +ErrWorkerMetaTaskLogNotFound,[code=40035:class=dm-worker:scope=internal:level=high], "Message: any task operation log not found" +ErrWorkerMetaHandleTaskOrder,[code=40036:class=dm-worker:scope=internal:level=high], "Message: please handle task operation order by log ID, the log need to be handled is %+v, not %+v" +ErrWorkerMetaOpenTxn,[code=40037:class=dm-worker:scope=internal:level=high], "Message: open kv db txn" +ErrWorkerMetaCommitTxn,[code=40038:class=dm-worker:scope=internal:level=high], "Message: commit kv db txn" +ErrWorkerRelayStageNotValid,[code=40039:class=dm-worker:scope=internal:level=high], "Message: current stage is %s, %s required, relay op %s" +ErrWorkerRelayOperNotSupport,[code=40040:class=dm-worker:scope=internal:level=high], "Message: operation %s not supported" +ErrWorkerOpenKVDBFile,[code=40041:class=dm-worker:scope=internal:level=high], "Message: open kv db file" +ErrWorkerUpgradeCheckKVDir,[code=40042:class=dm-worker:scope=internal:level=high] +ErrWorkerMarshalVerBinary,[code=40043:class=dm-worker:scope=internal:level=high], "Message: marshal version %s to binary data" +ErrWorkerUnmarshalVerBinary,[code=40044:class=dm-worker:scope=internal:level=high], "Message: unmarshal version from data % X" +ErrWorkerGetVersionFromKV,[code=40045:class=dm-worker:scope=internal:level=high], "Message: load version with key %v from levelDB" +ErrWorkerSaveVersionToKV,[code=40046:class=dm-worker:scope=internal:level=high], "Message: save version %v into levelDB with key %v" +ErrWorkerVerAutoDowngrade,[code=40047:class=dm-worker:scope=internal:level=high], "Message: the previous version %s is newer than current %s, automatic downgrade is not supported now, please handle it manually" +ErrWorkerStartService,[code=40048:class=dm-worker:scope=internal:level=high], "Message: start server" +ErrWorkerNoStart,[code=40070:class=dm-worker:scope=internal:level=high], "Message: worker has not started" +ErrWorkerAlreadyClosed,[code=40049:class=dm-worker:scope=internal:level=high], "Message: worker already closed" +ErrWorkerAlreadyStart,[code=40071:class=dm-worker:scope=internal:level=high], "Message: worker already started" +ErrWorkerNotRunningStage,[code=40050:class=dm-worker:scope=internal:level=high], "Message: current stage is %s but not running, invalid" +ErrWorkerNotPausedStage,[code=40051:class=dm-worker:scope=internal:level=high], "Message: current stage is %s but not paused, invalid" +ErrWorkerUpdateTaskStage,[code=40052:class=dm-worker:scope=internal:level=high], "Message: 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], "Message: relay unit has stopped, can not be migrated" +ErrWorkerSubTaskNotFound,[code=40054:class=dm-worker:scope=internal:level=high], "Message: sub task with name %s not found" +ErrWorkerSubTaskExists,[code=40055:class=dm-worker:scope=internal:level=high], "Message: sub task %s already exists" +ErrWorkerOperSyncUnitOnly,[code=40056:class=dm-worker:scope=internal:level=high], "Message: such operation is only available for syncer, but now syncer is not running. current unit is %s" +ErrWorkerRelayUnitStage,[code=40057:class=dm-worker:scope=internal:level=high], "Message: Worker's relay log unit in invalid stage: %s" +ErrWorkerNoSyncerRunning,[code=40058:class=dm-worker:scope=internal:level=high], "Message: there is a subtask does not run syncer" +ErrWorkerCannotUpdateSourceID,[code=40059:class=dm-worker:scope=internal:level=high], "Message: update source ID is not allowed" +ErrWorkerNoAvailUnits,[code=40060:class=dm-worker:scope=internal:level=high], "Message: subtask %s has no dm units for mode %s" +ErrWorkerDDLLockInfoNotFound,[code=40061:class=dm-worker:scope=internal:level=high], "Message: 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], "Message: DDLLockInfo for task %s already exists" +ErrWorkerCacheDDLInfoExists,[code=40063:class=dm-worker:scope=internal:level=high], "Message: CacheDDLInfo for task %s already exists" +ErrWorkerExecSkipDDLConflict,[code=40064:class=dm-worker:scope=internal:level=high], "Message: execDDL and skipDDL can not specify both at the same time" +ErrWorkerExecDDLSyncerOnly,[code=40065:class=dm-worker:scope=internal:level=high], "Message: only syncer support ExecuteDDL, but current unit is %s" +ErrWorkerExecDDLTimeout,[code=40066:class=dm-worker:scope=internal:level=high], "Message: 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], "Message: 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,[code=40068:class=dm-worker:scope=internal:level=high], "Message: 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], "Message: host:port '%s' not valid, Workaround: Please check configs in worker configuration file." +ErrWorkerSourceNotMatch,[code=40072:class=dm-worker:scope=internal:level=high], "Message: source of request does not match with source in worker" +ErrWorkerFailToGetSubtaskConfigFromEtcd,[code=40073:class=dm-worker:scope=internal:level=medium], "Message: there is no relative subtask config for task %s in etcd" +ErrWorkerFailToGetSourceConfigFromEtcd,[code=40074:class=dm-worker:scope=internal:level=medium], "Message: there is no relative source config for source %s in etcd" +ErrTracerParseFlagSet,[code=42001:class=dm-tracer:scope=internal:level=medium], "Message: parse dm-tracer config flag set" +ErrTracerConfigTomlTransform,[code=42002:class=dm-tracer:scope=internal:level=medium], "Message: config toml transform, Workaround: Please check the configuration file has correct TOML format." +ErrTracerConfigInvalidFlag,[code=42003:class=dm-tracer:scope=internal:level=medium], "Message: '%s' is an invalid flag" +ErrTracerTraceEventNotFound,[code=42004:class=dm-tracer:scope=internal:level=medium], "Message: trace event %s not found" +ErrTracerTraceIDNotProvided,[code=42005:class=dm-tracer:scope=internal:level=medium], "Message: trace id not provided" +ErrTracerParamNotValid,[code=42006:class=dm-tracer:scope=internal:level=medium], "Message: param %s value %s not valid" +ErrTracerPostMethodOnly,[code=42007:class=dm-tracer:scope=internal:level=medium], "Message: post method only" +ErrTracerEventAssertionFail,[code=42008:class=dm-tracer:scope=internal:level=high], "Message: type %s event: %v not valid" +ErrTracerEventTypeNotValid,[code=42009:class=dm-tracer:scope=internal:level=high], "Message: trace event type %d not valid" +ErrTracerStartService,[code=42010:class=dm-tracer:scope=internal:level=high], "Message: start server" +ErrSchemaTrackerInvalidJSON,[code=44001:class=schema-tracker:scope=downstream:level=high], "Message: saved schema of `%s`.`%s` is not proper JSON" +ErrSchemaTrackerCannotCreateSchema,[code=44002:class=schema-tracker:scope=internal:level=high], "Message: failed to create database for `%s` in schema tracker" +ErrSchemaTrackerCannotCreateTable,[code=44003:class=schema-tracker:scope=internal:level=high], "Message: failed to create table for `%s`.`%s` in schema tracker" +ErrSchemaTrackerCannotSerialize,[code=44004:class=schema-tracker:scope=internal:level=high], "Message: failed to serialize table info for `%s`.`%s`" +ErrSchemaTrackerCannotGetTable,[code=44005:class=schema-tracker:scope=internal:level=high], "Message: cannot get table info for `%s`.`%s` from schema tracker" +ErrSchemaTrackerCannotExecDDL,[code=44006:class=schema-tracker:scope=internal:level=high], "Message: cannot track DDL: %s" +ErrSchemaTrackerCannotFetchDownstreamTable,[code=44007:class=schema-tracker:scope=downstream:level=medium], "Message: cannot fetch downstream table schema of `%s`.`%s` to initialize upstream schema `%s`.`%s` in schema tracker" +ErrSchemaTrackerCannotParseDownstreamTable,[code=44008:class=schema-tracker:scope=internal:level=high], "Message: cannot parse downstream table schema of `%s`.`%s` to initialize upstream schema `%s`.`%s` in schema tracker" +ErrSchedulerNotStarted,[code=46001:class=scheduler:scope=internal:level=high], "Message: the scheduler has not started" +ErrSchedulerStarted,[code=46002:class=scheduler:scope=internal:level=medium], "Message: the scheduler has already started" +ErrSchedulerWorkerExist,[code=46003:class=scheduler:scope=internal:level=medium], "Message: dm-worker with name %s already exists" +ErrSchedulerWorkerNotExist,[code=46004:class=scheduler:scope=internal:level=medium], "Message: dm-worker with name %s not exists" +ErrSchedulerWorkerOnline,[code=46005:class=scheduler:scope=internal:level=medium], "Message: dm-worker with name %s is still online, Workaround: Please shut it down first." +ErrSchedulerWorkerInvalidTrans,[code=46006:class=scheduler:scope=internal:level=medium], "Message: invalid stage transformation for dm-worker %s, from %s to %s" +ErrSchedulerSourceCfgExist,[code=46007:class=scheduler:scope=internal:level=medium], "Message: source config with ID %s already exists" +ErrSchedulerSourceCfgNotExist,[code=46008:class=scheduler:scope=internal:level=medium], "Message: source config with ID %s not exists" +ErrSchedulerSourcesUnbound,[code=46009:class=dm-master:scope=internal:level=medium], "Message: sources %v have not bound" +ErrSchedulerSourceOpTaskExist,[code=46010:class=dm-master:scope=internal:level=medium], "Message: source with name % need to operate with tasks %v exist" +ErrSchedulerRelayStageInvalidUpdate,[code=46011:class=scheduler:scope=internal:level=medium], "Message: invalid new expectant relay stage %s" +ErrSchedulerRelayStageSourceNotExist,[code=46012:class=scheduler:scope=internal:level=medium], "Message: sources %v need to update expectant relay stage not exist" +ErrSchedulerMultiTask,[code=46013:class=scheduler:scope=internal:level=medium], "Message: the scheduler cannot perform multiple different tasks %v in one operation" +ErrSchedulerSubTaskExist,[code=46014:class=scheduler:scope=internal:level=medium], "Message: subtasks with name %s for sources %v already exist" +ErrSchedulerSubTaskStageInvalidUpdate,[code=46015:class=dm-master:scope=internal:level=medium], "Message: invalid new expectant subtask stage %s" +ErrSchedulerSubTaskOpTaskNotExist,[code=46016:class=dm-master:scope=internal:level=medium], "Message: subtasks with name %s need to be operate not exist" +ErrSchedulerSubTaskOpSourceNotExist,[code=46017:class=dm-master:scope=internal:level=medium], "Message: sources %v need to be operate not exist" +ErrNotSet,[code=48001:class=not-set:scope=not-set:level=high] diff --git a/checker/cmd.go b/checker/cmd.go index 205351c151..588ddbc927 100644 --- a/checker/cmd.go +++ b/checker/cmd.go @@ -70,7 +70,7 @@ func CheckSyncConfig(ctx context.Context, cfgs []*config.SubTaskConfig) error { r := <-pr // we only want first error if len(r.Errors) > 0 { - return terror.ErrTaskCheckSyncConfigError.Generate(ErrorMsgHeader, r.Errors[0].Msg, string(r.Detail)) + return terror.ErrTaskCheckSyncConfigError.Generate(ErrorMsgHeader, r.Errors[0].Message, string(r.Detail)) } } diff --git a/dm/config/subtask_test.go b/dm/config/subtask_test.go index 8113974184..101d9b7512 100644 --- a/dm/config/subtask_test.go +++ b/dm/config/subtask_test.go @@ -99,7 +99,7 @@ func (t *testConfig) TestSubTaskAdjustFail(c *C) { cfg.Name = "" return cfg }, - "\\[.*\\], msg: 'task name should not be empty'.*", + "\\[.*\\], Message: task name should not be empty.*", }, { func() *SubTaskConfig { @@ -107,7 +107,7 @@ func (t *testConfig) TestSubTaskAdjustFail(c *C) { cfg.SourceID = "" return cfg }, - "\\[.*\\], msg: 'empty source-id not valid'.*", + "\\[.*\\], Message: empty source-id not valid.*", }, { func() *SubTaskConfig { @@ -115,7 +115,7 @@ func (t *testConfig) TestSubTaskAdjustFail(c *C) { cfg.SourceID = "source-id-length-more-than-thirty-two" return cfg }, - "\\[.*\\], msg: 'too long source-id not valid'.*", + "\\[.*\\], Message: too long source-id not valid.*", }, { func() *SubTaskConfig { @@ -123,7 +123,7 @@ func (t *testConfig) TestSubTaskAdjustFail(c *C) { cfg.ShardMode = "invalid-shard-mode" return cfg }, - "\\[.*\\], msg: 'shard mode invalid-shard-mode not supported'.*", + "\\[.*\\], Message: shard mode invalid-shard-mode not supported.*", }, { func() *SubTaskConfig { @@ -131,7 +131,7 @@ func (t *testConfig) TestSubTaskAdjustFail(c *C) { cfg.OnlineDDLScheme = "rtc" return cfg }, - "\\[.*\\], msg: 'online scheme rtc not supported'.*", + "\\[.*\\], Message: online scheme rtc not supported.*", }, { func() *SubTaskConfig { @@ -139,7 +139,7 @@ func (t *testConfig) TestSubTaskAdjustFail(c *C) { cfg.Timezone = "my-house" return cfg }, - "\\[.*\\], msg: 'invalid timezone string: my-house:.*", + "\\[.*\\], Message: invalid timezone string: my-house.*", }, } diff --git a/dm/ctl/master/query_status_test.go b/dm/ctl/master/query_status_test.go index 3253aec21f..b62cc7a183 100644 --- a/dm/ctl/master/query_status_test.go +++ b/dm/ctl/master/query_status_test.go @@ -76,7 +76,7 @@ func (t *testCtlMaster) TestWrapTaskResult(c *check.C) { Name: "test", Stage: pb.Stage_Paused, Result: &pb.ProcessResult{ - Errors: []*pb.ProcessError{{Error: &pb.TError{}}}, + Errors: []*pb.ProcessError{{}}, }, }}, }, @@ -95,7 +95,7 @@ func (t *testCtlMaster) TestWrapTaskResult(c *check.C) { resp.Sources[0].SourceStatus.RelayStatus = &pb.RelayStatus{ Stage: pb.Stage_Paused, Result: &pb.ProcessResult{ - Errors: []*pb.ProcessError{{Error: &pb.TError{}}}, + Errors: []*pb.ProcessError{{}}, }} expectedResult[0].TaskStatus = stageError + " - Relay status is " + stageError + extraInfo generateAndCheckTaskResult(c, resp, expectedResult) @@ -132,7 +132,7 @@ func (t *testCtlMaster) TestWrapTaskResult(c *check.C) { Name: "test2", Stage: pb.Stage_Paused, Result: &pb.ProcessResult{ - Errors: []*pb.ProcessError{{Error: &pb.TError{}}}, + Errors: []*pb.ProcessError{{}}, }, }}, }) diff --git a/dm/pb/dmworker.pb.go b/dm/pb/dmworker.pb.go index 9906328e1d..1fe08c44ab 100644 --- a/dm/pb/dmworker.pb.go +++ b/dm/pb/dmworker.pb.go @@ -2315,31 +2315,31 @@ func (m *ProcessResult) GetDetail() []byte { return nil } -// TError represents error used in dm +// ProcessError is same as terror used in dm // NOTE: currently stack trace is not supported, `Message` is the `terror.Error.getMsg` result // and `RawCause` is the `Error` result of error from `terror.Error.Cause()`. -type TError struct { +type ProcessError struct { ErrCode int32 `protobuf:"varint,1,opt,name=ErrCode,proto3" json:"ErrCode,omitempty"` - ErrClass int32 `protobuf:"varint,2,opt,name=ErrClass,proto3" json:"ErrClass,omitempty"` - ErrScope int32 `protobuf:"varint,3,opt,name=ErrScope,proto3" json:"ErrScope,omitempty"` - ErrLevel int32 `protobuf:"varint,4,opt,name=ErrLevel,proto3" json:"ErrLevel,omitempty"` + ErrClass string `protobuf:"bytes,2,opt,name=ErrClass,proto3" json:"ErrClass,omitempty"` + ErrScope string `protobuf:"bytes,3,opt,name=ErrScope,proto3" json:"ErrScope,omitempty"` + ErrLevel string `protobuf:"bytes,4,opt,name=ErrLevel,proto3" json:"ErrLevel,omitempty"` Message string `protobuf:"bytes,5,opt,name=Message,proto3" json:"Message,omitempty"` RawCause string `protobuf:"bytes,6,opt,name=RawCause,proto3" json:"RawCause,omitempty"` Workaround string `protobuf:"bytes,7,opt,name=Workaround,proto3" json:"Workaround,omitempty"` } -func (m *TError) Reset() { *m = TError{} } -func (m *TError) String() string { return proto.CompactTextString(m) } -func (*TError) ProtoMessage() {} -func (*TError) Descriptor() ([]byte, []int) { +func (m *ProcessError) Reset() { *m = ProcessError{} } +func (m *ProcessError) String() string { return proto.CompactTextString(m) } +func (*ProcessError) ProtoMessage() {} +func (*ProcessError) Descriptor() ([]byte, []int) { return fileDescriptor_51a1b9e17fd67b10, []int{31} } -func (m *TError) XXX_Unmarshal(b []byte) error { +func (m *ProcessError) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *TError) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *ProcessError) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_TError.Marshal(b, m, deterministic) + return xxx_messageInfo_ProcessError.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -2349,121 +2349,67 @@ func (m *TError) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return b[:n], nil } } -func (m *TError) XXX_Merge(src proto.Message) { - xxx_messageInfo_TError.Merge(m, src) +func (m *ProcessError) XXX_Merge(src proto.Message) { + xxx_messageInfo_ProcessError.Merge(m, src) } -func (m *TError) XXX_Size() int { +func (m *ProcessError) XXX_Size() int { return m.Size() } -func (m *TError) XXX_DiscardUnknown() { - xxx_messageInfo_TError.DiscardUnknown(m) +func (m *ProcessError) XXX_DiscardUnknown() { + xxx_messageInfo_ProcessError.DiscardUnknown(m) } -var xxx_messageInfo_TError proto.InternalMessageInfo +var xxx_messageInfo_ProcessError proto.InternalMessageInfo -func (m *TError) GetErrCode() int32 { +func (m *ProcessError) GetErrCode() int32 { if m != nil { return m.ErrCode } return 0 } -func (m *TError) GetErrClass() int32 { +func (m *ProcessError) GetErrClass() string { if m != nil { return m.ErrClass } - return 0 + return "" } -func (m *TError) GetErrScope() int32 { +func (m *ProcessError) GetErrScope() string { if m != nil { return m.ErrScope } - return 0 + return "" } -func (m *TError) GetErrLevel() int32 { +func (m *ProcessError) GetErrLevel() string { if m != nil { return m.ErrLevel } - return 0 + return "" } -func (m *TError) GetMessage() string { +func (m *ProcessError) GetMessage() string { if m != nil { return m.Message } return "" } -func (m *TError) GetRawCause() string { +func (m *ProcessError) GetRawCause() string { if m != nil { return m.RawCause } return "" } -func (m *TError) GetWorkaround() string { +func (m *ProcessError) GetWorkaround() string { if m != nil { return m.Workaround } return "" } -// ProcessError represents error produced by a dm unit -// NOTE: refine later, like add error scope field -type ProcessError struct { - Msg string `protobuf:"bytes,1,opt,name=msg,proto3" json:"msg,omitempty"` - Error *TError `protobuf:"bytes,2,opt,name=error,proto3" json:"error,omitempty"` -} - -func (m *ProcessError) Reset() { *m = ProcessError{} } -func (m *ProcessError) String() string { return proto.CompactTextString(m) } -func (*ProcessError) ProtoMessage() {} -func (*ProcessError) Descriptor() ([]byte, []int) { - return fileDescriptor_51a1b9e17fd67b10, []int{32} -} -func (m *ProcessError) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *ProcessError) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_ProcessError.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *ProcessError) XXX_Merge(src proto.Message) { - xxx_messageInfo_ProcessError.Merge(m, src) -} -func (m *ProcessError) XXX_Size() int { - return m.Size() -} -func (m *ProcessError) XXX_DiscardUnknown() { - xxx_messageInfo_ProcessError.DiscardUnknown(m) -} - -var xxx_messageInfo_ProcessError proto.InternalMessageInfo - -func (m *ProcessError) GetMsg() string { - if m != nil { - return m.Msg - } - return "" -} - -func (m *ProcessError) GetError() *TError { - if m != nil { - return m.Error - } - return nil -} - // SwitchRelayMasterRequest represents a request for switching a dm-worker's relay unit to another master server type SwitchRelayMasterRequest struct { } @@ -2472,7 +2418,7 @@ func (m *SwitchRelayMasterRequest) Reset() { *m = SwitchRelayMasterReque func (m *SwitchRelayMasterRequest) String() string { return proto.CompactTextString(m) } func (*SwitchRelayMasterRequest) ProtoMessage() {} func (*SwitchRelayMasterRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_51a1b9e17fd67b10, []int{33} + return fileDescriptor_51a1b9e17fd67b10, []int{32} } func (m *SwitchRelayMasterRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2510,7 +2456,7 @@ func (m *OperateRelayRequest) Reset() { *m = OperateRelayRequest{} } func (m *OperateRelayRequest) String() string { return proto.CompactTextString(m) } func (*OperateRelayRequest) ProtoMessage() {} func (*OperateRelayRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_51a1b9e17fd67b10, []int{34} + return fileDescriptor_51a1b9e17fd67b10, []int{33} } func (m *OperateRelayRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2557,7 +2503,7 @@ func (m *OperateRelayResponse) Reset() { *m = OperateRelayResponse{} } func (m *OperateRelayResponse) String() string { return proto.CompactTextString(m) } func (*OperateRelayResponse) ProtoMessage() {} func (*OperateRelayResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_51a1b9e17fd67b10, []int{35} + return fileDescriptor_51a1b9e17fd67b10, []int{34} } func (m *OperateRelayResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2630,7 +2576,7 @@ func (m *PurgeRelayRequest) Reset() { *m = PurgeRelayRequest{} } func (m *PurgeRelayRequest) String() string { return proto.CompactTextString(m) } func (*PurgeRelayRequest) ProtoMessage() {} func (*PurgeRelayRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_51a1b9e17fd67b10, []int{36} + return fileDescriptor_51a1b9e17fd67b10, []int{35} } func (m *PurgeRelayRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2694,7 +2640,7 @@ func (m *QueryWorkerConfigRequest) Reset() { *m = QueryWorkerConfigReque func (m *QueryWorkerConfigRequest) String() string { return proto.CompactTextString(m) } func (*QueryWorkerConfigRequest) ProtoMessage() {} func (*QueryWorkerConfigRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_51a1b9e17fd67b10, []int{37} + return fileDescriptor_51a1b9e17fd67b10, []int{36} } func (m *QueryWorkerConfigRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2734,7 +2680,7 @@ func (m *QueryWorkerConfigResponse) Reset() { *m = QueryWorkerConfigResp func (m *QueryWorkerConfigResponse) String() string { return proto.CompactTextString(m) } func (*QueryWorkerConfigResponse) ProtoMessage() {} func (*QueryWorkerConfigResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_51a1b9e17fd67b10, []int{38} + return fileDescriptor_51a1b9e17fd67b10, []int{37} } func (m *QueryWorkerConfigResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2828,7 +2774,6 @@ func init() { proto.RegisterType((*SubTaskError)(nil), "pb.SubTaskError") proto.RegisterType((*SubTaskErrorList)(nil), "pb.SubTaskErrorList") proto.RegisterType((*ProcessResult)(nil), "pb.ProcessResult") - proto.RegisterType((*TError)(nil), "pb.TError") proto.RegisterType((*ProcessError)(nil), "pb.ProcessError") proto.RegisterType((*SwitchRelayMasterRequest)(nil), "pb.SwitchRelayMasterRequest") proto.RegisterType((*OperateRelayRequest)(nil), "pb.OperateRelayRequest") @@ -2841,136 +2786,135 @@ func init() { func init() { proto.RegisterFile("dmworker.proto", fileDescriptor_51a1b9e17fd67b10) } var fileDescriptor_51a1b9e17fd67b10 = []byte{ - // 2053 bytes of a gzipped FileDescriptorProto + // 2034 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x18, 0x4d, 0x6f, 0x23, 0x49, - 0xd5, 0xdd, 0xfe, 0x88, 0xfd, 0x6c, 0x67, 0x3a, 0x35, 0xd9, 0xac, 0xc7, 0xec, 0x1a, 0xab, 0x67, - 0xb5, 0x9b, 0xcd, 0x21, 0x62, 0x03, 0x08, 0x09, 0x69, 0x81, 0x8d, 0x93, 0x9d, 0x09, 0x38, 0x33, - 0x49, 0x3b, 0x23, 0x8e, 0xa8, 0xd3, 0x5d, 0x71, 0x5a, 0xb1, 0xbb, 0x7b, 0xfa, 0x23, 0x51, 0xfe, - 0x04, 0x70, 0xe1, 0x80, 0xe0, 0x86, 0x10, 0x37, 0xfe, 0x06, 0x1c, 0x38, 0xec, 0x91, 0x1b, 0x68, - 0xe6, 0x6f, 0x70, 0x40, 0xef, 0x55, 0x75, 0x77, 0x75, 0xfc, 0x31, 0x3b, 0x12, 0xdc, 0xea, 0x7d, - 0xd4, 0xab, 0xf7, 0x5d, 0x55, 0x0f, 0x36, 0xdd, 0xf9, 0x5d, 0x10, 0xdd, 0xf0, 0x68, 0x3f, 0x8c, - 0x82, 0x24, 0x60, 0x7a, 0x78, 0x69, 0x7e, 0x0e, 0x8f, 0x27, 0x89, 0x1d, 0x25, 0x93, 0xf4, 0xf2, - 0xc2, 0x8e, 0x6f, 0x2c, 0xfe, 0x3a, 0xe5, 0x71, 0xc2, 0x18, 0xd4, 0x12, 0x3b, 0xbe, 0xe9, 0x69, - 0x43, 0x6d, 0xb7, 0x65, 0xd1, 0xda, 0xdc, 0x07, 0xf6, 0x2a, 0x74, 0xed, 0x84, 0x5b, 0x7c, 0x66, - 0xdf, 0x67, 0x9c, 0x3d, 0xd8, 0x70, 0x02, 0x3f, 0xe1, 0x7e, 0x22, 0x99, 0x33, 0xd0, 0x9c, 0xc0, - 0xe3, 0x53, 0x6f, 0x1a, 0x3d, 0xdc, 0x30, 0x00, 0x38, 0xf4, 0xfc, 0x59, 0x30, 0x7d, 0x61, 0xcf, - 0xb9, 0xdc, 0xa3, 0x60, 0xd8, 0x47, 0xd0, 0x12, 0xd0, 0x59, 0x10, 0xf7, 0xf4, 0xa1, 0xb6, 0xdb, - 0xb5, 0x0a, 0x84, 0xf9, 0x0c, 0x3e, 0x78, 0x19, 0x72, 0x14, 0xfa, 0x40, 0xe3, 0x3e, 0xe8, 0x41, - 0x48, 0xe2, 0x36, 0x0f, 0x60, 0x3f, 0xbc, 0xdc, 0x47, 0xe2, 0xcb, 0xd0, 0xd2, 0x83, 0x10, 0xad, - 0xf1, 0xf1, 0x30, 0x5d, 0x58, 0x83, 0x6b, 0xf3, 0x16, 0x76, 0x1e, 0x0a, 0x8a, 0xc3, 0xc0, 0x8f, - 0xf9, 0x5a, 0x49, 0x3b, 0xd0, 0x88, 0x78, 0x9c, 0xce, 0x12, 0x92, 0xd5, 0xb4, 0x24, 0x84, 0xf8, - 0x38, 0x48, 0x23, 0x87, 0xf7, 0xaa, 0x74, 0x86, 0x84, 0x98, 0x01, 0xd5, 0x79, 0x3c, 0xed, 0xd5, - 0x08, 0x89, 0x4b, 0x73, 0x0f, 0xb6, 0x85, 0x17, 0xbf, 0x85, 0xc7, 0x77, 0x81, 0x9d, 0xa7, 0x3c, - 0xba, 0x9f, 0x24, 0x76, 0x92, 0xc6, 0x0a, 0xa7, 0x5f, 0xb8, 0x4e, 0x58, 0xf3, 0x19, 0x6c, 0x11, - 0xe7, 0x71, 0x14, 0x05, 0xd1, 0x3a, 0xc6, 0x3f, 0x68, 0xd0, 0x7b, 0x6e, 0xfb, 0xee, 0x2c, 0x3b, - 0x7f, 0x72, 0x3e, 0x5e, 0x27, 0x99, 0x3d, 0x21, 0x6f, 0xe8, 0xe4, 0x8d, 0x16, 0x7a, 0x63, 0x72, - 0x3e, 0x2e, 0xdc, 0x6a, 0x47, 0xd3, 0xb8, 0x57, 0x1d, 0x56, 0x91, 0x1d, 0xd7, 0x18, 0xbd, 0xcb, - 0x3c, 0x7a, 0xc2, 0xec, 0x02, 0x81, 0xb1, 0x8f, 0x5f, 0xcf, 0xce, 0xec, 0x24, 0xe1, 0x91, 0xdf, - 0xab, 0x8b, 0xd8, 0x17, 0x18, 0x33, 0x84, 0xed, 0x51, 0x30, 0x9f, 0x07, 0xfe, 0x2f, 0x29, 0x4f, - 0xf3, 0x90, 0x14, 0x6e, 0xd7, 0x4a, 0x6e, 0x97, 0xee, 0xd5, 0x73, 0xf7, 0xae, 0x0c, 0xc4, 0x0e, - 0x34, 0x44, 0xee, 0x4b, 0xa5, 0x24, 0x64, 0xfe, 0x55, 0x83, 0xc7, 0x25, 0x1f, 0xbf, 0xf7, 0x89, - 0x3f, 0x80, 0x8e, 0x38, 0x43, 0x48, 0xa0, 0x73, 0xdb, 0x07, 0x06, 0xb9, 0x4a, 0xc1, 0x5b, 0x25, - 0x2e, 0xf6, 0x23, 0xe8, 0xc6, 0x32, 0x00, 0x62, 0x5b, 0x6d, 0x58, 0xdd, 0x6d, 0x1f, 0x6c, 0xd1, - 0x36, 0x95, 0x60, 0x95, 0xf9, 0xcc, 0xbf, 0x68, 0x32, 0x29, 0x64, 0xa8, 0xdf, 0x5b, 0xdf, 0x2f, - 0xa0, 0x2d, 0xf4, 0x22, 0x01, 0x52, 0xdd, 0x47, 0x85, 0xba, 0x42, 0xae, 0xca, 0x43, 0x26, 0x0a, - 0x25, 0xc4, 0x1e, 0xa1, 0xab, 0xa1, 0xe8, 0x2a, 0x36, 0x95, 0xb8, 0xcc, 0x3f, 0x6b, 0xd0, 0x1e, - 0x5d, 0x73, 0x47, 0x6a, 0x8e, 0x2a, 0x86, 0x76, 0x1c, 0x73, 0x37, 0x53, 0x51, 0x40, 0x6c, 0x1b, - 0xea, 0x49, 0x90, 0xd8, 0x33, 0x52, 0xb2, 0x6e, 0x09, 0x80, 0x52, 0x25, 0x75, 0x1c, 0x1e, 0xc7, - 0x57, 0xe9, 0x8c, 0xb4, 0xac, 0x5b, 0x0a, 0x06, 0xa5, 0x5d, 0xd9, 0xde, 0x8c, 0xbb, 0x14, 0xd0, - 0xba, 0x25, 0x21, 0xec, 0x47, 0x77, 0x76, 0xe4, 0x7b, 0xfe, 0x94, 0xf2, 0xab, 0x6e, 0x65, 0x20, - 0xee, 0x70, 0x79, 0x62, 0x7b, 0xb3, 0x5e, 0x63, 0xa8, 0xed, 0x76, 0x2c, 0x09, 0x99, 0x1d, 0x80, - 0xa3, 0x74, 0x1e, 0x4a, 0xff, 0xfe, 0x5a, 0x03, 0x18, 0x07, 0xb6, 0x2b, 0x95, 0xfe, 0x04, 0xba, - 0x57, 0x9e, 0xef, 0xc5, 0xd7, 0xdc, 0x3d, 0xbc, 0x4f, 0x78, 0x4c, 0xba, 0x57, 0xad, 0x32, 0x12, - 0x95, 0x25, 0xad, 0x05, 0x8b, 0x4e, 0x2c, 0x0a, 0x86, 0xf5, 0xa1, 0x19, 0x46, 0xc1, 0x34, 0xe2, - 0x71, 0x2c, 0xf3, 0x32, 0x87, 0x71, 0xef, 0x9c, 0x27, 0xb6, 0x68, 0x71, 0x32, 0x3b, 0x15, 0x8c, - 0xf9, 0x3b, 0x0d, 0xba, 0x93, 0x6b, 0x3b, 0x72, 0x3d, 0x7f, 0xfa, 0x2c, 0x0a, 0x52, 0x6a, 0x42, - 0x89, 0x1d, 0x4d, 0x79, 0xd6, 0x71, 0x25, 0x84, 0xf5, 0x78, 0x74, 0x34, 0xc6, 0xf3, 0xa9, 0x1e, - 0x71, 0x2d, 0xf4, 0x8f, 0xe2, 0x64, 0x1c, 0x38, 0x76, 0xe2, 0x05, 0xbe, 0x3c, 0xbe, 0x8c, 0xa4, - 0xaa, 0xb9, 0xf7, 0x1d, 0x72, 0x66, 0x95, 0xaa, 0x86, 0x20, 0xd4, 0x3b, 0xf5, 0x25, 0xa5, 0x4e, - 0x94, 0x1c, 0x36, 0xff, 0x54, 0x05, 0x98, 0xdc, 0xfb, 0x8e, 0x74, 0xd4, 0x10, 0xda, 0x64, 0xf0, - 0xf1, 0x2d, 0xf7, 0x93, 0xcc, 0x4d, 0x2a, 0x0a, 0x85, 0x11, 0x78, 0x11, 0x66, 0x2e, 0xca, 0x61, - 0x6c, 0x1b, 0x11, 0x77, 0xb8, 0x9f, 0x20, 0xb1, 0x4a, 0xc4, 0x02, 0xc1, 0x4c, 0xe8, 0xcc, 0xed, - 0x38, 0xe1, 0x51, 0xc9, 0x49, 0x25, 0x1c, 0xdb, 0x03, 0x43, 0x85, 0x9f, 0x25, 0x9e, 0x2b, 0x1b, - 0xcc, 0x02, 0x1e, 0xe5, 0x91, 0x11, 0x99, 0xbc, 0x86, 0x90, 0xa7, 0xe2, 0x50, 0x9e, 0x0a, 0x93, - 0xbc, 0x0d, 0x21, 0xef, 0x21, 0x1e, 0xe5, 0x5d, 0xce, 0x02, 0xe7, 0xc6, 0xf3, 0xa7, 0x14, 0x80, - 0x26, 0xb9, 0xaa, 0x84, 0x63, 0x5f, 0x82, 0x91, 0xfa, 0x11, 0x8f, 0x83, 0xd9, 0x2d, 0x77, 0x29, - 0x8e, 0x71, 0xaf, 0xa5, 0xd4, 0xbc, 0x1a, 0x61, 0x6b, 0x81, 0x55, 0x89, 0x10, 0x88, 0xe2, 0x91, - 0x11, 0x1a, 0x00, 0x88, 0xf6, 0x7a, 0x71, 0x1f, 0xf2, 0x5e, 0x5b, 0x64, 0x4f, 0x81, 0x31, 0xff, - 0xa8, 0x41, 0x47, 0x6d, 0x43, 0x4a, 0x83, 0xd4, 0x56, 0x34, 0x48, 0x5d, 0x6d, 0x90, 0xec, 0xf3, - 0xbc, 0xb1, 0x88, 0x4e, 0x41, 0xda, 0x9e, 0x45, 0x01, 0xd6, 0xa1, 0x45, 0x84, 0xbc, 0xd7, 0x7c, - 0x01, 0xed, 0x08, 0x6f, 0xfa, 0xbc, 0xa3, 0xe5, 0x9d, 0xc5, 0x2a, 0xd0, 0x96, 0xca, 0x63, 0xfe, - 0x4d, 0x87, 0xb6, 0x42, 0x5c, 0x88, 0xb4, 0xf6, 0x2d, 0x23, 0xad, 0xaf, 0x88, 0xf4, 0x30, 0x53, - 0x29, 0xbd, 0x3c, 0xf2, 0x22, 0x99, 0xfc, 0x2a, 0x2a, 0xe7, 0x28, 0xa5, 0x96, 0x8a, 0x62, 0xbb, - 0xf0, 0x48, 0x01, 0x95, 0xc4, 0x7a, 0x88, 0x66, 0xfb, 0xc0, 0x08, 0x35, 0xb2, 0x13, 0xe7, 0xfa, - 0x55, 0x78, 0x4a, 0xda, 0x50, 0x76, 0x35, 0xad, 0x25, 0x14, 0xf6, 0x5d, 0xa8, 0xc7, 0x89, 0x3d, - 0xe5, 0x94, 0x58, 0xd9, 0xf5, 0x8a, 0x08, 0x4b, 0xe0, 0x15, 0xe7, 0x37, 0xdf, 0xe1, 0x7c, 0xf3, - 0x3f, 0x3a, 0x74, 0x4b, 0x17, 0xc7, 0xd2, 0xdb, 0x3c, 0x3f, 0x51, 0x5f, 0x71, 0xe2, 0x10, 0x6a, - 0xa9, 0xef, 0x89, 0x60, 0x6f, 0x1e, 0x74, 0x90, 0xfe, 0xca, 0xf7, 0x12, 0xcc, 0x25, 0x8b, 0x28, - 0x8a, 0x4e, 0xb5, 0x77, 0x25, 0xc4, 0xf7, 0xe0, 0x71, 0x91, 0xc8, 0x47, 0x47, 0xe3, 0x71, 0xe0, - 0xdc, 0x9c, 0x1c, 0x49, 0xef, 0x2d, 0x23, 0x31, 0x26, 0xae, 0x2b, 0x2a, 0xc8, 0xe7, 0x15, 0x71, - 0x61, 0x7d, 0x06, 0x75, 0x07, 0xaf, 0x11, 0xf2, 0x92, 0x4c, 0x28, 0xe5, 0x5e, 0x79, 0x5e, 0xb1, - 0x04, 0x9d, 0x7d, 0x02, 0x35, 0x37, 0x9d, 0x87, 0xd2, 0x57, 0x9b, 0xc8, 0x57, 0x34, 0xf6, 0xe7, - 0x15, 0x8b, 0xa8, 0xc8, 0x35, 0x0b, 0x6c, 0xb7, 0xd7, 0x2a, 0xb8, 0x8a, 0x7e, 0x8f, 0x5c, 0x48, - 0x45, 0x2e, 0xac, 0x30, 0xaa, 0x36, 0xc9, 0x55, 0x34, 0x3b, 0xe4, 0x42, 0xea, 0x61, 0x13, 0x1a, - 0xb1, 0x48, 0xe4, 0x9f, 0xc0, 0x56, 0xc9, 0xfb, 0x63, 0x2f, 0x26, 0x57, 0x09, 0x72, 0x4f, 0x5b, - 0x75, 0xbb, 0x67, 0xfb, 0x07, 0x00, 0x64, 0x93, 0xb8, 0x70, 0xe5, 0xad, 0xad, 0x15, 0xcf, 0xc6, - 0x8f, 0xa1, 0x85, 0xb6, 0xac, 0x21, 0xa3, 0x11, 0xab, 0xc8, 0x21, 0x74, 0x48, 0xfb, 0xf3, 0xf1, - 0x0a, 0x0e, 0x76, 0x00, 0xdb, 0xe2, 0x02, 0xcd, 0x9f, 0xda, 0x1e, 0x5d, 0x17, 0xa2, 0xb0, 0x96, - 0xd2, 0xb0, 0xa1, 0x73, 0x14, 0x37, 0x39, 0x1f, 0x67, 0xb7, 0x5a, 0x06, 0x9b, 0x3f, 0x84, 0x16, - 0x9e, 0x28, 0x8e, 0xdb, 0x85, 0x06, 0x11, 0x32, 0x3f, 0x18, 0xb9, 0x3b, 0xa5, 0x42, 0x96, 0xa4, - 0x9b, 0xbf, 0xd1, 0x4a, 0xaf, 0x93, 0xf7, 0xee, 0x56, 0xc3, 0xc5, 0xc7, 0x4d, 0xab, 0xfc, 0x96, - 0xd9, 0x07, 0xa0, 0x86, 0x93, 0xbd, 0x64, 0xf2, 0xf0, 0x16, 0x58, 0x4b, 0xe1, 0xc0, 0xc0, 0x14, - 0xd0, 0x12, 0xd7, 0xfe, 0x5e, 0x87, 0x8e, 0xfa, 0x08, 0xfa, 0x7f, 0x95, 0x1d, 0x53, 0x7e, 0x12, - 0x59, 0x65, 0x7c, 0x9a, 0x55, 0x46, 0xbd, 0x30, 0xa3, 0xc8, 0xa2, 0xa2, 0x30, 0x9e, 0xca, 0xc2, - 0x68, 0x10, 0x5b, 0x37, 0x2b, 0x8c, 0x8c, 0x4b, 0xd4, 0xc5, 0x53, 0x59, 0x17, 0x1b, 0x05, 0x53, - 0x9e, 0x52, 0x79, 0x59, 0x3c, 0x95, 0x65, 0xd1, 0x2c, 0x98, 0xf2, 0x30, 0xe7, 0x55, 0xb1, 0x01, - 0x75, 0x0a, 0xa7, 0xf9, 0x63, 0x30, 0x54, 0xd7, 0x50, 0x4d, 0x7c, 0x2a, 0x89, 0xa5, 0x54, 0x50, - 0x1f, 0x91, 0x72, 0xef, 0x6b, 0xe8, 0x96, 0x9a, 0x0a, 0xde, 0x74, 0x5e, 0x3c, 0xb2, 0x7d, 0x87, - 0xcf, 0xf2, 0x27, 0xa4, 0x82, 0x51, 0x92, 0x4c, 0x2f, 0x24, 0x4b, 0x11, 0xa5, 0x24, 0x53, 0x1e, - 0x82, 0xd5, 0xd2, 0x43, 0xf0, 0x1f, 0x1a, 0x34, 0x2e, 0x44, 0x10, 0x7b, 0xb0, 0x71, 0x1c, 0x45, - 0xa3, 0xc0, 0x15, 0x71, 0xac, 0x5b, 0x19, 0x88, 0x49, 0x8f, 0xcb, 0x99, 0x1d, 0xc7, 0xf2, 0xc1, - 0x9a, 0xc3, 0x92, 0x36, 0x71, 0x82, 0x90, 0xcb, 0x17, 0x6b, 0x0e, 0x4b, 0xda, 0x98, 0xdf, 0xf2, - 0x99, 0x7c, 0xb1, 0xe6, 0x30, 0x9e, 0x76, 0xca, 0xe3, 0x18, 0x13, 0x44, 0xf4, 0xc6, 0x0c, 0xc4, - 0x5d, 0x96, 0x7d, 0x37, 0xb2, 0xd3, 0x98, 0xcb, 0x57, 0x4a, 0x0e, 0xa3, 0x43, 0xf0, 0x9b, 0x64, - 0x47, 0x41, 0xea, 0x67, 0x6f, 0x13, 0x05, 0x63, 0x1e, 0x42, 0x47, 0x35, 0x7f, 0x49, 0xd1, 0x0f, - 0xb3, 0x58, 0xe8, 0x14, 0x4e, 0xf1, 0xd9, 0x2d, 0x45, 0xa1, 0x0f, 0xbd, 0xc9, 0x9d, 0x97, 0x38, - 0xd7, 0x54, 0x03, 0xe2, 0xda, 0x92, 0xbf, 0x45, 0xf3, 0x00, 0x1e, 0xcb, 0x1f, 0x74, 0xe9, 0x7f, - 0xff, 0x1d, 0xe5, 0xfb, 0xdc, 0xce, 0x0b, 0x4b, 0x7c, 0x19, 0xcd, 0x14, 0xb6, 0xcb, 0x7b, 0xe4, - 0xf7, 0x65, 0xdd, 0xa6, 0xff, 0xc1, 0xa7, 0xfb, 0x0e, 0xb6, 0xce, 0xd2, 0x68, 0x5a, 0x56, 0xb4, - 0x0f, 0x4d, 0xcf, 0xb7, 0x9d, 0xc4, 0xbb, 0xe5, 0x32, 0x9d, 0x72, 0x98, 0x7e, 0xe3, 0x9e, 0x9c, - 0x18, 0x54, 0x2d, 0x5a, 0x23, 0xff, 0x95, 0x37, 0xe3, 0x54, 0xdc, 0xb2, 0xdd, 0x65, 0x30, 0xa9, - 0x22, 0x9e, 0x18, 0xf2, 0x7b, 0x29, 0x20, 0xf4, 0x1f, 0x7d, 0xd6, 0xc4, 0x7f, 0x76, 0x14, 0xf8, - 0x57, 0xde, 0x34, 0xf3, 0xdf, 0x1d, 0x3c, 0x59, 0x42, 0x7b, 0xc7, 0x7f, 0xae, 0xb0, 0x59, 0x5f, - 0x66, 0x73, 0xb5, 0x08, 0xae, 0x32, 0x98, 0xa9, 0x95, 0x06, 0x33, 0x7b, 0xbf, 0x82, 0x86, 0x18, - 0x69, 0xb0, 0x2e, 0xb4, 0x4e, 0xfc, 0x5b, 0x7b, 0xe6, 0xb9, 0x2f, 0x43, 0xa3, 0xc2, 0x9a, 0x50, - 0x9b, 0x24, 0x41, 0x68, 0x68, 0xac, 0x05, 0xf5, 0x33, 0x4c, 0x32, 0x43, 0x67, 0x00, 0x0d, 0xac, - 0xc0, 0x39, 0x37, 0xaa, 0x88, 0xa6, 0x69, 0x91, 0x51, 0x43, 0xb4, 0x98, 0x63, 0x18, 0x75, 0xb6, - 0x09, 0xf0, 0x55, 0x9a, 0x04, 0x92, 0xad, 0xb1, 0xb7, 0x07, 0x75, 0x9a, 0x12, 0x90, 0xc0, 0x5f, - 0x9c, 0x9c, 0x19, 0x15, 0xd6, 0x86, 0x0d, 0xeb, 0xf8, 0x6c, 0xfc, 0xd5, 0xe8, 0xd8, 0xd0, 0x70, - 0xef, 0xc9, 0x8b, 0x9f, 0x1f, 0x8f, 0x2e, 0x0c, 0x7d, 0xef, 0x35, 0x89, 0x9c, 0xa2, 0x05, 0x1d, - 0xa9, 0x0b, 0xc1, 0x46, 0x85, 0x6d, 0x40, 0xf5, 0x05, 0xbf, 0x33, 0x34, 0xda, 0x9c, 0xfa, 0xf8, - 0x89, 0x13, 0xfa, 0x90, 0x6a, 0xae, 0x51, 0x45, 0x02, 0x2a, 0x1c, 0x72, 0xd7, 0xa8, 0xb1, 0x0e, - 0x34, 0xbf, 0x96, 0xbf, 0x32, 0xa3, 0x8e, 0x24, 0x64, 0xc3, 0x3d, 0x0d, 0x24, 0x91, 0x72, 0x08, - 0x6d, 0xec, 0xbd, 0x84, 0x66, 0xd6, 0x5c, 0xd9, 0x23, 0x68, 0xcb, 0x53, 0x11, 0x65, 0x54, 0xd0, - 0x44, 0x6a, 0xa1, 0x86, 0x86, 0xda, 0x63, 0x9b, 0x34, 0x74, 0x5c, 0x61, 0x2f, 0x34, 0xaa, 0x64, - 0xd1, 0xbd, 0xef, 0x18, 0x35, 0x64, 0xa4, 0x74, 0x32, 0xdc, 0xbd, 0x53, 0xd8, 0x90, 0xf9, 0xca, - 0x18, 0x6c, 0x4a, 0x79, 0x12, 0x63, 0x54, 0xd0, 0xcb, 0xa8, 0xa5, 0xe0, 0xd6, 0xd0, 0x5b, 0x64, - 0x80, 0x80, 0x75, 0x54, 0x41, 0x78, 0x4e, 0x20, 0xaa, 0x07, 0xff, 0x6a, 0x40, 0x43, 0x24, 0x05, - 0x1b, 0x41, 0x47, 0x1d, 0xcf, 0xb1, 0x0f, 0xe5, 0xcd, 0xf1, 0x70, 0x60, 0xd7, 0xef, 0x51, 0xef, - 0x5f, 0x32, 0x3b, 0x31, 0x2b, 0xec, 0x04, 0x36, 0xcb, 0xa3, 0x2e, 0xf6, 0x04, 0xb9, 0x97, 0xce, - 0xd1, 0xfa, 0xfd, 0x65, 0xa4, 0x5c, 0xd4, 0x31, 0x74, 0x4b, 0xd3, 0x2b, 0x46, 0xe7, 0x2e, 0x1b, - 0x68, 0xad, 0xd5, 0xe8, 0x67, 0xd0, 0x56, 0x86, 0x2e, 0x6c, 0x07, 0x59, 0x17, 0x27, 0x5d, 0xfd, - 0x0f, 0x17, 0xf0, 0xb9, 0x84, 0x2f, 0x01, 0x8a, 0x29, 0x08, 0xfb, 0x20, 0x67, 0x54, 0x07, 0x60, - 0xfd, 0x9d, 0x87, 0xe8, 0x7c, 0xfb, 0xd7, 0x00, 0x72, 0x0a, 0x76, 0x3e, 0x8e, 0xd9, 0x47, 0xc8, - 0xb7, 0x6a, 0x2a, 0xb6, 0xd6, 0x90, 0x53, 0xd8, 0x5a, 0xe8, 0x8f, 0x42, 0xdc, 0xaa, 0xb6, 0xb9, - 0x56, 0xdc, 0x08, 0x3a, 0x6a, 0x7b, 0x14, 0xe1, 0x5e, 0xd2, 0x64, 0x85, 0x90, 0x65, 0x9d, 0xd4, - 0xac, 0xb0, 0x9f, 0x02, 0x14, 0xcd, 0x4e, 0xb8, 0x66, 0xa1, 0xf9, 0xad, 0xd5, 0xe2, 0x19, 0x6c, - 0x29, 0x83, 0x5e, 0xd1, 0x98, 0x44, 0x8c, 0x16, 0xe7, 0xbf, 0x6b, 0x05, 0x59, 0x72, 0x2a, 0xa9, - 0x76, 0x38, 0xe1, 0x9d, 0x55, 0x4d, 0xb1, 0xff, 0xf1, 0x0a, 0xaa, 0xea, 0x22, 0x75, 0xaa, 0x2c, - 0x5c, 0xb4, 0x64, 0xce, 0xbc, 0x4e, 0xb1, 0xc3, 0xde, 0xdf, 0xdf, 0x0c, 0xb4, 0x6f, 0xde, 0x0c, - 0xb4, 0x7f, 0xbf, 0x19, 0x68, 0xbf, 0x7d, 0x3b, 0xa8, 0x7c, 0xf3, 0x76, 0x50, 0xf9, 0xe7, 0xdb, - 0x41, 0xe5, 0xb2, 0x41, 0xa3, 0xf1, 0xef, 0xff, 0x37, 0x00, 0x00, 0xff, 0xff, 0xa7, 0x08, 0x66, - 0x90, 0x2c, 0x17, 0x00, 0x00, + 0xd5, 0xdd, 0xfe, 0x88, 0xfd, 0x6c, 0x67, 0x3a, 0x95, 0x6c, 0xd6, 0x63, 0x76, 0x8d, 0xd5, 0xb3, + 0xda, 0xcd, 0xe6, 0x10, 0xb1, 0x01, 0x84, 0x84, 0xb4, 0xc0, 0x8e, 0x93, 0x9d, 0x09, 0x38, 0x33, + 0x49, 0x7b, 0x46, 0x1c, 0x51, 0xa7, 0xbb, 0xe2, 0xb4, 0x62, 0x77, 0x77, 0xfa, 0x23, 0x51, 0xfe, + 0x04, 0x70, 0xe1, 0x80, 0xe0, 0x86, 0x10, 0x37, 0xfe, 0x06, 0x1c, 0x57, 0x9c, 0xb8, 0x81, 0x66, + 0xfe, 0x06, 0x07, 0xf4, 0x5e, 0x55, 0x77, 0x57, 0xc7, 0x1f, 0xb3, 0x23, 0xc1, 0xad, 0xde, 0x47, + 0xbd, 0x7a, 0xf5, 0xbe, 0xaa, 0xde, 0x83, 0x4d, 0x77, 0x7e, 0x17, 0x44, 0xd7, 0x3c, 0x3a, 0x08, + 0xa3, 0x20, 0x09, 0x98, 0x1e, 0x5e, 0x98, 0x9f, 0xc3, 0xf6, 0x24, 0xb1, 0xa3, 0x64, 0x92, 0x5e, + 0xbc, 0xb2, 0xe3, 0x6b, 0x8b, 0xdf, 0xa4, 0x3c, 0x4e, 0x18, 0x83, 0x5a, 0x62, 0xc7, 0xd7, 0x3d, + 0x6d, 0xa8, 0xed, 0xb5, 0x2c, 0x5a, 0x9b, 0x07, 0xc0, 0x5e, 0x87, 0xae, 0x9d, 0x70, 0x8b, 0xcf, + 0xec, 0xfb, 0x8c, 0xb3, 0x07, 0x1b, 0x4e, 0xe0, 0x27, 0xdc, 0x4f, 0x24, 0x73, 0x06, 0x9a, 0x13, + 0xd8, 0x3e, 0xf5, 0xa6, 0xd1, 0xc3, 0x0d, 0x03, 0x80, 0xa7, 0x9e, 0x3f, 0x0b, 0xa6, 0x2f, 0xec, + 0x39, 0x97, 0x7b, 0x14, 0x0c, 0xfb, 0x08, 0x5a, 0x02, 0x3a, 0x0b, 0xe2, 0x9e, 0x3e, 0xd4, 0xf6, + 0xba, 0x56, 0x81, 0x30, 0x9f, 0xc1, 0x07, 0x2f, 0x43, 0x8e, 0x42, 0x1f, 0x68, 0xdc, 0x07, 0x3d, + 0x08, 0x49, 0xdc, 0xe6, 0x21, 0x1c, 0x84, 0x17, 0x07, 0x48, 0x7c, 0x19, 0x5a, 0x7a, 0x10, 0xe2, + 0x6d, 0x7c, 0x3c, 0x4c, 0x17, 0xb7, 0xc1, 0xb5, 0x79, 0x0b, 0xbb, 0x0f, 0x05, 0xc5, 0x61, 0xe0, + 0xc7, 0x7c, 0xad, 0xa4, 0x5d, 0x68, 0x44, 0x3c, 0x4e, 0x67, 0x09, 0xc9, 0x6a, 0x5a, 0x12, 0x42, + 0x7c, 0x1c, 0xa4, 0x91, 0xc3, 0x7b, 0x55, 0x3a, 0x43, 0x42, 0xcc, 0x80, 0xea, 0x3c, 0x9e, 0xf6, + 0x6a, 0x84, 0xc4, 0xa5, 0xb9, 0x0f, 0x3b, 0xc2, 0x8a, 0xdf, 0xc2, 0xe2, 0x7b, 0xc0, 0xce, 0x53, + 0x1e, 0xdd, 0x4f, 0x12, 0x3b, 0x49, 0x63, 0x85, 0xd3, 0x2f, 0x4c, 0x27, 0x6e, 0xf3, 0x19, 0x6c, + 0x11, 0xe7, 0x71, 0x14, 0x05, 0xd1, 0x3a, 0xc6, 0x3f, 0x68, 0xd0, 0x7b, 0x6e, 0xfb, 0xee, 0x2c, + 0x3b, 0x7f, 0x72, 0x3e, 0x5e, 0x27, 0x99, 0x3d, 0x26, 0x6b, 0xe8, 0x64, 0x8d, 0x16, 0x5a, 0x63, + 0x72, 0x3e, 0x2e, 0xcc, 0x6a, 0x47, 0xd3, 0xb8, 0x57, 0x1d, 0x56, 0x91, 0x1d, 0xd7, 0xe8, 0xbd, + 0x8b, 0xdc, 0x7b, 0xe2, 0xda, 0x05, 0x02, 0x7d, 0x1f, 0xdf, 0xcc, 0xce, 0xec, 0x24, 0xe1, 0x91, + 0xdf, 0xab, 0x0b, 0xdf, 0x17, 0x18, 0x33, 0x84, 0x9d, 0x51, 0x30, 0x9f, 0x07, 0xfe, 0x2f, 0x29, + 0x4e, 0x73, 0x97, 0x14, 0x66, 0xd7, 0x4a, 0x66, 0x97, 0xe6, 0xd5, 0x73, 0xf3, 0xae, 0x74, 0xc4, + 0x2e, 0x34, 0x44, 0xec, 0x4b, 0xa5, 0x24, 0x64, 0xfe, 0x55, 0x83, 0xed, 0x92, 0x8d, 0xdf, 0xfb, + 0xc4, 0x1f, 0x40, 0x47, 0x9c, 0x21, 0x24, 0xd0, 0xb9, 0xed, 0x43, 0x83, 0x4c, 0xa5, 0xe0, 0xad, + 0x12, 0x17, 0xfb, 0x11, 0x74, 0x63, 0xe9, 0x00, 0xb1, 0xad, 0x36, 0xac, 0xee, 0xb5, 0x0f, 0xb7, + 0x68, 0x9b, 0x4a, 0xb0, 0xca, 0x7c, 0xe6, 0x5f, 0x34, 0x19, 0x14, 0xd2, 0xd5, 0xef, 0xad, 0xef, + 0x17, 0xd0, 0x16, 0x7a, 0x91, 0x00, 0xa9, 0xee, 0xa3, 0x42, 0x5d, 0x21, 0x57, 0xe5, 0xa1, 0x2b, + 0x0a, 0x25, 0xc4, 0x1e, 0xa1, 0xab, 0xa1, 0xe8, 0x2a, 0x36, 0x95, 0xb8, 0xcc, 0x3f, 0x6b, 0xd0, + 0x1e, 0x5d, 0x71, 0x47, 0x6a, 0x8e, 0x2a, 0x86, 0x76, 0x1c, 0x73, 0x37, 0x53, 0x51, 0x40, 0x6c, + 0x07, 0xea, 0x49, 0x90, 0xd8, 0x33, 0x52, 0xb2, 0x6e, 0x09, 0x80, 0x42, 0x25, 0x75, 0x1c, 0x1e, + 0xc7, 0x97, 0xe9, 0x8c, 0xb4, 0xac, 0x5b, 0x0a, 0x06, 0xa5, 0x5d, 0xda, 0xde, 0x8c, 0xbb, 0xe4, + 0xd0, 0xba, 0x25, 0x21, 0xac, 0x47, 0x77, 0x76, 0xe4, 0x7b, 0xfe, 0x94, 0xe2, 0xab, 0x6e, 0x65, + 0x20, 0xee, 0x70, 0x79, 0x62, 0x7b, 0xb3, 0x5e, 0x63, 0xa8, 0xed, 0x75, 0x2c, 0x09, 0x99, 0x1d, + 0x80, 0xa3, 0x74, 0x1e, 0x4a, 0xfb, 0xfe, 0x5a, 0x03, 0x18, 0x07, 0xb6, 0x2b, 0x95, 0xfe, 0x04, + 0xba, 0x97, 0x9e, 0xef, 0xc5, 0x57, 0xdc, 0x7d, 0x7a, 0x9f, 0xf0, 0x98, 0x74, 0xaf, 0x5a, 0x65, + 0x24, 0x2a, 0x4b, 0x5a, 0x0b, 0x16, 0x9d, 0x58, 0x14, 0x0c, 0xeb, 0x43, 0x33, 0x8c, 0x82, 0x69, + 0xc4, 0xe3, 0x58, 0xc6, 0x65, 0x0e, 0xe3, 0xde, 0x39, 0x4f, 0x6c, 0x51, 0xe2, 0x64, 0x74, 0x2a, + 0x18, 0xf3, 0x77, 0x1a, 0x74, 0x27, 0x57, 0x76, 0xe4, 0x7a, 0xfe, 0xf4, 0x59, 0x14, 0xa4, 0x54, + 0x84, 0x12, 0x3b, 0x9a, 0xf2, 0xac, 0xe2, 0x4a, 0x08, 0xf3, 0xf1, 0xe8, 0x68, 0x8c, 0xe7, 0x53, + 0x3e, 0xe2, 0x5a, 0xe8, 0x1f, 0xc5, 0xc9, 0x38, 0x70, 0xec, 0xc4, 0x0b, 0x7c, 0x79, 0x7c, 0x19, + 0x49, 0x59, 0x73, 0xef, 0x3b, 0x64, 0xcc, 0x2a, 0x65, 0x0d, 0x41, 0xa8, 0x77, 0xea, 0x4b, 0x4a, + 0x9d, 0x28, 0x39, 0x6c, 0xfe, 0xa9, 0x0a, 0x30, 0xb9, 0xf7, 0x1d, 0x69, 0xa8, 0x21, 0xb4, 0xe9, + 0xc2, 0xc7, 0xb7, 0xdc, 0x4f, 0x32, 0x33, 0xa9, 0x28, 0x14, 0x46, 0xe0, 0xab, 0x30, 0x33, 0x51, + 0x0e, 0x63, 0xd9, 0x88, 0xb8, 0xc3, 0xfd, 0x04, 0x89, 0x55, 0x22, 0x16, 0x08, 0x66, 0x42, 0x67, + 0x6e, 0xc7, 0x09, 0x8f, 0x4a, 0x46, 0x2a, 0xe1, 0xd8, 0x3e, 0x18, 0x2a, 0xfc, 0x2c, 0xf1, 0x5c, + 0x59, 0x60, 0x16, 0xf0, 0x28, 0x8f, 0x2e, 0x91, 0xc9, 0x6b, 0x08, 0x79, 0x2a, 0x0e, 0xe5, 0xa9, + 0x30, 0xc9, 0xdb, 0x10, 0xf2, 0x1e, 0xe2, 0x51, 0xde, 0xc5, 0x2c, 0x70, 0xae, 0x3d, 0x7f, 0x4a, + 0x0e, 0x68, 0x92, 0xa9, 0x4a, 0x38, 0xf6, 0x25, 0x18, 0xa9, 0x1f, 0xf1, 0x38, 0x98, 0xdd, 0x72, + 0x97, 0xfc, 0x18, 0xf7, 0x5a, 0x4a, 0xce, 0xab, 0x1e, 0xb6, 0x16, 0x58, 0x15, 0x0f, 0x81, 0x48, + 0x1e, 0xe9, 0xa1, 0x01, 0x80, 0x28, 0xaf, 0xaf, 0xee, 0x43, 0xde, 0x6b, 0x8b, 0xe8, 0x29, 0x30, + 0xe6, 0x1f, 0x35, 0xe8, 0xa8, 0x65, 0x48, 0x29, 0x90, 0xda, 0x8a, 0x02, 0xa9, 0xab, 0x05, 0x92, + 0x7d, 0x9e, 0x17, 0x16, 0x51, 0x29, 0x48, 0xdb, 0xb3, 0x28, 0xc0, 0x3c, 0xb4, 0x88, 0x90, 0xd7, + 0x9a, 0x2f, 0xa0, 0x1d, 0xe1, 0x4b, 0x9f, 0x57, 0xb4, 0xbc, 0xb2, 0x58, 0x05, 0xda, 0x52, 0x79, + 0xcc, 0xbf, 0xe9, 0xd0, 0x56, 0x88, 0x0b, 0x9e, 0xd6, 0xbe, 0xa5, 0xa7, 0xf5, 0x15, 0x9e, 0x1e, + 0x66, 0x2a, 0xa5, 0x17, 0x47, 0x5e, 0x24, 0x83, 0x5f, 0x45, 0xe5, 0x1c, 0xa5, 0xd0, 0x52, 0x51, + 0x6c, 0x0f, 0x1e, 0x29, 0xa0, 0x12, 0x58, 0x0f, 0xd1, 0xec, 0x00, 0x18, 0xa1, 0x46, 0x76, 0xe2, + 0x5c, 0xbd, 0x0e, 0x4f, 0x49, 0x1b, 0x8a, 0xae, 0xa6, 0xb5, 0x84, 0xc2, 0xbe, 0x0b, 0xf5, 0x38, + 0xb1, 0xa7, 0x9c, 0x02, 0x2b, 0x7b, 0x5e, 0x11, 0x61, 0x09, 0xbc, 0x62, 0xfc, 0xe6, 0x3b, 0x8c, + 0x6f, 0xfe, 0x47, 0x87, 0x6e, 0xe9, 0xe1, 0x58, 0xfa, 0x9a, 0xe7, 0x27, 0xea, 0x2b, 0x4e, 0x1c, + 0x42, 0x2d, 0xf5, 0x3d, 0xe1, 0xec, 0xcd, 0xc3, 0x0e, 0xd2, 0x5f, 0xfb, 0x5e, 0x82, 0xb1, 0x64, + 0x11, 0x45, 0xd1, 0xa9, 0xf6, 0xae, 0x80, 0xf8, 0x1e, 0x6c, 0x17, 0x81, 0x7c, 0x74, 0x34, 0x1e, + 0x07, 0xce, 0xf5, 0xc9, 0x91, 0xb4, 0xde, 0x32, 0x12, 0x63, 0xe2, 0xb9, 0xa2, 0x84, 0x7c, 0x5e, + 0x11, 0x0f, 0xd6, 0x67, 0x50, 0x77, 0xf0, 0x19, 0x21, 0x2b, 0xc9, 0x80, 0x52, 0xde, 0x95, 0xe7, + 0x15, 0x4b, 0xd0, 0xd9, 0x27, 0x50, 0x73, 0xd3, 0x79, 0x28, 0x6d, 0xb5, 0x89, 0x7c, 0x45, 0x61, + 0x7f, 0x5e, 0xb1, 0x88, 0x8a, 0x5c, 0xb3, 0xc0, 0x76, 0x7b, 0xad, 0x82, 0xab, 0xa8, 0xf7, 0xc8, + 0x85, 0x54, 0xe4, 0xc2, 0x0c, 0xa3, 0x6c, 0x93, 0x5c, 0x45, 0xb1, 0x43, 0x2e, 0xa4, 0x3e, 0x6d, + 0x42, 0x23, 0x16, 0x81, 0xfc, 0x13, 0xd8, 0x2a, 0x59, 0x7f, 0xec, 0xc5, 0x64, 0x2a, 0x41, 0xee, + 0x69, 0xab, 0x5e, 0xf7, 0x6c, 0xff, 0x00, 0x80, 0xee, 0x24, 0x1e, 0x5c, 0xf9, 0x6a, 0x6b, 0xc5, + 0xb7, 0xf1, 0x63, 0x68, 0xe1, 0x5d, 0xd6, 0x90, 0xf1, 0x12, 0xab, 0xc8, 0x21, 0x74, 0x48, 0xfb, + 0xf3, 0xf1, 0x0a, 0x0e, 0x76, 0x08, 0x3b, 0xe2, 0x01, 0xcd, 0xbf, 0xda, 0x1e, 0x3d, 0x17, 0x22, + 0xb1, 0x96, 0xd2, 0xb0, 0xa0, 0x73, 0x14, 0x37, 0x39, 0x1f, 0x67, 0xaf, 0x5a, 0x06, 0x9b, 0x3f, + 0x84, 0x16, 0x9e, 0x28, 0x8e, 0xdb, 0x83, 0x06, 0x11, 0x32, 0x3b, 0x18, 0xb9, 0x39, 0xa5, 0x42, + 0x96, 0xa4, 0x9b, 0xbf, 0xd1, 0x4a, 0xbf, 0x93, 0xf7, 0xae, 0x56, 0xc3, 0xc5, 0xcf, 0x4d, 0xab, + 0xfc, 0x97, 0x39, 0x00, 0xa0, 0x82, 0x93, 0xfd, 0x64, 0x72, 0xf7, 0x16, 0x58, 0x4b, 0xe1, 0x40, + 0xc7, 0x14, 0xd0, 0x12, 0xd3, 0xfe, 0x5e, 0x87, 0x8e, 0xfa, 0x09, 0xfa, 0x7f, 0xa5, 0x1d, 0x53, + 0x3a, 0x89, 0x2c, 0x33, 0x3e, 0xcd, 0x32, 0xa3, 0x5e, 0x5c, 0xa3, 0x88, 0xa2, 0x22, 0x31, 0x9e, + 0xc8, 0xc4, 0x68, 0x10, 0x5b, 0x37, 0x4b, 0x8c, 0x8c, 0x4b, 0xe4, 0xc5, 0x13, 0x99, 0x17, 0x1b, + 0x05, 0x53, 0x1e, 0x52, 0x79, 0x5a, 0x3c, 0x91, 0x69, 0xd1, 0x2c, 0x98, 0x72, 0x37, 0xe7, 0x59, + 0xb1, 0x01, 0x75, 0x72, 0xa7, 0xf9, 0x63, 0x30, 0x54, 0xd3, 0x50, 0x4e, 0x7c, 0x2a, 0x89, 0xa5, + 0x50, 0x50, 0x3f, 0x91, 0x72, 0xef, 0x0d, 0x74, 0x4b, 0x45, 0x05, 0x5f, 0x3a, 0x2f, 0x1e, 0xd9, + 0xbe, 0xc3, 0x67, 0xf9, 0x17, 0x52, 0xc1, 0x28, 0x41, 0xa6, 0x17, 0x92, 0xa5, 0x88, 0x52, 0x90, + 0x29, 0x1f, 0xc1, 0x6a, 0xe9, 0x23, 0xf8, 0x0f, 0x0d, 0x3a, 0xea, 0x06, 0xfc, 0x4b, 0x1e, 0x47, + 0xd1, 0x28, 0x70, 0x85, 0x37, 0xeb, 0x56, 0x06, 0x62, 0xe8, 0xe3, 0x72, 0x66, 0xc7, 0xb1, 0x8c, + 0xc0, 0x1c, 0x96, 0xb4, 0x89, 0x13, 0x84, 0x59, 0x13, 0x92, 0xc3, 0x92, 0x36, 0xe6, 0xb7, 0x7c, + 0x26, 0x9f, 0x9a, 0x1c, 0xc6, 0xd3, 0x4e, 0x79, 0x1c, 0x63, 0x98, 0x88, 0x0a, 0x99, 0x81, 0xb8, + 0xcb, 0xb2, 0xef, 0x46, 0x76, 0x1a, 0x73, 0xf9, 0x57, 0xc9, 0x61, 0x34, 0x0b, 0x36, 0x4b, 0x76, + 0x14, 0xa4, 0x7e, 0xf6, 0x43, 0x51, 0x30, 0x66, 0x1f, 0x7a, 0x93, 0x3b, 0x2f, 0x71, 0xae, 0x28, + 0x8a, 0xc5, 0xc3, 0x23, 0xfb, 0x3d, 0xf3, 0x10, 0xb6, 0x65, 0x0f, 0x5c, 0xea, 0xd0, 0xbf, 0xa3, + 0x34, 0xc0, 0xed, 0x3c, 0x35, 0x44, 0xd3, 0x67, 0xa6, 0xb0, 0x53, 0xde, 0x23, 0x1b, 0x90, 0x75, + 0x9b, 0xfe, 0x07, 0x6d, 0xf3, 0x1d, 0x6c, 0x9d, 0xa5, 0xd1, 0xb4, 0xac, 0x68, 0x1f, 0x9a, 0x9e, + 0x6f, 0x3b, 0x89, 0x77, 0xcb, 0x65, 0x40, 0xe4, 0x30, 0xf5, 0xd3, 0x9e, 0xec, 0xf9, 0xab, 0x16, + 0xad, 0x91, 0xff, 0xd2, 0x9b, 0x71, 0x4a, 0x4f, 0xe9, 0x99, 0x0c, 0x26, 0x55, 0xc4, 0x27, 0x41, + 0x36, 0x88, 0x02, 0x42, 0xfb, 0x51, 0xbb, 0x25, 0x3a, 0xd2, 0x51, 0xe0, 0x5f, 0x7a, 0xd3, 0xcc, + 0x7e, 0x77, 0xf0, 0x78, 0x09, 0xed, 0x1d, 0x1d, 0x59, 0x71, 0x67, 0x7d, 0xd9, 0x9d, 0xab, 0x45, + 0x4d, 0x56, 0x46, 0x2b, 0xb5, 0xd2, 0x68, 0x65, 0xff, 0x57, 0xd0, 0x10, 0x43, 0x09, 0xd6, 0x85, + 0xd6, 0x89, 0x7f, 0x6b, 0xcf, 0x3c, 0xf7, 0x65, 0x68, 0x54, 0x58, 0x13, 0x6a, 0x93, 0x24, 0x08, + 0x0d, 0x8d, 0xb5, 0xa0, 0x7e, 0x86, 0x01, 0x62, 0xe8, 0x0c, 0xa0, 0x81, 0x39, 0x34, 0xe7, 0x46, + 0x15, 0xd1, 0x34, 0xef, 0x31, 0x6a, 0x88, 0x16, 0x93, 0x08, 0xa3, 0xce, 0x36, 0x01, 0xbe, 0x4a, + 0x93, 0x40, 0xb2, 0x35, 0xf6, 0xf7, 0xa1, 0x4e, 0x7d, 0x3e, 0x09, 0xfc, 0xc5, 0xc9, 0x99, 0x51, + 0x61, 0x6d, 0xd8, 0xb0, 0x8e, 0xcf, 0xc6, 0x5f, 0x8d, 0x8e, 0x0d, 0x0d, 0xf7, 0x9e, 0xbc, 0xf8, + 0xf9, 0xf1, 0xe8, 0x95, 0xa1, 0xef, 0xdf, 0x90, 0xc8, 0x29, 0xde, 0xa0, 0x23, 0x75, 0x21, 0xd8, + 0xa8, 0xb0, 0x0d, 0xa8, 0xbe, 0xe0, 0x77, 0x86, 0x46, 0x9b, 0x53, 0x1f, 0xdb, 0x30, 0xa1, 0x0f, + 0xa9, 0xe6, 0x1a, 0x55, 0x24, 0xa0, 0xc2, 0x21, 0x77, 0x8d, 0x1a, 0xeb, 0x40, 0xf3, 0x6b, 0xd9, + 0x57, 0x19, 0x75, 0x24, 0x21, 0x1b, 0xee, 0x69, 0x20, 0x89, 0x94, 0x43, 0x68, 0x63, 0xff, 0x25, + 0x34, 0xb3, 0xf2, 0xc8, 0x1e, 0x41, 0x5b, 0x9e, 0x8a, 0x28, 0xa3, 0x82, 0x57, 0xa4, 0x22, 0x68, + 0x68, 0xa8, 0x3d, 0x16, 0x3a, 0x43, 0xc7, 0x15, 0x56, 0x33, 0xa3, 0x4a, 0x37, 0xba, 0xf7, 0x1d, + 0xa3, 0x86, 0x8c, 0x14, 0x4e, 0x86, 0xbb, 0x7f, 0x0a, 0x1b, 0x32, 0x5e, 0x19, 0x83, 0x4d, 0x29, + 0x4f, 0x62, 0x8c, 0x0a, 0x5a, 0x19, 0xb5, 0x14, 0xdc, 0x1a, 0x5a, 0x8b, 0x2e, 0x20, 0x60, 0x1d, + 0x55, 0x10, 0x96, 0x13, 0x88, 0xea, 0xe1, 0xbf, 0x1a, 0xd0, 0x10, 0x41, 0xc1, 0x46, 0xd0, 0x51, + 0x07, 0x6c, 0xec, 0x43, 0x59, 0xfb, 0x1f, 0x8e, 0xdc, 0xfa, 0x3d, 0xaa, 0xde, 0x4b, 0xa6, 0x1f, + 0x66, 0x85, 0x9d, 0xc0, 0x66, 0x79, 0x58, 0xc5, 0x1e, 0x23, 0xf7, 0xd2, 0x49, 0x58, 0xbf, 0xbf, + 0x8c, 0x94, 0x8b, 0x3a, 0x86, 0x6e, 0x69, 0xfe, 0xc4, 0xe8, 0xdc, 0x65, 0x23, 0xa9, 0xb5, 0x1a, + 0xfd, 0x0c, 0xda, 0xca, 0xd8, 0x84, 0xed, 0x22, 0xeb, 0xe2, 0xac, 0xaa, 0xff, 0xe1, 0x02, 0x3e, + 0x97, 0xf0, 0x25, 0x40, 0x31, 0xc7, 0x60, 0x1f, 0xe4, 0x8c, 0xea, 0x08, 0xab, 0xbf, 0xfb, 0x10, + 0x9d, 0x6f, 0xff, 0x1a, 0x40, 0xce, 0xb1, 0xce, 0xc7, 0x31, 0xfb, 0x08, 0xf9, 0x56, 0xcd, 0xb5, + 0xd6, 0x5e, 0xe4, 0x14, 0xb6, 0x16, 0xea, 0xa3, 0x10, 0xb7, 0xaa, 0x6c, 0xae, 0x15, 0x37, 0x82, + 0x8e, 0x5a, 0x1e, 0x85, 0xbb, 0x97, 0x14, 0x59, 0x21, 0x64, 0x59, 0x25, 0x35, 0x2b, 0xec, 0xa7, + 0x00, 0x45, 0xb1, 0x13, 0xa6, 0x59, 0x28, 0x7e, 0x6b, 0xb5, 0x78, 0x06, 0x5b, 0xca, 0xa8, 0x56, + 0x14, 0x26, 0xe1, 0xa3, 0xc5, 0x09, 0xee, 0x5a, 0x41, 0x96, 0x9c, 0x2b, 0xaa, 0x15, 0x4e, 0x58, + 0x67, 0x55, 0x51, 0xec, 0x7f, 0xbc, 0x82, 0xaa, 0x9a, 0x48, 0x9d, 0x0b, 0x0b, 0x13, 0x2d, 0x99, + 0x14, 0xaf, 0x53, 0xec, 0x69, 0xef, 0xef, 0x6f, 0x06, 0xda, 0x37, 0x6f, 0x06, 0xda, 0xbf, 0xdf, + 0x0c, 0xb4, 0xdf, 0xbe, 0x1d, 0x54, 0xbe, 0x79, 0x3b, 0xa8, 0xfc, 0xf3, 0xed, 0xa0, 0x72, 0xd1, + 0xa0, 0xe1, 0xf6, 0xf7, 0xff, 0x1b, 0x00, 0x00, 0xff, 0xff, 0xe4, 0xc3, 0xb4, 0x67, 0xee, 0x16, + 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -5117,7 +5061,7 @@ func (m *ProcessResult) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *TError) Marshal() (dAtA []byte, err error) { +func (m *ProcessError) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -5127,12 +5071,12 @@ func (m *TError) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *TError) MarshalTo(dAtA []byte) (int, error) { +func (m *ProcessError) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *TError) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *ProcessError) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -5158,20 +5102,26 @@ func (m *TError) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x2a } - if m.ErrLevel != 0 { - i = encodeVarintDmworker(dAtA, i, uint64(m.ErrLevel)) + if len(m.ErrLevel) > 0 { + i -= len(m.ErrLevel) + copy(dAtA[i:], m.ErrLevel) + i = encodeVarintDmworker(dAtA, i, uint64(len(m.ErrLevel))) i-- - dAtA[i] = 0x20 + dAtA[i] = 0x22 } - if m.ErrScope != 0 { - i = encodeVarintDmworker(dAtA, i, uint64(m.ErrScope)) + if len(m.ErrScope) > 0 { + i -= len(m.ErrScope) + copy(dAtA[i:], m.ErrScope) + i = encodeVarintDmworker(dAtA, i, uint64(len(m.ErrScope))) i-- - dAtA[i] = 0x18 + dAtA[i] = 0x1a } - if m.ErrClass != 0 { - i = encodeVarintDmworker(dAtA, i, uint64(m.ErrClass)) + if len(m.ErrClass) > 0 { + i -= len(m.ErrClass) + copy(dAtA[i:], m.ErrClass) + i = encodeVarintDmworker(dAtA, i, uint64(len(m.ErrClass))) i-- - dAtA[i] = 0x10 + dAtA[i] = 0x12 } if m.ErrCode != 0 { i = encodeVarintDmworker(dAtA, i, uint64(m.ErrCode)) @@ -5181,48 +5131,6 @@ func (m *TError) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *ProcessError) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *ProcessError) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *ProcessError) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Error != nil { - { - size, err := m.Error.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintDmworker(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - if len(m.Msg) > 0 { - i -= len(m.Msg) - copy(dAtA[i:], m.Msg) - i = encodeVarintDmworker(dAtA, i, uint64(len(m.Msg))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - func (m *SwitchRelayMasterRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -6237,7 +6145,7 @@ func (m *ProcessResult) Size() (n int) { return n } -func (m *TError) Size() (n int) { +func (m *ProcessError) Size() (n int) { if m == nil { return 0 } @@ -6246,42 +6154,28 @@ func (m *TError) Size() (n int) { if m.ErrCode != 0 { n += 1 + sovDmworker(uint64(m.ErrCode)) } - if m.ErrClass != 0 { - n += 1 + sovDmworker(uint64(m.ErrClass)) - } - if m.ErrScope != 0 { - n += 1 + sovDmworker(uint64(m.ErrScope)) - } - if m.ErrLevel != 0 { - n += 1 + sovDmworker(uint64(m.ErrLevel)) - } - l = len(m.Message) + l = len(m.ErrClass) if l > 0 { n += 1 + l + sovDmworker(uint64(l)) } - l = len(m.RawCause) + l = len(m.ErrScope) if l > 0 { n += 1 + l + sovDmworker(uint64(l)) } - l = len(m.Workaround) + l = len(m.ErrLevel) if l > 0 { n += 1 + l + sovDmworker(uint64(l)) } - return n -} - -func (m *ProcessError) Size() (n int) { - if m == nil { - return 0 + l = len(m.Message) + if l > 0 { + n += 1 + l + sovDmworker(uint64(l)) } - var l int - _ = l - l = len(m.Msg) + l = len(m.RawCause) if l > 0 { n += 1 + l + sovDmworker(uint64(l)) } - if m.Error != nil { - l = m.Error.Size() + l = len(m.Workaround) + if l > 0 { n += 1 + l + sovDmworker(uint64(l)) } return n @@ -11072,7 +10966,7 @@ func (m *ProcessResult) Unmarshal(dAtA []byte) error { } return nil } -func (m *TError) Unmarshal(dAtA []byte) error { +func (m *ProcessError) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -11095,10 +10989,10 @@ func (m *TError) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: TError: wiretype end group for non-group") + return fmt.Errorf("proto: ProcessError: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: TError: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ProcessError: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -11121,10 +11015,10 @@ func (m *TError) Unmarshal(dAtA []byte) error { } } case 2: - if wireType != 0 { + if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field ErrClass", wireType) } - m.ErrClass = 0 + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowDmworker @@ -11134,52 +11028,27 @@ func (m *TError) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.ErrClass |= int32(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ErrScope", wireType) - } - m.ErrScope = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowDmworker - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.ErrScope |= int32(b&0x7F) << shift - if b < 0x80 { - break - } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthDmworker } - case 4: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ErrLevel", wireType) + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthDmworker } - m.ErrLevel = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowDmworker - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.ErrLevel |= int32(b&0x7F) << shift - if b < 0x80 { - break - } + if postIndex > l { + return io.ErrUnexpectedEOF } - case 5: + m.ErrClass = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Message", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ErrScope", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -11207,11 +11076,11 @@ func (m *TError) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Message = string(dAtA[iNdEx:postIndex]) + m.ErrScope = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 6: + case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RawCause", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ErrLevel", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -11239,11 +11108,11 @@ func (m *TError) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.RawCause = string(dAtA[iNdEx:postIndex]) + m.ErrLevel = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 7: + case 5: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Workaround", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Message", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -11271,64 +11140,11 @@ func (m *TError) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Workaround = string(dAtA[iNdEx:postIndex]) + m.Message = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipDmworker(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthDmworker - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthDmworker - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ProcessError) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowDmworker - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: ProcessError: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ProcessError: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: + case 6: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Msg", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field RawCause", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -11356,13 +11172,13 @@ func (m *ProcessError) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Msg = string(dAtA[iNdEx:postIndex]) + m.RawCause = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 2: + case 7: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Error", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Workaround", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowDmworker @@ -11372,27 +11188,23 @@ func (m *ProcessError) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthDmworker } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthDmworker } if postIndex > l { return io.ErrUnexpectedEOF } - if m.Error == nil { - m.Error = &TError{} - } - if err := m.Error.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.Workaround = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex diff --git a/dm/proto/dmworker.proto b/dm/proto/dmworker.proto index 01ab0773b8..862e821148 100644 --- a/dm/proto/dmworker.proto +++ b/dm/proto/dmworker.proto @@ -340,26 +340,19 @@ message ProcessResult { bytes detail = 3; } -// TError represents error used in dm +// ProcessError is same as terror used in dm // NOTE: currently stack trace is not supported, `Message` is the `terror.Error.getMsg` result // and `RawCause` is the `Error` result of error from `terror.Error.Cause()`. -message TError { +message ProcessError { int32 ErrCode = 1; - int32 ErrClass = 2; - int32 ErrScope = 3; - int32 ErrLevel = 4; + string ErrClass = 2; + string ErrScope = 3; + string ErrLevel = 4; string Message = 5; string RawCause = 6; string Workaround = 7; } -// ProcessError represents error produced by a dm unit -// NOTE: refine later, like add error scope field -message ProcessError { - string msg = 1; - TError error = 2; -} - // SwitchRelayMasterRequest represents a request for switching a dm-worker's relay unit to another master server message SwitchRelayMasterRequest { } diff --git a/dm/unit/unit.go b/dm/unit/unit.go index 6e1e393a5c..db8021064e 100644 --- a/dm/unit/unit.go +++ b/dm/unit/unit.go @@ -63,25 +63,32 @@ type Unit interface { // NewProcessError creates a new ProcessError // we can refine to add error scope field if needed func NewProcessError(err error) *pb.ProcessError { - result := &pb.ProcessError{ - Msg: terror.Message(err), - } if e, ok := err.(*terror.Error); ok { - result.Error = &pb.TError{ - ErrCode: int32(e.Code()), - ErrClass: int32(e.Class()), - ErrScope: int32(e.Scope()), - ErrLevel: int32(e.Level()), - Message: terror.Message(e), - RawCause: terror.Message(e.Cause()), + return &pb.ProcessError{ + ErrCode: int32(e.Code()), + ErrClass: e.Class().String(), + ErrScope: e.Scope().String(), + ErrLevel: e.Level().String(), + Message: terror.Message(e), + RawCause: terror.Message(e.Cause()), + Workaround: e.Workaround(), } } - return result + + return &pb.ProcessError{ + ErrCode: int32(terror.ErrNotSet.Code()), + ErrClass: terror.ErrNotSet.Class().String(), + ErrScope: terror.ErrNotSet.Scope().String(), + ErrLevel: terror.ErrNotSet.Level().String(), + Message: terror.Message(err), + RawCause: terror.Message(terror.ErrNotSet.Cause()), + Workaround: terror.ErrNotSet.Workaround(), + } } // IsCtxCanceledProcessErr returns true if the err's context canceled func IsCtxCanceledProcessErr(err *pb.ProcessError) bool { - if strings.Contains(err.Msg, "context canceled") { + if strings.Contains(err.Message, "context canceled") { return true } return false diff --git a/dm/worker/relay.go b/dm/worker/relay.go index 01cc047389..150ca9728f 100644 --- a/dm/worker/relay.go +++ b/dm/worker/relay.go @@ -317,7 +317,7 @@ func (h *realRelayHolder) setResult(result *pb.ProcessResult) { func (h *realRelayHolder) Result() *pb.ProcessResult { h.RLock() defer h.RUnlock() - return statusProcessResult(h.result) + return h.result } // Update update relay config online diff --git a/dm/worker/status.go b/dm/worker/status.go index 6cce2fbd7b..6df1d47e4c 100644 --- a/dm/worker/status.go +++ b/dm/worker/status.go @@ -22,7 +22,6 @@ import ( "github.com/pingcap/dm/pkg/utils" "github.com/golang/protobuf/jsonpb" - "github.com/golang/protobuf/proto" "go.uber.org/zap" ) @@ -193,20 +192,3 @@ func (w *Worker) Error(stName string) []*pb.SubTaskError { return errs } - -// statusProcessResult returns a clone of *pb.ProcessResult, but omit the `Error` field, so no duplicated -// error message will be displayed in `query-status`, because the `Msg` field contains enough error information. -func statusProcessResult(pr *pb.ProcessResult) *pb.ProcessResult { - if pr == nil { - return nil - } - result := proto.Clone(pr).(*pb.ProcessResult) - if result != nil { - for i := range result.Errors { - if result.Errors[i].Error != nil { - result.Errors[i].Msg = "" - } - } - } - return result -} diff --git a/dm/worker/subtask.go b/dm/worker/subtask.go index 1104a042ec..2ba107501e 100644 --- a/dm/worker/subtask.go +++ b/dm/worker/subtask.go @@ -416,7 +416,7 @@ func (st *SubTask) setResult(result *pb.ProcessResult) { func (st *SubTask) Result() *pb.ProcessResult { st.RLock() defer st.RUnlock() - return statusProcessResult(st.result) + return st.result } // Close stops the sub task diff --git a/dm/worker/subtask_test.go b/dm/worker/subtask_test.go index 6e3e2cd431..4963cf1f95 100644 --- a/dm/worker/subtask_test.go +++ b/dm/worker/subtask_test.go @@ -180,7 +180,7 @@ func (t *testSubTask) TestSubTaskNormalUsage(c *C) { } st.Run() c.Assert(st.Stage(), Equals, pb.Stage_Paused) - c.Assert(strings.Contains(st.Result().Errors[0].Error.String(), "has no dm units for mode"), IsTrue) + c.Assert(strings.Contains(st.Result().Errors[0].String(), "has no dm units for mode"), IsTrue) mockDumper := NewMockUnit(pb.UnitType_Dump) mockLoader := NewMockUnit(pb.UnitType_Load) @@ -218,7 +218,7 @@ func (t *testSubTask) TestSubTaskNormalUsage(c *C) { c.Assert(st.CurrUnit(), Equals, mockLoader) c.Assert(st.Result(), NotNil) c.Assert(st.Result().Errors, HasLen, 1) - c.Assert(strings.Contains(st.Result().Errors[0].Msg, "loader process error"), IsTrue) + c.Assert(strings.Contains(st.Result().Errors[0].Message, "loader process error"), IsTrue) c.Assert(st.Stage(), Equals, pb.Stage_Paused) // restore from pausing @@ -366,7 +366,7 @@ func (t *testSubTask) TestPauseAndResumeSubtask(c *C) { c.Assert(st.CurrUnit(), Equals, mockDumper) c.Assert(st.Result(), NotNil) c.Assert(st.Result().Errors, HasLen, 1) - c.Assert(strings.Contains(st.Result().Errors[0].Msg, "dumper process error"), IsTrue) + c.Assert(strings.Contains(st.Result().Errors[0].Message, "dumper process error"), IsTrue) c.Assert(st.Stage(), Equals, pb.Stage_Paused) // pause @@ -375,7 +375,7 @@ func (t *testSubTask) TestPauseAndResumeSubtask(c *C) { c.Assert(st.CurrUnit(), Equals, mockDumper) c.Assert(st.Result(), NotNil) c.Assert(st.Result().Errors, HasLen, 1) - c.Assert(strings.Contains(st.Result().Errors[0].Msg, "dumper process error"), IsTrue) + c.Assert(strings.Contains(st.Result().Errors[0].Message, "dumper process error"), IsTrue) // resume twice c.Assert(st.Resume(), IsNil) diff --git a/dm/worker/task_checker.go b/dm/worker/task_checker.go index 3f8e03558b..9acaba3d34 100644 --- a/dm/worker/task_checker.go +++ b/dm/worker/task_checker.go @@ -241,29 +241,29 @@ func (tsc *realTaskStatusChecker) run() { // isResumableError checks the error message and returns whether we need to // resume the task and retry func isResumableError(err *pb.ProcessError) bool { - if err.Error == nil { + if err == nil { return true } // not elegant code, because TiDB doesn't expose some error for _, msg := range retry.UnsupportedDDLMsgs { - if strings.Contains(strings.ToLower(err.Error.RawCause), strings.ToLower(msg)) { + if strings.Contains(strings.ToLower(err.RawCause), strings.ToLower(msg)) { return false } } for _, msg := range retry.UnsupportedDMLMsgs { - if strings.Contains(strings.ToLower(err.Error.RawCause), strings.ToLower(msg)) { + if strings.Contains(strings.ToLower(err.RawCause), strings.ToLower(msg)) { return false } } - if err.Error.ErrCode == int32(terror.ErrParserParseRelayLog.Code()) { + if err.ErrCode == int32(terror.ErrParserParseRelayLog.Code()) { for _, msg := range retry.ParseRelayLogErrMsgs { - if strings.Contains(strings.ToLower(err.Error.Message), strings.ToLower(msg)) { + if strings.Contains(strings.ToLower(err.Message), strings.ToLower(msg)) { return false } } } - if _, ok := retry.UnresumableErrCodes[err.Error.ErrCode]; ok { + if _, ok := retry.UnresumableErrCodes[err.ErrCode]; ok { return false } diff --git a/errors.toml b/errors.toml index 85343d7afb..89c56c422e 100644 --- a/errors.toml +++ b/errors.toml @@ -2716,3 +2716,9 @@ description = "" workaround = "" tags = ["internal", "medium"] +[error.DM-not-set-48001] +message = "" +description = "" +workaround = "" +tags = ["not-set", "high"] + diff --git a/pkg/election/election_test.go b/pkg/election/election_test.go index a35387ab98..33fe55933f 100644 --- a/pkg/election/election_test.go +++ b/pkg/election/election_test.go @@ -207,7 +207,7 @@ func testElection2After1(t *testElectionSuite, c *C, normalExit bool) { defer cancel5() _, err = NewElection(ctx5, cli, sessionTTL, key, ID3, addr3, t.notifyBlockTime) c.Assert(terror.ErrElectionCampaignFail.Equal(err), IsTrue) - c.Assert(err, ErrorMatches, ".*fail to campaign leader: create the initial session: context canceled.*") + c.Assert(err, ErrorMatches, ".*, Message: fail to campaign leader: create the initial session, RawCause: context canceled.*") } func (t *testElectionSuite) TestElection2After1(c *C) { diff --git a/pkg/terror/adapter_test.go b/pkg/terror/adapter_test.go index c17caaf7b7..51bb940b0b 100644 --- a/pkg/terror/adapter_test.go +++ b/pkg/terror/adapter_test.go @@ -46,8 +46,8 @@ func (t *testTErrorSuite) TestDBAdapter(c *check.C) { exp := tc.expect obj, ok := err.(*Error) c.Assert(ok, check.IsTrue) - c.Assert(obj.getMsg(), check.Equals, tc.expect.message+": "+tc.err.Error()) - c.Assert(obj.Error(), check.Equals, fmt.Sprintf(errBaseFormat+", msg: '%s: %s', workaround: '%s'", exp.code, exp.class, exp.scope, exp.level, exp.message, tc.err.Error(), exp.workaround)) + c.Assert(obj.getMsg(), check.Equals, tc.expect.message) + c.Assert(obj.Error(), check.Equals, fmt.Sprintf(errBaseFormat+", Message: %s, RawCause: %s, Workaround: %s", exp.code, exp.class, exp.scope, exp.level, exp.message, tc.err.Error(), exp.workaround)) } } } diff --git a/pkg/terror/error_list.go b/pkg/terror/error_list.go index f0e788d421..c1847ee68f 100644 --- a/pkg/terror/error_list.go +++ b/pkg/terror/error_list.go @@ -546,6 +546,10 @@ const ( codeSchedulerSubTaskOpSourceNotExist ) +const ( + codeNotSet ErrCode = iota + 48001 +) + // Error instances var ( // Database operation related error @@ -1057,4 +1061,7 @@ var ( ErrSchedulerSubTaskStageInvalidUpdate = New(codeSchedulerSubTaskStageInvalidUpdate, ClassDMMaster, ScopeInternal, LevelMedium, "invalid new expectant subtask stage %s", "") ErrSchedulerSubTaskOpTaskNotExist = New(codeSchedulerSubTaskOpTaskNotExist, ClassDMMaster, ScopeInternal, LevelMedium, "subtasks with name %s need to be operate not exist", "") ErrSchedulerSubTaskOpSourceNotExist = New(codeSchedulerSubTaskOpSourceNotExist, ClassDMMaster, ScopeInternal, LevelMedium, "sources %v need to be operate not exist", "") + + // default error code + ErrNotSet = New(codeNotSet, ClassNotSet, ScopeNotSet, LevelHigh, "", "") ) diff --git a/pkg/terror/terror.go b/pkg/terror/terror.go index 76ecb65a92..f5c2f6f7f3 100644 --- a/pkg/terror/terror.go +++ b/pkg/terror/terror.go @@ -21,10 +21,7 @@ import ( ) const ( - errBaseFormat = "[code=%d:class=%s:scope=%s:level=%s]" - errMessageFormat = "msg: '%s'" - errWorkaroundFormat = "workaround: '%s'" - errFormat = errBaseFormat + ", " + errMessageFormat + ", " + errWorkaroundFormat + errBaseFormat = "[code=%d:class=%s:scope=%s:level=%s]" ) // ErrCode is used as the unique identifier of a specific error type. @@ -51,6 +48,7 @@ const ( ClassDMTracer ClassSchemaTracker ClassScheduler + ClassNotSet ) var errClass2Str = map[ErrClass]string{ @@ -70,6 +68,7 @@ var errClass2Str = map[ErrClass]string{ ClassDMTracer: "dm-tracer", ClassSchemaTracker: "schema-tracker", ClassScheduler: "scheduler", + ClassNotSet: "not-set", } // String implements fmt.Stringer interface @@ -188,7 +187,17 @@ func (e *Error) Workaround() string { // Error implements error interface. func (e *Error) Error() string { - return fmt.Sprintf(errFormat, e.code, e.class, e.scope, e.level, e.getMsg(), e.workaround) + str := fmt.Sprintf(errBaseFormat, e.code, e.class, e.scope, e.level) + if e.getMsg() != "" { + str += fmt.Sprintf(", Message: %s", e.getMsg()) + } + if e.rawCause != nil { + str += fmt.Sprintf(", RawCause: %s", Message(e.rawCause)) + } + if e.workaround != "" { + str += fmt.Sprintf(", Workaround: %s", e.workaround) + } + return str } // Format accepts flags that alter the printing of some verbs @@ -275,15 +284,22 @@ func (e *Error) Delegate(err error, args ...interface{}) error { if err == nil { return nil } + + rawCause := err + // we only get the root rawCause + if tErr, ok := err.(*Error); ok && tErr.rawCause != nil { + rawCause = tErr.rawCause + } + return &Error{ code: e.code, class: e.class, scope: e.scope, level: e.level, - message: fmt.Sprintf("%s: %s", e.message, err), + message: e.message, workaround: e.workaround, args: args, - rawCause: err, + rawCause: rawCause, stack: errors.NewStack(0), } } diff --git a/pkg/terror/terror_test.go b/pkg/terror/terror_test.go index 15d358c583..66ba493cc4 100644 --- a/pkg/terror/terror_test.go +++ b/pkg/terror/terror_test.go @@ -34,15 +34,17 @@ type testTErrorSuite struct { func (t *testTErrorSuite) TestTError(c *check.C) { var ( - code = codeDBBadConn - class = ClassDatabase - scope = ScopeUpstream - level = LevelMedium - message = "bad connection" - workaround = "please check your network connection" - messageArgs = "message with args: %s" - commonErr = errors.New("common error") - errFormatWithArg = errBaseFormat + ", msg: '%s: %s', workaround: '%s'" + code = codeDBBadConn + class = ClassDatabase + scope = ScopeUpstream + level = LevelMedium + message = "bad connection" + workaround = "please check your network connection" + messageArgs = "message with args: %s" + commonErr = errors.New("common error") + errFormat = errBaseFormat + ", Message: %s, Workaround: %s" + errFormatWithArg = errBaseFormat + ", Message: %s: %s, Workaround: %s" + errFormatWithRawCause = errBaseFormat + ", Message: %s, RawCause: %s, Workaround: %s" ) c.Assert(ClassDatabase.String(), check.Equals, errClass2Str[ClassDatabase]) @@ -81,25 +83,25 @@ func (t *testTErrorSuite) TestTError(c *check.C) { c.Assert(err.Delegate(nil, "nil"), check.IsNil) err4 := err.Delegate(commonErr) c.Assert(err.Equal(err4), check.IsTrue) - c.Assert(err4.Error(), check.Equals, fmt.Sprintf(errFormatWithArg, code, class, scope, level, message, commonErr, workaround)) + c.Assert(err4.Error(), check.Equals, fmt.Sprintf(errFormatWithRawCause, code, class, scope, level, message, commonErr, workaround)) c.Assert(perrors.Cause(err4), check.Equals, commonErr) argsErr := New(code, class, scope, level, messageArgs, workaround) err4 = argsErr.Delegate(commonErr, "1065") c.Assert(argsErr.Equal(err4), check.IsTrue) - c.Assert(err4.Error(), check.Equals, fmt.Sprintf(errBaseFormat+", msg: 'message with args: 1065: common error', workaround: '%s'", code, class, scope, level, workaround)) + c.Assert(err4.Error(), check.Equals, fmt.Sprintf(errFormatWithRawCause, code, class, scope, level, "message with args: 1065", commonErr, workaround)) // test Error AnnotateDelegate c.Assert(err.AnnotateDelegate(nil, "message", "args"), check.IsNil) err5 := err.AnnotateDelegate(commonErr, "annotate delegate error: %d", 1066) c.Assert(err.Equal(err5), check.IsTrue) - c.Assert(err5.Error(), check.Equals, fmt.Sprintf(errBaseFormat+", msg: 'annotate delegate error: 1066: common error', workaround: '%s'", code, class, scope, level, workaround)) + c.Assert(err5.Error(), check.Equals, fmt.Sprintf(errFormatWithRawCause, code, class, scope, level, "annotate delegate error: 1066", commonErr, workaround)) // test Error Annotate oldMsg := err.getMsg() err6 := Annotate(err, "annotate error") c.Assert(err.Equal(err6), check.IsTrue) - c.Assert(err6.Error(), check.Equals, fmt.Sprintf(errBaseFormat+", msg: 'annotate error: %s', workaround: '%s'", code, class, scope, level, oldMsg, workaround)) + c.Assert(err6.Error(), check.Equals, fmt.Sprintf(errFormatWithArg, code, class, scope, level, "annotate error", oldMsg, workaround)) c.Assert(Annotate(nil, ""), check.IsNil) annotateErr := Annotate(commonErr, "annotate") @@ -111,7 +113,7 @@ func (t *testTErrorSuite) TestTError(c *check.C) { oldMsg = err.getMsg() err7 := Annotatef(err, "annotatef error %s", "1067") c.Assert(err.Equal(err7), check.IsTrue) - c.Assert(err7.Error(), check.Equals, fmt.Sprintf(errBaseFormat+", msg: 'annotatef error 1067: %s', workaround: '%s'", code, class, scope, level, oldMsg, workaround)) + c.Assert(err7.Error(), check.Equals, fmt.Sprintf(errFormatWithArg, code, class, scope, level, "annotatef error 1067", oldMsg, workaround)) c.Assert(Annotatef(nil, ""), check.IsNil) annotateErr = Annotatef(commonErr, "annotatef %s", "1068") @@ -170,15 +172,16 @@ func (t *testTErrorSuite) TestTErrorStackTrace(c *check.C) { func (t *testTErrorSuite) TestTerrorWithOperate(c *check.C) { var ( - code = codeDBBadConn - class = ClassDatabase - scope = ScopeUpstream - level = LevelMedium - message = "message with args: %s" - err = New(code, class, scope, level, message, "") - arg = "arg" - workaround = "" - commonErr = perrors.New("common error") + code = codeDBBadConn + class = ClassDatabase + scope = ScopeUpstream + level = LevelMedium + message = "message with args: %s" + workaround = "please check your connection" + err = New(code, class, scope, level, message, workaround) + arg = "arg" + commonErr = perrors.New("common error") + errFormatWithArg = errBaseFormat + ", Message: %s: %s, Workaround: %s" ) // test WithScope @@ -187,7 +190,7 @@ func (t *testTErrorSuite) TestTerrorWithOperate(c *check.C) { c.Assert(WithScope(commonErr, newScope).Error(), check.Equals, fmt.Sprintf("error scope: %s: common error", newScope)) err1 := WithScope(err.Generate(arg), newScope) c.Assert(err.Equal(err1), check.IsTrue) - c.Assert(err1.Error(), check.Equals, fmt.Sprintf(errBaseFormat+", msg: 'message with args: %s', workaround: '%s'", code, class, newScope, level, arg, workaround)) + c.Assert(err1.Error(), check.Equals, fmt.Sprintf(errFormatWithArg, code, class, newScope, level, "message with args", arg, workaround)) // test WithClass newClass := ClassFunctional @@ -195,5 +198,5 @@ func (t *testTErrorSuite) TestTerrorWithOperate(c *check.C) { c.Assert(WithClass(commonErr, newClass).Error(), check.Equals, fmt.Sprintf("error class: %s: common error", newClass)) err2 := WithClass(err.Generate(arg), newClass) c.Assert(err.Equal(err2), check.IsTrue) - c.Assert(err2.Error(), check.Equals, fmt.Sprintf(errBaseFormat+", msg: 'message with args: %s', workaround: '%s'", code, newClass, scope, level, arg, workaround)) + c.Assert(err2.Error(), check.Equals, fmt.Sprintf(errFormatWithArg, code, newClass, scope, level, "message with args", arg, workaround)) } diff --git a/syncer/sharding-meta/shardmeta_test.go b/syncer/sharding-meta/shardmeta_test.go index 5f98bd13eb..409eaaa4fe 100644 --- a/syncer/sharding-meta/shardmeta_test.go +++ b/syncer/sharding-meta/shardmeta_test.go @@ -182,7 +182,7 @@ func (t *testShardMetaSuite) TestShardingMeta(c *check.C) { c.Assert(meta.GetActiveDDLItem(table3), check.IsNil) c.Assert(meta.InSequenceSharding(), check.IsFalse) location, err = meta.ActiveDDLFirstLocation() - c.Assert(err, check.ErrorMatches, fmt.Sprintf("\\[.*\\], msg: 'activeIdx %d larger than length of global DDLItems: .*", meta.ActiveIdx())) + c.Assert(err, check.ErrorMatches, fmt.Sprintf("\\[.*\\], Message: activeIdx %d larger than length of global DDLItems: .*", meta.ActiveIdx())) sqls, args = meta.FlushData(sourceID, tableID) c.Assert(sqls, check.HasLen, 1) @@ -237,7 +237,7 @@ func (t *testShardMetaSuite) TestShardingMetaWrongSequence(c *check.C) { } active, err = meta.AddItem(items[4]) c.Assert(active, check.IsFalse) - c.Assert(err, check.ErrorMatches, "\\[.*\\], msg: 'detect inconsistent DDL sequence from source .*, right DDL sequence should be .*") + c.Assert(err, check.ErrorMatches, "\\[.*\\], Message: detect inconsistent DDL sequence from source .*, right DDL sequence should be .*") } func (t *testShardMetaSuite) TestFlushLoadMeta(c *check.C) { diff --git a/tests/dmctl_advance/check_list/sql_replace.sh b/tests/dmctl_advance/check_list/sql_replace.sh index 28a5b77816..cd64382c0b 100644 --- a/tests/dmctl_advance/check_list/sql_replace.sh +++ b/tests/dmctl_advance/check_list/sql_replace.sh @@ -10,7 +10,7 @@ function sql_replace_invalid_binlog_pos() { binlog_pos="mysql-bin:shoud-bin-digital" run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \ "sql-replace test-task --binlog-pos $binlog_pos sql1" \ - "\[.*\], msg: 'invalid --binlog-pos $binlog_pos in sql operation: the pos should be digital" 1 + "\[.*\], Message: invalid --binlog-pos $binlog_pos in sql operation: the pos should be digital" 1 } function sql_replace_non_sharding_without_one_worker() { diff --git a/tests/dmctl_advance/check_list/sql_skip.sh b/tests/dmctl_advance/check_list/sql_skip.sh index 14fe5c4c6d..a240093d44 100644 --- a/tests/dmctl_advance/check_list/sql_skip.sh +++ b/tests/dmctl_advance/check_list/sql_skip.sh @@ -16,14 +16,14 @@ function sql_skip_invalid_binlog_pos() { binlog_pos="mysql-bin:shoud-bin-digital" run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \ "sql-skip test-task --binlog-pos $binlog_pos" \ - "\[.*\], msg: 'invalid --binlog-pos $binlog_pos in sql operation: the pos should be digital" 1 + "\[.*\], Message: invalid --binlog-pos $binlog_pos in sql operation: the pos should be digital" 1 } function sql_skip_invalid_regex() { regex="~(\[a-z\])\\1" run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \ "sql-skip test-task --sql-pattern $regex" \ - "invalid --sql-pattern .* in sql operation:" 1 + "invalid --sql-pattern .* in sql operation" 1 } function sql_skip_sharding_with_binlogpos() { diff --git a/tests/dmctl_basic/check_list/check_task.sh b/tests/dmctl_basic/check_list/check_task.sh index d1f190ddeb..944197a477 100644 --- a/tests/dmctl_basic/check_list/check_task.sh +++ b/tests/dmctl_basic/check_list/check_task.sh @@ -39,5 +39,6 @@ function check_task_error_database_config() { task_conf=$1 run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \ "check-task $task_conf" \ - "database driver error" 1 + "Access denied for user" 1 \ + "Please check the database config in configuration file" 1 } diff --git a/tests/relay_interrupt/run.sh b/tests/relay_interrupt/run.sh index 77646a5a58..74bf6ce85e 100644 --- a/tests/relay_interrupt/run.sh +++ b/tests/relay_interrupt/run.sh @@ -51,7 +51,7 @@ function run() { run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \ "query-status -s $SOURCE_ID1" \ "no sub task started" 1 \ - "ERROR" 2 + "ERROR" 1 echo "start task and query status, task and relay have error message" task_conf="$cur/conf/dm-task.yaml" @@ -64,12 +64,12 @@ function run() { sleep 2 run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \ "query-status -s $SOURCE_ID1" \ - "database driver error: ERROR 1152" 1 \ - "ERROR" 2 + "database driver error" 1 \ + "ERROR 1152" 1 run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \ "query-status -s $SOURCE_ID1" \ "there aren't any data under relay log directory" 1 \ - "ERROR" 2 + "ERROR" 1 run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \ "query-status" \ "\"taskName\": \"test\"" 1 \ diff --git a/tests/shardddl1/run.sh b/tests/shardddl1/run.sh index a40e6ce4af..3b32103268 100644 --- a/tests/shardddl1/run.sh +++ b/tests/shardddl1/run.sh @@ -12,7 +12,7 @@ function DM_001_CASE() { run_sql_source1 "alter table ${shardddl1}.${tb2} add column new_col1 int;" run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \ "query-status test" \ - "Message.*Duplicate column name 'new_col1'" 1 + "Duplicate column name 'new_col1'" 1 } function DM_001() { @@ -313,7 +313,7 @@ function DM_027_CASE() { # we now haven't checked table struct when create sharding table run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \ "query-status test" \ - "Message.*Unknown column 'val' in 'field list'" 1 + "Unknown column 'val' in 'field list'" 1 } function DM_027() { @@ -324,7 +324,7 @@ function DM_028_CASE() { run_sql_source1 "alter table ${shardddl1}.${tb1} drop primary key;" run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \ "query-status test" \ - "Message.*Unsupported drop primary key when alter-primary-key is false" 1 + "Unsupported drop primary key when alter-primary-key is false" 1 } function DM_028() { @@ -420,7 +420,7 @@ function DM_034_CASE() { run_sql_source2 "alter table ${shardddl1}.${tb2} add new_col1 int unique auto_increment;" run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \ "query-status test" \ - "Message.*unsupported add column 'new_col1' constraint UNIQUE KEY when altering" 2 + "unsupported add column 'new_col1' constraint UNIQUE KEY when altering" 2 } function DM_034() { diff --git a/tests/shardddl3/run.sh b/tests/shardddl3/run.sh index 5e647c9faf..b3f6bf510d 100644 --- a/tests/shardddl3/run.sh +++ b/tests/shardddl3/run.sh @@ -11,7 +11,7 @@ function DM_076_CASE() { run_sql_source1 "alter table ${shardddl1}.${tb1} add primary key(id);" run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \ "query-status test" \ - "Message.*Unsupported add primary key" 1 + "Unsupported add primary key" 1 } function DM_076() { @@ -22,7 +22,7 @@ function DM_077_CASE() { run_sql_source1 "alter table ${shardddl1}.${tb1} drop primary key;" run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \ "query-status test" \ - "Message.*Unsupported drop primary key when alter-primary-key is false" 1 + "Unsupported drop primary key when alter-primary-key is false" 1 } function DM_077() {