zxid 的两半各自怎么变化?哪些操作会让 counter 增加?epoch 什么时候增加?这篇把这三个问题逐个量出来,并顺手区分 epoch 与选举轮次 round。
create /x counter 1 → 2(+1) set /x counter 2 → 3(+1) delete /x counter 3 → 4(+1) get /(读) counter 4 → 4(+0) exists /(读) counter 4 → 4(+0) multi(5 个 create) counter 4 → 5(+1) 新建并立刻关闭一个会话 counter 5 → 7(+2) create 临时节点(同一会话) counter 7 → 8(+1)
第 1 次换 leader 之后:新 leader z38-3,zxid epoch = 2,counter = 0 第 2 次换 leader 之后:新 leader z38-2,zxid epoch = 3,counter = 0 第 3 次换 leader 之后:新 leader z38-3,zxid epoch = 4,counter = 0 没有多数派的 8 秒里节点反复 LOOKING;恢复后 epoch 4 → 5(只有成功当选才 +1,选举轮次 round 是另一个计数) 某节点日志里出现过的 n.round 最大值(选举轮次): 0x5
第三节里 epoch 只增加了 1,说明失败的选举轮次没有消耗 epoch(这是这一次运行的现象)。