Apache zookeeper 馆长/动物园管理员锁清理
我正在使用进程间信号量emutex来实现分布式锁定 锁的典型路径可能是 /锁定/日历/uuid 其中uuid当然是uuid,因此可能会生成许多锁路径 我假设这些路径最终需要清理,所以我尝试在解锁锁后使用childreaper和reaper进行清理 “收割者”这类作品。如果我添加/lock/calendar/uuid,它会愉快地删除孩子。日志显示它删除了租约和锁,并且节点本身在zkClient中显示为不存在,但是突然它开始在一个看似无休止的循环中抱怨路径不存在了。尽管尝试了Mode.Delete和Mode 收割者什么也不做,可能是因为/lock/calendar/uuid有子对象Apache zookeeper 馆长/动物园管理员锁清理,apache-zookeeper,apache-curator,Apache Zookeeper,Apache Curator,我正在使用进程间信号量emutex来实现分布式锁定 锁的典型路径可能是 /锁定/日历/uuid 其中uuid当然是uuid,因此可能会生成许多锁路径 我假设这些路径最终需要清理,所以我尝试在解锁锁后使用childreaper和reaper进行清理 “收割者”这类作品。如果我添加/lock/calendar/uuid,它会愉快地删除孩子。日志显示它删除了租约和锁,并且节点本身在zkClient中显示为不存在,但是突然它开始在一个看似无休止的循环中抱怨路径不存在了。尽管尝试了Mode.Delete和
我错过什么了吗?我不需要清理这些锁吗?在并发方面,我需要担心什么。收割机的步骤必须如下所示
Thread.wait(//时间超过阈值)
附言:收割机不适合我。如果您可以在评论或问题中列出您用于child reaper的步骤,这将非常有用。reaper不适用于进程间SemaphoreMutex,因为它将有子进程(锁、收据IIRC)。ChildReaper确实部分工作,但随后开始抱怨失去父母。这是一个已知的bug,目前已在2.7.1之后修复(尚未发布)。如果可重入性是可接受的,一种解决方法是将ChildReaper与进程间锁一起使用。进程间SemaphoreMutex会创建额外的子节点,如租约、锁等。对于这种特殊类型的锁,我的解决方法是添加额外的路径
/lock/path/leaves
,/lock/path/locks
,当您获得锁时,请将其发送给收割机。如果您使用最新的ZooKeeper 3.5.x和最新的策展人,策展人将为其所有配方使用“容器”节点,并根据需要自动清理这些节点。馆长的收割者已经被弃用了