Cluster computing 错误故障检测后,怀疑节点中的Lock.tryLock()将永远挂起
我们使用jgroups-3.0.3.Final作为由两个节点组成的集群中的集群范围的锁定实现。 我们的JGroups设置(简化)如下:Cluster computing 错误故障检测后,怀疑节点中的Lock.tryLock()将永远挂起,cluster-computing,jgroups,Cluster Computing,Jgroups,我们使用jgroups-3.0.3.Final作为由两个节点组成的集群中的集群范围的锁定实现。 我们的JGroups设置(简化)如下: <config xmlns="urn:org:jgroups" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:org:jgroups http://www.jgroups.org/schema/JGroups-3.0
<config xmlns="urn:org:jgroups"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:org:jgroups http://www.jgroups.org/schema/JGroups-3.0.xsd">
<TCP bind_port="7800" .../>
<TCPPING .../>
<MERGE2 min_interval="10000" max_interval="30000"/>
<FD_SOCK/>
<FD timeout="3000" max_tries="3" />
<VERIFY_SUSPECT timeout="1500" />
...
<PEER_LOCK/>
</config>
Lock lock = getLockService().getLock("mylock");
try
{
lock.tryLock();
//do something
}
finally
{
lock.unlock();
}
我们预计一天会有几次错误的故障检测,可能是因为FD的超时值太低。
更糟糕的是,如果在这种虚假的FD期间获得了锁,我们通常会有几把锁永远挂着
情景是这样的:
lock.tryLock()中代码>行,
随后每次获取“mylock”的尝试都会失败
我们使用了指定超时的tryLock(longtime,TimeUnit)
,似乎解决了这个问题
问题:这是否意味着JGroups impl。没有超时的Lock.tryLock()的错误是否应该避免
谢谢。另外,为了增加超时,并使用带有超时的tryLock()
,最好将对等锁更改为中央锁。详情请参阅: