Denis Magda created IGNITE-2231:
-----------------------------------
Summary: 'Put' cache event treats entry created at lock acquisition time as old value
Key: IGNITE-2231
URL:
https://issues.apache.org/jira/browse/IGNITE-2231 Project: Ignite
Issue Type: Bug
Components: cache
Affects Versions: ignite-1.4
Reporter: Denis Magda
Assignee: Alexey Goncharuk
Fix For: 1.6
Subscribe for EVT_CACHE_OBJECT_PUT event on one node and perform 'put' operations from the other to an empty transnational cache.
The subscriber will receive a notification saying that there was an old value for a key at the time the new was being inserted. In fact the was no an old value, the entry with a {{null}} as a value was generated as a part of implicit lock acquisition.
This snippet of the code in {{GridCacheMapEntry}} generates a wrong event (innerSet function)
{noformat}
if (evt && newVer != null && cctx.events().isRecordable(EVT_CACHE_OBJECT_PUT)) {
CacheObject evtOld = cctx.unwrapTemporary(old);
cctx.events().addEvent(partition(),
key,
evtNodeId,
tx == null ? null : tx.xid(),
newVer,
EVT_CACHE_OBJECT_PUT,
val,
val != null,
evtOld,
evtOld != null || hasValueUnlocked(),
subjId, null, taskName,
keepBinary);
}
{noformat}
Attached the test that lets reproduce the issue.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)