Apache 策展人 InterProcessSemaphoreMutex 发布能否挂起?
Can Apache curator InterProcessSemaphoreMutex release hang ever?
我在我们的代码中使用以下方法来确保单例 JVM 应用程序
public void acquireLock(InterProcessSemaphoreMutex lock){
lock.acquire();
}
public void releaseLock(InterProcessSemaphoreMutex lock){
lock.release();
}
我在两种情况下释放锁(通过上面的函数调用):
- 工作完成。
- 我从策展人那里得到了一个丢失的状态更改。
对 release() 的调用是否有可能挂起?
我还应该在 releaseLock() 中添加以下谓词吗?
if (lock.isAcquiredInThisProcess()) {
lock.release();
}
(注:我是Curator的主要作者)
如果您当前未连接(即处于 SUSPENDED/LOST),则 lock.release()
将根据您当前的重试策略挂起。但是,它不会无限期地挂起,并且会 return 一旦重试次数用尽。更重要的是,Curator 在内部保证与 lock/semaphore 关联的节点将被删除,因此如果您打算释放 lock/semaphore,则应始终调用此方法。修复连接后,节点将被删除,等待获取的其他进程可以继续。
我在我们的代码中使用以下方法来确保单例 JVM 应用程序
public void acquireLock(InterProcessSemaphoreMutex lock){
lock.acquire();
}
public void releaseLock(InterProcessSemaphoreMutex lock){
lock.release();
}
我在两种情况下释放锁(通过上面的函数调用):
- 工作完成。
- 我从策展人那里得到了一个丢失的状态更改。
对 release() 的调用是否有可能挂起?
我还应该在 releaseLock() 中添加以下谓词吗?
if (lock.isAcquiredInThisProcess()) {
lock.release();
}
(注:我是Curator的主要作者)
如果您当前未连接(即处于 SUSPENDED/LOST),则 lock.release()
将根据您当前的重试策略挂起。但是,它不会无限期地挂起,并且会 return 一旦重试次数用尽。更重要的是,Curator 在内部保证与 lock/semaphore 关联的节点将被删除,因此如果您打算释放 lock/semaphore,则应始终调用此方法。修复连接后,节点将被删除,等待获取的其他进程可以继续。