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)

Reply via email to