我想问一个有关处理 SUSPEND 状态的问题。
这是背景:
我正在使用 curator/zk 作为并发运行作业列表的任务协调器。 每分钟,每个工作线程(每个工作运行在单独的虚拟机上)尝试通过调用以下方式从 zk 获取任务(锁):
lock = new InterProcessSemaphoreMutex(zkClient, task);
boolean hasLock = false;
hasLock = lock.acquire(1, TimeUnit.SECONDS);
如果工作获得锁定,它将执行任务。
负责检索器锁/任务的类实现 ConnectionStateListener 接口(interface)。以下是当前的实现:
RECONNECT:不执行任何操作,因为工作线程将尝试获取锁 无论ZK连接状态如何。
LOST:释放锁定,因为连接丢失。
暂停:??????
我的问题是关于SUSPEND状态,进入SUSPEND时我应该释放锁(基本上,视为丢失)还是做其他事情?
处理 SUSPEND 状态的最佳实践是什么?
谢谢
最佳答案
我猜你已经看到了本文末尾的评论page .
It is strongly recommended that you add a ConnectionStateListener and watch for SUSPENDED and LOST state changes. If a SUSPENDED state is reported you cannot be certain that you still hold the lock unless you subsequently receive a RECONNECTED state. If a LOST state is reported it is certain that you no longer hold the lock.
我将此解释为:您保持锁定直到收到RECONNECTED
状态,除非您的连接LOST
并且锁定被释放。
关于apache-zookeeper - 从 ConnectionStateListener 处理 curator SUSPEND 状态的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26927589/