可以将对 #execute(Object) 方法的每次调用视为在状态机中从一种状态转换到另一种状态。抽象类 StateMachineProcedure 是基础 _ 过程 _ 类的包装器,它提供了用于实现状态机的构造作为 _ 过程 _。在每个状态转换之后,当前状态被持久化,使得在崩溃/重启的情况下,可以从崩溃/重启之前的过程的先前状态恢复状态转换。各个过程需要定义初始状态和终止状态和钩子 executeFromState() 和 setNextState() 是为状态转换提供的。
新的 RemoteProcedureDispatcher(+子类 RSProcedureDispatcher)原语负责运行基于过程的 Assignments 的“远程”组件。该调度员了解“服务器”。它按时间/计数基于时间聚合分配,因此可以批量发送过程而不是每个 RPC 发送一个过程。过程状态返回到 RegionServer 心跳报告在线/离线区域的背面(不再通过 ZK 通知)。响应将传递给 AMv2 以进行“处理”。它将检查内存中的状态。如果存在不匹配,则假设 RS 端出现问题,它会禁用 RegionServer。超时会触发重试(尚未实施!)。过程机器使用实体 _ 锁定 _ 确保任何一个区域/表上一次只能执行一个操作,并且智能关于什么是串行以及可以同时运行什么(锁定是基于 zk 的 - 你放了一个 znode 在 zk 中表 - 但现在已经转换为基于程序的项目的一部分)。