5.13 NDB_STTOR 阶段 5

对于初始启动和系统重启,此阶段意味着执行本地检查点。这由主节点处理,以便其他节点将立即从该阶段返回。节点重启和初始节点重启在这个阶段执行记录从主片段副本到起始片段副本的复制。在复制过程开始之前启用本地检查点。

将数据复制到起始节点是节点接管协议的一部分。作为该协议的一部分,更新起始节点的节点状态;这是使用全局检查点协议进行通信的。等待这些事件发生可确保将新节点状态传达给所有节点及其系统文件。

在传达节点状态后,所有节点都会收到信号,表明我们即将启动该节点的接管协议。该协议的一部分包括系统重启阶段的步骤 3 - 9,如本节后面所述。这意味着恢复所有片段,准备执行重做日志,执行重做日志,最后报告 DBDIH重做日志执行完成,都是这个过程的一部分。

准备工作完成后,必须执行节点中每个分片的复制阶段。复制片段的过程包括以下步骤:

  1. 通过向起始节点中的内核块发送信号 DBLQH,通知它复制过程即将开始 。PREPARE_COPY_FRAGREQ

  2. DBLQH确认此请求 时CREATE_FRAGREQ,将向所有节点发送一个信号,通知它们正在准备将数据复制到此表片段的此片段副本。

  3. 在所有节点都确认了这一点之后,一个 COPY_FRAGREQ信号被发送到要从中将数据复制到新节点的节点。这始终是片段的主要片段副本。指示的节点将所有数据复制到起始节点以响应此消息。

  4. 复制完成并 COPY_FRAGCONF发送消息后,通过 UPDATE_TOREQ信号通知所有节点完成。

  5. 在所有节点更新以反映片段的新状态后,DBLQH起始节点的内核块被告知复制已经完成,片段副本现在是最新的,任何故障现在都应该被视为真正的失败。

  6. 如果这是创建表时它所具有的角色,则新片段副本将转换为主片段副本。

  7. 完成此更改后, CREATE_FRAGREQ将向所有节点发送另一轮消息,通知它们现在已提交片段的接管。

  8. 此后,如果存在另一个片段,则对下一个片段重复该过程。

  9. 当节点没有更多的片段可供接管时,所有节点都会通过向所有节点发送 UPDATE_TOREQ信号来获知这一点。

  10. 等待下一个完整的本地检查点发生,从头到尾运行。

  11. 使用完整的全局检查点更新节点状态。与上一步中的本地检查点一样,必须允许全局检查点开始然后结束。

  12. END_TOREQ当全局检查点完成时,它将通过向所有节点发送信号来 传达该节点重启成功的本地检查点。

  13. ASTART_COPYCONF被发送回起始节点,通知它节点重启已经完成。

  14. 接收START_COPYCONF信号结束 NDB_STTOR阶段 5。这为系统重启提供了另一个同步点,指定为 WAITPOINT_5_2

笔记

该阶段的复制过程理论上可以由多个节点并行执行。然而,从主节点到所有节点的所有消息目前一次发送到单个节点,但可以完全并行。这很可能在不久的将来完成。

在初始和初始节点重启中,该 SUMA块从SUMA主节点请求订阅。 NDBCNTR执行 NDB_STTOR阶段 6。没有其他 NDBCNTR活动发生。