-
Bug
-
Resolution: Obsolete
-
Critical
-
None
-
6.0.2.Final
If the cache topology changes while executing a putIfAbsent operation, the old primary owner will throw an OutdatedTopologyException, and the originator will retry on the new owner.
When retrying the PutKeyValueCommand on the new primary owner, we compare the current value with the command's new value. If they are equal, we assume that the initial command wrote the old value, and we return null.
However, the value might have been written by another putIfAbsent operation. So we could have two putIfAbsent(k, v) operations, both returning null.
A is the originator, B is the primary owner, k = null A -> B: putIfAbsent(k, v1) B dies before writing v, C is now primary owner D -> C: putIfAbsent(k, v1) // another put operation from D, with the same value C -> D: null // correct A -> C: retry_putIfAbsent(k, v1) C -> A: null // C assumes A is overwriting its own value, so it's also returning null
- is incorporated by
-
ISPN-7590 Invocation idempotence
- Closed
- is related to
-
ISPN-3422 In non-tx caches, write operations may not be atomic during rebalance
- Closed
-
ISPN-3918 Inconsistent view of the cache with putIfAbsent in a non-tx cache during state transfer
- Closed
- relates to
-
ISPN-2956 putIfAbsent on Hot Rod Java client doesn't reliably fulfil contract
- Closed