如何管理 GridGain 缓存中未释放的锁?

How can I manage unreleased locks in GridGain's cache?

我的分布式应用程序使用 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).

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

问题是如何避免未释放的锁以及如何管理它们?我该如何正确处理这种情况?

您不需要做任何额外的努力来在节点出现故障时释放先前在远程节点上获得的锁,GridGain 将自动释放这些锁。你能更新到最新版本的 GridGain (6.5.6) 并重试你的测试吗? 如果没有帮助,请创建一个可重现的示例并附加到问题中。