Repository: ignite
Updated Branches:
  refs/heads/ignite-9273 1040589a3 -> e96c06f32


IGNITE-9326 Fixed deferred serialization error handling for EntryProcessor 
result - Fixes #4588.

Signed-off-by: Alexey Goncharuk <alexey.goncha...@gmail.com>


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/f6234782
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/f6234782
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/f6234782

Branch: refs/heads/ignite-9273
Commit: f623478228f0000d7a88a56c3e280c7f97db858e
Parents: 808d31f
Author: Alexey Goncharuk <alexey.goncha...@gmail.com>
Authored: Thu Aug 30 11:35:53 2018 +0300
Committer: Alexey Goncharuk <alexey.goncha...@gmail.com>
Committed: Thu Aug 30 11:35:53 2018 +0300

----------------------------------------------------------------------
 .../cache/CacheInvokeDirectResult.java          | 21 +++++++++++++++-----
 .../processors/cache/GridCacheReturn.java       | 17 +++++++++++++++-
 .../dht/atomic/GridDhtAtomicCache.java          |  4 ++++
 .../IgniteCacheFailedUpdateResponseTest.java    |  2 --
 4 files changed, 36 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/f6234782/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheInvokeDirectResult.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheInvokeDirectResult.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheInvokeDirectResult.java
index 89a0a0ff..3b463af 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheInvokeDirectResult.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheInvokeDirectResult.java
@@ -140,17 +140,28 @@ public class CacheInvokeDirectResult implements Message {
             }
         }
 
-        if (unprepareRes != null) {
-            res = ctx.toCacheObject(unprepareRes);
-
-            unprepareRes = null;
-        }
+        assert unprepareRes == null : "marshalResult() was not called for the 
result: " + this;
 
         if (res != null)
             res.prepareMarshal(ctx.cacheObjectContext());
     }
 
     /**
+     * Converts the entry processor unprepared result to a cache object 
instance.
+     *
+     * @param ctx Cache context.
+     */
+    public void marshalResult(GridCacheContext ctx) {
+        try {
+            if (unprepareRes != null)
+                res = ctx.toCacheObject(unprepareRes);
+        }
+        finally {
+            unprepareRes = null;
+        }
+    }
+
+    /**
      * @param ctx Cache context.
      * @param ldr Class loader.
      * @throws IgniteCheckedException If failed.

http://git-wip-us.apache.org/repos/asf/ignite/blob/f6234782/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheReturn.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheReturn.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheReturn.java
index 530f5b6..2ae0f7c 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheReturn.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheReturn.java
@@ -269,7 +269,10 @@ public class GridCacheReturn implements Externalizable, 
Message {
                 invokeResCol = new ArrayList<>();
 
             CacheInvokeDirectResult res0 = err == null ?
-                CacheInvokeDirectResult.lazyResult(key, res) : new 
CacheInvokeDirectResult(key, err);
+                cctx.transactional() ?
+                    new CacheInvokeDirectResult(key, cctx.toCacheObject(res)) :
+                    CacheInvokeDirectResult.lazyResult(key, res) :
+                new CacheInvokeDirectResult(key, err);
 
             invokeResCol.add(res0);
         }
@@ -308,6 +311,18 @@ public class GridCacheReturn implements Externalizable, 
Message {
     }
 
     /**
+     * Converts entry processor invokation results to cache object instances.
+     *
+     * @param ctx Cache context.
+     */
+    public void marshalResult(GridCacheContext ctx) {
+        if (invokeRes && invokeResCol != null) {
+            for (CacheInvokeDirectResult directRes : invokeResCol)
+                directRes.marshalResult(ctx);
+        }
+    }
+
+    /**
      * @param ctx Cache context.
      * @throws IgniteCheckedException If failed.
      */

http://git-wip-us.apache.org/repos/asf/ignite/blob/f6234782/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicCache.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicCache.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicCache.java
index 2e77b52..112b913 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicCache.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicCache.java
@@ -1787,6 +1787,10 @@ public class GridDhtAtomicCache<K, V> extends 
GridDhtCacheAdapter<K, V> {
                             top.readUnlock();
                         }
 
+                        // This call will convert entry processor invocation 
results to cache object instances.
+                        // Must be done outside topology read lock to avoid 
deadlocks.
+                        res.returnValue().marshalResult(ctx);
+
                         break;
                     }
                     catch (UnregisteredClassException ex) {

http://git-wip-us.apache.org/repos/asf/ignite/blob/f6234782/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteCacheFailedUpdateResponseTest.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteCacheFailedUpdateResponseTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteCacheFailedUpdateResponseTest.java
index bef33e8..ebcff7c 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteCacheFailedUpdateResponseTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteCacheFailedUpdateResponseTest.java
@@ -104,8 +104,6 @@ public class IgniteCacheFailedUpdateResponseTest extends 
GridCommonAbstractTest
      * @throws Exception If failed.
      */
     public void testInvokeAtomic() throws Exception {
-        fail("https://issues.apache.org/jira/browse/IGNITE-9326";);
-
         testInvoke(atomicCache);
         testInvokeAll(atomicCache);
     }

Reply via email to