190.1。指定/取消指定

分配和取消分配公共 RegionTransitionProcedure 的子类。由于 RTP 实例对区域进行锁定,因此每个区域一次只能运行一个 RegionTransitionProcedure。 RTP 基础程序有三个步骤;存储过程步骤(REGION_TRANSITION_QUEUE);调度程序打开或关闭,然后暂停等待远程区域服务器报告成功打开或失败(REGION_TRANSITION_DISPATCH)或通知服务器发出请求崩溃;最后在 hbase:meta(REGION_TRANSITION_FINISH)中注册成功的打开/关闭。

以下是区域 56f985a727afe80a184dac75fbf6860c 在日志中的分配方式。分配是由服务器崩溃引起的(进程 ID 1176 或 pid = 1176,当它是过程的父级时,它被标识为 ppid = 1176)。 assign 是 pid = 1179,两者的第二个区域由此服务器崩溃分配。

2017-05-23 12:04:24,175 INFO  [ProcExecWrkr-30] procedure2.ProcedureExecutor: Initialized subprocedures=[{pid=1178, ppid=1176, state=RUNNABLE:REGION_TRANSITION_QUEUE; AssignProcedure table=IntegrationTestBigLinkedList, region=bfd57f0b72fd3ca77e9d3c5e3ae48d76, target=ve0540.halxg.example.org,16020,1495525111232}, {pid=1179, ppid=1176, state=RUNNABLE:REGION_TRANSITION_QUEUE; AssignProcedure table=IntegrationTestBigLinkedList, region=56f985a727afe80a184dac75fbf6860c, target=ve0540.halxg.example.org,16020,1495525111232}] 

接下来,我们通过使用框架排队('注册')过程来开始赋值。

2017-05-23 12:04:24,241 INFO  [ProcExecWrkr-30] assignment.AssignProcedure: Start pid=1179, ppid=1176, state=RUNNABLE:REGION_TRANSITION_QUEUE; AssignProcedure table=IntegrationTestBigLinkedList, region=56f985a727afe80a184dac75fbf6860c, target=ve0540.halxg.example.org,16020,1495525111232; rit=OFFLINE, location=ve0540.halxg.example.org,16020,1495525111232; forceNewPlan=false, retain=false 

通过跟踪其进程 ID 来跟踪日志中的过程运行 - 此处为 pid = 1179。

接下来,我们转到调度阶段,我们更新 hbase:meta 表,将区域状态设置为服务器 ve540 上的 OPENING。然后我们向 ve540 发送一个 rpc,要求它打开该区域。此后我们暂停分配,直到我们从 ve540 收到一条消息,告知它是否已成功打开该区域(或不成功)。

2017-05-23 12:04:24,494 INFO  [ProcExecWrkr-38] assignment.RegionStateStore: pid=1179 updating hbase:meta row=IntegrationTestBigLinkedList,H\xE3@\x8D\x964\x9D\xDF\x8F@9\x0F\xC8\xCC\xC2,1495566261066.56f985a727afe80a184dac75fbf6860c., regionState=OPENING, regionLocation=ve0540.halxg.example.org,16020,1495525111232
2017-05-23 12:04:24,498 INFO  [ProcExecWrkr-38] assignment.RegionTransitionProcedure: Dispatch pid=1179, ppid=1176, state=RUNNABLE:REGION_TRANSITION_DISPATCH; AssignProcedure table=IntegrationTestBigLinkedList, region=56f985a727afe80a184dac75fbf6860c, target=ve0540.halxg.example.org,16020,1495525111232; rit=OPENING, location=ve0540.halxg.example.org,16020,1495525111232 

下面我们记录该区域在 ve540 上成功打开的传入报告。程序被唤醒(您可以通过线程的名称,它的 ProcedureExecutor 线程,ProcExecWrkr-9 告诉它程序正在运行)。唤醒过程更新 hbase:meta 中的状态以表示该区域在 ve0540 上打开。然后报告完成和退出。

2017-05-23 12:04:26,643 DEBUG [RpcServer.default.FPBQ.Fifo.handler=46,queue=1,port=16000] assignment.RegionTransitionProcedure: Received report OPENED seqId=11984985, pid=1179, ppid=1176, state=RUNNABLE:REGION_TRANSITION_DISPATCH; AssignProcedure table=IntegrationTestBigLinkedList, region=56f985a727afe80a184dac75fbf6860c, target=ve0540.halxg.example.org,16020,1495525111232; rit=OPENING, location=ve0540.halxg.example.org,16020,1495525111232                                                                                                                                                                       2017-05-23 12:04:26,643 INFO  [ProcExecWrkr-9] assignment.RegionStateStore: pid=1179 updating hbase:meta row=IntegrationTestBigLinkedList,H\xE3@\x8D\x964\x9D\xDF\x8F@9\x0F\xC8\xCC\xC2,1495566261066.56f985a727afe80a184dac75fbf6860c., regionState=OPEN, openSeqNum=11984985, regionLocation=ve0540.halxg.example.org,16020,1495525111232
2017-05-23 12:04:26,836 INFO  [ProcExecWrkr-9] procedure2.ProcedureExecutor: Finish suprocedure pid=1179, ppid=1176, state=SUCCESS; AssignProcedure table=IntegrationTestBigLinkedList, region=56f985a727afe80a184dac75fbf6860c, target=ve0540.halxg.example.org,16020,1495525111232 

取消分配看起来类似,因为它基于 RegionTransitionProcedure。它具有相同的状态转换,并且基本上执行相同的步骤,但具有不同的状态名称(CLOSING,CLOSED)。

大多数其他过程是 Pv2 StateMachine 实现的子类。我们有 Table 和 Region 聚焦的 StateMachines 类型。