从ConnectionStateListener处理策展人SUSPEND状态的最佳方法

时间:2014-11-14 10:15:02

标签: apache-zookeeper apache-curator

我想问一个关于处理SUSPEND状态的问题。

以下是背景资料:

我使用curator / zk作为并发运行作业列表的任务协调器。 对于每一分钟,每个工作人员(每个工作在一个单独的VM上运行)尝试通过调用从zk获取任务(锁定):

lock = new InterProcessSemaphoreMutex(zkClient, task); 
boolean hasLock = false;
hasLock = lock.acquire(1, TimeUnit.SECONDS);

如果工作得到锁定,它将完成任务。

负责检索器锁/任务实现ConnectionStateListener接口的类。以下是目前的实施:

  • RECONNECT :什么也不做,因为工作人员会尝试获取锁定 无论ZK连接状态如何。

  • LOST :释放锁定,因为连接丢失。

  • 暂停:??????

我的问题是关于SUSPEND状态,我是否应该在进入SUSPEND时释放锁定(基本上,视为丢失)或做其他事情?

处理SUSPEND状态的最佳做法是什么?

谢谢,

1 个答案:

答案 0 :(得分:2)

我猜你已经在page的末尾看到了评论。

  

强烈建议您添加ConnectionStateListener和   注意SUSPENDED和LOST状态的变化。 如果是SUSPENDED状态   报道你不能确定你仍然持有锁,除非你   随后收到RECONNECTED状态。如果报告了丢失状态   可以肯定你不再持有锁。

我将此解释为:除非您的连接是RECONNECTED并且锁已被释放,否则您将保持锁定直至收到LOST状态。