我正在使用芹菜和zookeeper (kazoo锁)来锁定我的工人。我有一个问题,当我在释放锁之前杀死(-9)一个工人,然后那个锁永远处于锁定状态。
所以我的问题是:杀死进程是否会释放该进程中的锁,或者这是zookeeper中的某个bug吗?
发布于 2012-12-22 05:17:52
使用kill信号终止进程对清除“软件锁”(如ZooKeeper锁)没有任何作用。
唯一被KILL信号杀死的锁是操作系统级别的锁,因为所有文件描述符都被杀死,因此文件描述符锁也被杀死。但是对于ZooKeeper而言,这些锁不是操作系统级别的锁(这仅仅是因为ZooKeeper进程,即使在同一台机器上,也不是您的python进程)。
因此,这不是ZooKeeper中的错误,也不是kill -9的预期行为。
发布于 2012-12-22 22:45:59
Zookeeper locks使用ephemeral nodes。临时节点是指只要创建该节点的会话处于活动状态,该节点就会一直存在。会话由创建会话的进程定期向zookeeper发送心跳消息来保持活动状态。
因此,如果您杀死创建锁的进程,锁最终将被释放,因为会话将死亡,因为zookeeper不再接收心跳。
因此,在锁被释放之前杀死一个worker,最终应该会释放锁。
如果锁从未被释放,可能会发生一些事情,
这不太可能是zookeeper的bug。
你怎么知道锁没有被释放呢?
https://stackoverflow.com/questions/13997263
复制相似问题