Details
-
Bug
-
Resolution: Done
-
Major
-
10.1.8.Final, 11.0.5.Final, 12.0.0.Dev06
-
None
Description
Non-transactional invalidation caches use the old locking scheme from Infinispan 4.x, which is prone to deadlocks:
- put(k, v1) is invoked on node A and acquires lock k
- put(k, v2) is invoked on node B and acquires lock k
- A sends an InvalidateCommand(k) RPC to B
- B sends an InvalidateCommand(k) RPC to A
- The InvalidateCommand(k) from A and tries to acquire lock k on B
- The InvalidateCommand(k) from B and tries to acquire lock k on A
- Both InvalidateCommand(k) lock acquisitions eventually time out and release lock k on their originators.