Data Migration 错误说明

    DM 1.0.0-GA 版本中引入了新的错误系统。该系统:

    • 增加了 、scopelevel 等错误信息。
    • 优化了错误描述内容、错误调用链信息和调用堆栈信息。

    错误系统的详细设计和实现,可参阅 RFC 文档: Proposal: Improve Error System

    以下是 DM 实际输出的一条错误信息。本文根据这条信息,对各个字段作详细说明。

    DM 中的错误信息均按以下固定格式输出:

    1. [错误基本信息] + 错误 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 代码仓库已发布的错误码中查询完整的错误码列表。