]
RH Bugzilla Integration commented on ISPN-4424:
-----------------------------------------------
Dave Stahl <dstahl(a)redhat.com> changed the Status of [bug
getCacheEntry is not safe
-------------------------
Key: ISPN-4424
URL:
https://issues.jboss.org/browse/ISPN-4424
Project: Infinispan
Issue Type: Bug
Security Level: Public(Everyone can see)
Components: Remote Protocols
Affects Versions: 6.0.2.Final, 7.0.0.Alpha4
Reporter: Galder ZamarreƱo
Assignee: Galder ZamarreƱo
Fix For: 7.0.0.Alpha5, 7.0.0.Final
Versioned update with a multi threaded Hot Rod client results in inconsistency. Some
replaceWithVersion return true ignoring a version update executed in another thread.
Here's a log excerpt of a concurrency stress test:
```
2014-06-20 16:16:56,798 INFO [PutFromNull] (pool-7-thread-10)
count=462,prev=462,new=463
2014-06-20 16:16:56,820 INFO [PutFromNull] (pool-7-thread-9) count=463,prev=463,new=464
2014-06-20 16:16:56,831 INFO [PutFromNull] (pool-7-thread-2) count=464,prev=463,new=464
2014-06-20 16:16:56,845 INFO [PutFromNull] (pool-7-thread-9) count=465,prev=464,new=465
```
Here you see two threads applying the same replacement, from 463 to 464.
The issue appears a result of a race condition in Hot Rod server's protocol decoder.
When replaceIfUmodified is received, the cache entry is retrieved to verify whether the
version in the server and the version sent in the command match. However, the cache entry
retrieved is mutable, and the value could change midway through this operation as a result
of another thread updating the value. Please find below some log snippets showing this.