You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by il...@apache.org on 2019/04/17 09:14:39 UTC

[ignite] branch master updated: IGNITE-11734 Avoid marshalling in Cache.replace(k, oldVal, newVal) when oldVal or newVal are null - Fixes #6444.

This is an automated email from the ASF dual-hosted git repository.

ilyak pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ignite.git


The following commit(s) were added to refs/heads/master by this push:
     new d25ecb4  IGNITE-11734 Avoid marshalling in Cache.replace(k, oldVal, newVal) when oldVal or newVal are null - Fixes #6444.
d25ecb4 is described below

commit d25ecb44c1ab9859204a29b443ffeb5ace7021de
Author: Vladislav Pyatkov <vl...@gmail.com>
AuthorDate: Wed Apr 17 12:11:51 2019 +0300

    IGNITE-11734 Avoid marshalling in Cache.replace(k, oldVal, newVal) when oldVal or newVal are null - Fixes #6444.
    
    Signed-off-by: Ilya Kasnacheev <il...@gmail.com>
---
 .../cache/CacheEntryPredicateContainsValue.java      |  6 ++++++
 .../GridCacheBinaryObjectsAbstractSelfTest.java      | 20 ++++++++++++++++++++
 2 files changed, 26 insertions(+)

diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheEntryPredicateContainsValue.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheEntryPredicateContainsValue.java
index ad9861c..b5fde21 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheEntryPredicateContainsValue.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheEntryPredicateContainsValue.java
@@ -59,6 +59,12 @@ public class CacheEntryPredicateContainsValue extends CacheEntryPredicateAdapter
     @Override public boolean apply(GridCacheEntryEx e) {
         CacheObject val = peekVisibleValue(e);
 
+        if (this.val == null && val == null)
+            return true;
+
+        if (this.val == null || val == null)
+            return false;
+
         GridCacheContext cctx = e.context();
 
         if (this.val instanceof BinaryObject && val instanceof BinaryObject)
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/binary/GridCacheBinaryObjectsAbstractSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/binary/GridCacheBinaryObjectsAbstractSelfTest.java
index 94f6197..d097b2e 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/binary/GridCacheBinaryObjectsAbstractSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/binary/GridCacheBinaryObjectsAbstractSelfTest.java
@@ -316,6 +316,26 @@ public abstract class GridCacheBinaryObjectsAbstractSelfTest extends GridCommonA
      * @throws Exception If failed.
      */
     @Test
+    public void testReplaceWhenEmptyValue() throws Exception {
+        IgniteCache<Integer, BinaryObject> kpc = keepBinaryCache();
+
+        BinaryObjectBuilder bldr = grid(0).binary().builder("TestObjCls");
+
+        bldr.setField("val", -42);
+
+        BinaryObject testObj = bldr.build();
+
+        for (int i = 0; i < ENTRY_CNT; i++) {
+            assertNull(kpc.get(i));
+
+            assertFalse(kpc.replace(i, testObj, testObj));
+        }
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    @Test
     public void testRemove() throws Exception {
         IgniteCache<Integer, TestObject> c = jcache(0);