Proposal、Transaction、Commit 在 ZooKeeper 里分别指什么、怎么对应?我没有去读源码,而是从结果看:三个节点事务日志里的内容,是不是同一份。
z41-1(follower):共 27 条事务,最后一条: session 0x1000c2980a00000 cxid 0x1a zxid 0x10000001b closeSession v{}
z41-2(leader):共 27 条事务,最后一条: session 0x1000c2980a00000 cxid 0x1a zxid 0x10000001b closeSession v{}
z41-3(follower):共 27 条事务,最后一条: session 0x1000c2980a00000 cxid 0x1a zxid 0x10000001b closeSession v{}
三个节点的事务日志内容逐行完全相同(含时间戳、会话 id、cxid、zxid): True这说明 leader 发出的 proposal 就是要写进每个节点事务日志的那条记录,「提交」只是把它应用到内存里的数据树。至于类名与方法之间的源码对应关系,本文没有读源码,留给第 99 篇的源码阅读。
session 0x1000c2980a00000 cxid 0x2 zxid 0x100000003 create /t/a,hello,[31,s{'world,'anyone}
session 0x1000c2980a00000 cxid 0x17 zxid 0x100000018 setData /t/a,world,1
session 0x1000c2980a00000 cxid 0x18 zxid 0x100000019 delete '/t/n0
session 0x1000c2980a00000 cxid 0x19 zxid 0x10000001a multi create: /t/m1 1 world anyone ;create: /t/m2 multi 事务: session 0x1000c2980a00000 cxid 0x19 zxid 0x10000001a multi create: /t/m1 1 world anyone ;create: /t/m2 2 world anyon