RegionShortcut.PARTITION と setRedundantCopies(1) を使用して GemFire リージョンを定義しました。3 つの異なる VM で実行されている 3 つのアプリケーションが、これらのリージョンを利用しています。
アイテムをキャッシュに挿入したばかりのアプリケーション (アイテムの「所有者」) の VM をシャットダウンしているときに、デッドロックが発生したようです。
*ブロックされたプロセス: region.put の前にブロックされました。
*ブロッキング プロセス: リージョンから古いエントリを削除しようとした後、ブロックされたようです。この操作は、CacheListenerAdapter によって提供される破棄メカニズムによって呼び出されると思われます。
次のリンクでこの問題に関するいくつかのドキュメントを読みました: CacheListener Interface APIおよびこのブログでは、主にリスナーの使用法が原因であることがわかりました。
それでも、この問題は GemFire 6.x バージョンで対処および修正されたようです [例:こことここ]
だから、私は尋ねたい:
1) この問題は Gemfire 8 で報告されていますか? または7?
2) この問題の推奨される回避策は何ですか? ここでは、3 つの異なる回避策について説明します。他にもありますか?好ましいものはありますか?
参考までに、ブロッキング プロセスのスレッド ダンプは次のとおりです。
Owner stack trace: java.lang.Throwable
at sun.misc.Unsafe.park(Native Method)
at java.util.concurrent.locks.LockSupport.park(Unknown Source)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(Unknown Source)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedInterruptibly(Unknown Source)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(Unknown Source)
at java.util.concurrent.locks.ReentrantReadWriteLock$ReadLock.lockInterruptibly(Unknown Source)
at com.gemstone.gemfire.internal.cache.BucketRegion.lockPrimaryStateReadLock(BucketRegion.java:780)
at com.gemstone.gemfire.internal.cache.BucketRegion.doLockForPrimary(BucketRegion.java:719)
at com.gemstone.gemfire.internal.cache.BucketRegion.beginLocalWrite(BucketRegion.java:704)
at com.gemstone.gemfire.internal.cache.BucketRegion.basicDestroy(BucketRegion.java:1105)
at com.gemstone.gemfire.internal.cache.PartitionedRegionDataStore.destroyLocally(PartitionedRegionDataStore.java:1511)
at com.gemstone.gemfire.internal.cache.PartitionedRegion.destroyInBucket(PartitionedRegion.java:5440)
at com.gemstone.gemfire.internal.cache.PartitionedRegionDataView.destroyExistingEntry(PartitionedRegionDataView.java:45)
at com.gemstone.gemfire.internal.cache.PartitionedRegion.basicDestroy(PartitionedRegion.java:5317)
at com.gemstone.gemfire.internal.cache.LocalRegion.validatedDestroy(LocalRegion.java:1330)
at com.gemstone.gemfire.internal.cache.LocalRegion.destroy(LocalRegion.java:1317)
at com.gemstone.gemfire.internal.cache.AbstractRegion.destroy(AbstractRegion.java:282)
at com.gemstone.gemfire.internal.cache.LocalRegion.remove(LocalRegion.java:9513)