策展人/动物园管理员锁定清理

时间:2015-03-31 17:02:19

标签: apache-zookeeper apache-curator

我正在使用InterProcessSemaphoreMutex作为分布式锁定配方。

锁的典型路径可能是

/锁定/日历/ UUID

其中uuid当然是一个uuid,因此可能会生成许多锁定路径。

我认为最终需要清理这些路径,所以在解锁后我尝试使用childrea和reaper。

ChildReaper类的作品。如果我添加/ lock / calendar / uuid,它会愉快地删除子项。日志显示它删除了租约和锁定,并且节点本身在zkClient中显示已经消失但是突然它开始在看似无限循环中抱怨路径消失了。尽管尝试了Mode.Delete和Mode.Until Gone。

Reaper什么都不做,可能是因为/ lock / calendar / uuid有孩子。

我错过了什么吗?我不需要清理这些锁吗?我需要明智地担心并发性。

4 个答案:

答案 0 :(得分:2)

如果您使用最新的ZooKeeper 3.5.x和最新的Curator,Curator会对其所有配方使用“容器”节点,并根据需要自动清理这些节点。策展人的收割者已被弃用。

答案 1 :(得分:1)

InterProcessSemaphoreMutex创建其他子节点,例如租约,锁等。此特定类型锁的解决方法是在获取锁时向Reaper添加其他路径/lock/path/leases/lock/path/locks

答案 2 :(得分:0)

收割机的步骤必须如下。

  1. 创建收割者(指定一个阈值时间。默认为5分钟)
  2. 启动收割机
  3. 添加路径
  4. Thread.wait(//time more than the threshold)
  5. 关闭收割者
  6. 如果您现在检查zookeeper,该节点将被删除。

    注意:这仅适用于路径为空的叶节点。

    P.S:儿童收割机对我不起作用。如果您可以在评论或问题中提出您用于儿童收割机的步骤,那将会很有帮助。

答案 3 :(得分:0)

Reaper不适用于InterprocessSemaphoreMutex,因为它会有子节点(锁,收据IIRC)。 ChildReaper部分工作,但后来开始抱怨失去父母。这是目前在2.7.1之后修复的已知错误(尚未发布)。解决方法是使用ChildReaper与InterprocessLock,如果可以重入入口。