我正在使用芹菜和动物园管理员(kazoo锁)来锁定我的工人。当我在释放锁之前杀死(-9)其中一个工人然后锁永远锁定时,我遇到了问题。
所以我的问题是:杀死进程释放是否锁定了该进程,或者这是zookeeper中的一些错误?
答案 0 :(得分:9)
Zookeeper locks使用ephemeral nodes。短暂节点是一个生存的节点,只要创建它的会话是活动的。创建会话的过程会定期向zookeeper发送心跳消息,从而使会话保持活动状态。
因此,如果你杀死了创建锁的进程,那么最终会释放锁,因为当zookeeper不再接收到心跳时,会话将会死亡。
因此,在释放锁定之前杀死一名工作人员最终应该释放锁定。
如果永远不会释放锁定,可能会发生一些事情,
这不是一个动物园管理员的错误。
你怎么知道锁没有被释放?
答案 1 :(得分:0)
使用kill信号杀死进程无法清除ZooKeeper锁等“软件锁”。
KILL信号杀死的唯一一种锁是OS级锁,因为所有文件描述符都被杀死,因此文件描述符锁被杀死。但就ZooKeeper而言,那些不是操作系统级锁定(只是因为ZooKeeper进程,即使在同一台机器上,也不是你的python进程)。
因此,它不是ZooKeeper中的错误,也不是kill -9的预期行为。