首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >zookeeper锁处于锁定状态

zookeeper锁处于锁定状态
EN

Stack Overflow用户
提问于 2012-12-22 05:14:25
回答 2查看 3.7K关注 0票数 8

我正在使用芹菜和zookeeper (kazoo锁)来锁定我的工人。我有一个问题,当我在释放锁之前杀死(-9)一个工人,然后那个锁永远处于锁定状态。

所以我的问题是:杀死进程是否会释放该进程中的锁,或者这是zookeeper中的某个bug吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-22 05:17:52

使用kill信号终止进程对清除“软件锁”(如ZooKeeper锁)没有任何作用。

唯一被KILL信号杀死的锁是操作系统级别的锁,因为所有文件描述符都被杀死,因此文件描述符锁也被杀死。但是对于ZooKeeper而言,这些锁不是操作系统级别的锁(这仅仅是因为ZooKeeper进程,即使在同一台机器上,也不是您的python进程)。

因此,这不是ZooKeeper中的错误,也不是kill -9的预期行为。

票数 0
EN

Stack Overflow用户

发布于 2012-12-22 22:45:59

Zookeeper locks使用ephemeral nodes。临时节点是指只要创建该节点的会话处于活动状态,该节点就会一直存在。会话由创建会话的进程定期向zookeeper发送心跳消息来保持活动状态。

因此,如果您杀死创建锁的进程,锁最终将被释放,因为会话将死亡,因为zookeeper不再接收心跳。

因此,在锁被释放之前杀死一个worker,最终应该会释放锁。

如果锁从未被释放,可能会发生一些事情,

  1. 其他人注意到锁被释放并获得了它。假设您锁定是因为存在争用,而其他进程将在锁释放时尝试获取它。
  2. 您等待的时间不够长。当你连接到zookeeper时,应该有一个你设置的会话超时参数,那就是服务器将在没有听到任何心跳的情况下保持会话存活的时间,你必须等待这么长时间才能看到锁被释放
  3. 中有一个bug。这是可能的,但是看起来kazoo lock recipe使用了临时节点,您描述的用例是一个非常基本的用例。

这不太可能是zookeeper的bug。

你怎么知道锁没有被释放呢?

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13997263

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档