Apache zookeeper Apache管理员锁问题

Apache zookeeper Apache管理员锁问题,apache-zookeeper,apache-curator,Apache Zookeeper,Apache Curator,我有以下代码来获取分布式锁: public void foo(){ try { if (!lock.acquire(5, TimeUnit.MINUTES)) { throw new RuntimeException("Could not acquire lock"); } doWork(); } finally { if (lock.isAcquiredInThisPr

我有以下代码来获取分布式锁:

    public void foo(){
      try {

        if (!lock.acquire(5, TimeUnit.MINUTES)) {
            throw new RuntimeException("Could not acquire lock");
        }

        doWork();

      } finally {
        if (lock.isAcquiredInThisProcess()) {
          lock.release();
        }
      }
    }
我看到的问题是,有时锁是在zookeeper中创建的,但是
lock.acquire(..)
调用返回
false
。因此,看起来锁已经创建,但客户端没有意识到它,这意味着对
foo()
的所有调用都被卡住了

重新启动java服务修复了该问题

我用的是策展人2.11.0


有人知道什么地方可能出错吗?

你说的“锁已创建”是什么意思?锁中的每个参与者都将创建一个ZNode。序列计数最低的ZNode持有锁。我的意思是ZNode是在zk中创建的,但客户端认为不是。您需要拿出一个测试来证明这一点。您如何知道ZNode已创建?馆长的锁具配方经过了很好的测试并得到了广泛的应用。如果这是真的,我会非常惊讶。我在zk中看到了节点。是的,这很难,它几乎在所有情况下都能工作,所以我无法在测试环境中重现它。你怎么知道它是你的节点?锁中只涉及1个进程。可能是另一个进程的节点?注意:默认情况下,Curator存储创建节点的地址的IP。查看节点的数据以查看IP。