Data Migration 错误说明
DM 1.0.0-GA 版本中引入了新的错误系统。该系统:
- 增加了 、
scope
、level
等错误信息。 - 优化了错误描述内容、错误调用链信息和调用堆栈信息。
错误系统的详细设计和实现,可参阅 RFC 文档: Proposal: Improve Error System。
以下是 DM 实际输出的一条错误信息。本文根据这条信息,对各个字段作详细说明。
DM 中的错误信息均按以下固定格式输出:
[错误基本信息] + 错误 message 描述 + 错误堆栈信息(可选)
code
:错误码,错误唯一标识。同一种错误都使用相同的错误码。错误码不随 DM 版本改变。
class
:错误分类。用于标记出现错误的系统子模块。
下表展示所有的错误类别、错误对应的系统子模块、错误样例:
scope
:错误作用域。用于标识错误发生时 DM 作用对象的范围和来源,包括未设置 (not-set)、上游数据库 (upstream)、下游数据库 (downstream)、内部 (internal) 四种类型。
如果错误发生的逻辑直接涉及到上下游数据库请求,作用域会设置为 upstream 或 downstream,其他出错场景目前都设置为 internal。
在上述的错误样例中:
code=38008
表示 gRPC 通信出错的错误码。class=dm-master
,表示 DM-master 对外发送 gRPC 请求时出错(请求发送至 DM-worker)。scope=interal
表示 DM 内部出现错误。level=high
,表示这是一个高级别错误,需要用户注意。可根据错误 message 和错误堆栈判断出更多错误信息。
错误 message 使用描述性语言来表示错误的详细信息。对于错误调用链上每一层额外增加的错误 message,采用 的模式来叠加和保存错误 message。wrap 最外层的 message 是 DM 内部对该错误的描述,wrap 最内层的 message 是该错误最底层出错位置的错误描述。
以上述样例错误的 message 为例:
- wrap 最外层 message,
grpc request error
是 DM 对该错误的描述。 - wrap 最内层 message,
connection error: desc = "transport: Error while dialing dial tcp 172.17.0.2:8262: connect: connection refused"
,是 gRPC 底层建立连接失败时返回的错误。
通过对基本错误信息和错误 message 进行分析,可以诊断出错误是在 DM-master 向 DM-worker 发送 gRPC 请求建立连接失败时出现的。该错误通常是由 DM-worker 未正常运行引起。
可在 DM 代码仓库已发布的错误码中查询完整的错误码列表。