对于初始启动和系统重新启动,此阶段意味着执行本地检查点。这由主节点处理,以便其他节点将立即从此阶段返回。节点重新启动和初始节点重新启动将在此阶段将记录从主片段副本复制到起始片段副本。在开始复制进程之前启用本地检查点。
将数据复制到起始节点是节点接管协议的一部分。作为该协议的一部分,启动节点的节点状态被更新;这是使用全局检查点协议进行通信的。等待这些事件发生可以确保将新的节点状态通信到所有节点及其系统文件。
在与节点的状态通信之后,所有节点都将收到信号,表明我们即将启动该节点的接管协议。该协议的一部分包括系统重启阶段的步骤3 - 9,稍后将在本节中进行描述。这意味着恢复所有的片段,准备执行重做日志,执行重做日志,最后报告回DBDIH
当重做日志的执行完成时,都是这个过程的一部分。
准备工作完成后,必须对节点中的每个片段执行复制阶段。复制一个片段的过程包括以下步骤:
的
DBLQH
通过向开始节点中的内核块发送一个PREPARE_COPY_FRAGREQ
信号。当
DBLQH
确认此请求CREATE_FRAGREQ
向所有节点发送信号,通知它们正在准备将数据复制到这个表片段的这个片段副本。在所有节点都确认这一点后,a
COPY_FRAGREQ
信号发送到节点,数据将从该节点复制到新节点。这总是片段的主要片段副本。所指示的节点将所有数据复制到响应此消息的起始节点。复制完成后,和
COPY_FRAGCONF
消息发送后,所有节点都将通过UPDATE_TOREQ
信号。在所有节点都已更新以反映片段的新状态之后,将
DBLQH
开始节点的内核块被告知副本已经完成,并且片段副本现在是最新的,任何失败现在都应该被视为真正的失败。如果新片段副本在创建表时具有主片段副本的角色,则将其转换为主片段副本。
完成此更改后的另一轮
CREATE_FRAGREQ
消息被发送到所有节点,通知它们片段的接管已经提交。在此之后,如果存在另一个片段,则使用下一个片段重复此过程。
当没有更多的片段由节点接管时,所有节点通过发送一个
UPDATE_TOREQ
所有人都收到了信号。等待下一个完整的本地检查点发生,从开始运行到结束。
使用完整的全局检查点更新节点状态。与上一步中的本地检查点一样,必须允许启动全局检查点,然后允许结束全局检查点。
当全局检查点完成时,它将通过发送一个
END_TOREQ
向所有节点发送信号。一个
START_COPYCONF
返回给开始节点,通知它节点重启已经完成。收到
START_COPYCONF
信号结束NDB_STTOR
阶段5。这为系统重新启动提供了另一个同步点,指定为WAITPOINT_5_2
.
理论上,这个阶段的复制过程可以由几个节点并行执行。然而,从主节点到所有节点的所有消息目前都是一次发送到单个节点,但可以完全并行。这很可能在不久的将来就会实现。
在初始节点和初始节点重新启动时,SUMA
的订阅请求SUMA
主节点。NDBCNTR
执行NDB_STTOR
6级。没有其他的NDBCNTR
活动发生。