问题
带着问题撸源码系列-zookeeper-临时节点[ephemeral]是怎么弄的?我写了一堆临时节点为啥我一掉线就全没了?
猜测
可能是有线程维护着,每个session有一个临时节点列表,一旦客户端不再发心跳就全干掉
源码
我们可以看到,在DataTree里确实有以sessionid为key的这么个ConcurrentHashMap。
debug
run server 1(follower)
debug server 2 (leader)
client 请求server2: create -e /t1
我们可以直接出绝招,把断点打在创建临时节点的底层代码那里:
org.apache.zookeeper.server.DataTree#createNode(java.lang.String, byte[], java.util.List<org.apache.zookeeper.data.ACL>, long, int, long, long, org.apache.zookeeper.data.Stat)
然后我们请求就可以看到调用栈了: