如何在GridGain的缓存中管理未发布的锁?

时间:2015-01-09 13:08:26

标签: java caching locking distributed gridgain

我已经分发了使用GridGain进行缓存和分布式锁定的应用程序。当我的应用程序启动时,它加入了几个节点的网格。 当我的一个节点最终停止时(例如我的应用程序的重新部署)我遇到了问题,并且在加入网格后我在我的日志中有这个:

    [13:57:32,140][WARNING][main][GridDhtPreloader] <cacheLocks> Failed to wait for initial partition map exchange. Possible reasons are:
      ^-- Transactions in deadlock.
      ^-- Long running transactions (ignore if this is the case).
      ^-- Unreleased explicit locks.
    [13:57:33,085][WARNING][grid-timeout-worker-#33%null%][GridDhtPartitionsExchangeFuture] <cacheLocks> Retrying preload partition exchange due to timeout [done=false, dummy=false, exchId=GridDhtPartitionExchangeId [topVer=56, nodeId=ee95b126, evt=NODE_JOINED], rcvdIds=[03e6666c], rmtIds=[ba1d527c, 03e6666c, 76bf5103], remaining=[ba1d527c, 76bf5103], init=true, initFut=true, ready=true, replied=false, added=true, oldest=76bf5103, oldestOrder=46, evtLatch=0, locNodeOrder=56, locNodeId=ee95b126-aaf9-4d46-9273-983e175d513a]

这不是死锁,也不是长期交易。我认为由于JVM立即停止而未发布未发布的锁定,并且在此之前我的应用程序cache.lock(key, 0L)并且没有cache.unlock(key)

我所要做的就是重新启动所有网格。

问题是如何避免未发布的锁以及如何管理它们?我怎样才能正确处理这种情况?

1 个答案:

答案 0 :(得分:0)

在节点发生故障时,您无需再为远程节点上的先前获取的锁释放任何额外的工作,GridGain将自动释放这些锁。你能更新到最新版本的GridGain(6.5.6)并重试你的测试吗? 如果它没有帮助,请创建一个可重现的示例并附加到问题。