我是 ZooKeeper 的新手,但在帮助同事调试生产问题时,我们发现了一些相当出乎意料的事情。我们系统中的现有代码使用 Curator InterProcessMutex。该应用程序使用路径创建锁,例如/TEST/ABC
. 然后代码的另一部分使用路径创建更多锁,/TEST/ABC/[some integer]
而整数是通过 UI 输入的一些对象 ID。这已经工作了几个月,直到最近它突然停止工作。
我们进行了线程转储,发现线程在尝试获取带有路径的锁时被阻塞,TEST/ABC
事实证明,每当/TEST/ABC/0000
创建路径时就会发生这种情况(0 的数量无关紧要,只要它只包含零)。显然,某天某个测试人员决定在系统中输入一些虚假 ID,从而导致系统停止运行。我们已经解决了这个问题,但我很好奇是否有人可以解释为什么会这样?
问题:为什么锁定TEST/ABC/0000
与锁定相同TEST/ABC
?
(零的数量实际上并不重要,任何都映射到TEST/ABC
。)