Repository: ignite
Updated Branches:
  refs/heads/master aabacfa00 -> b1206121e


IGNITE-9794 Handle UnregisteredBinaryTypeException on metadata registration 
under topology lock. - Fixes #4916.

Signed-off-by: Dmitriy Govorukhin <[email protected]>


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

Branch: refs/heads/master
Commit: b1206121e7a87f2d84414ab03b86b8614c0bc3c0
Parents: aabacfa
Author: Denis Mekhanikov <[email protected]>
Authored: Fri Oct 5 16:13:45 2018 +0300
Committer: Dmitriy Govorukhin <[email protected]>
Committed: Fri Oct 5 16:13:45 2018 +0300

----------------------------------------------------------------------
 .../internal/binary/BinaryFieldAccessor.java    |  3 +-
 ...ataRegistrationInsideEntryProcessorTest.java | 49 +++++++++++---------
 2 files changed, 30 insertions(+), 22 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/b1206121/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryFieldAccessor.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryFieldAccessor.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryFieldAccessor.java
index 87c4f3e..7d138a3 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryFieldAccessor.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryFieldAccessor.java
@@ -26,6 +26,7 @@ import java.util.Date;
 import java.util.Map;
 import java.util.UUID;
 import org.apache.ignite.binary.BinaryObjectException;
+import org.apache.ignite.internal.UnregisteredBinaryTypeException;
 import org.apache.ignite.internal.UnregisteredClassException;
 import org.apache.ignite.internal.util.GridUnsafe;
 import org.apache.ignite.internal.util.typedef.F;
@@ -156,7 +157,7 @@ public abstract class BinaryFieldAccessor {
             write0(obj, writer);
         }
         catch (Exception ex) {
-            if (ex instanceof UnregisteredClassException)
+            if (ex instanceof UnregisteredClassException || ex instanceof 
UnregisteredBinaryTypeException)
                 throw ex;
 
             if (S.INCLUDE_SENSITIVE && !F.isEmpty(name))

http://git-wip-us.apache.org/repos/asf/ignite/blob/b1206121/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/BinaryMetadataRegistrationInsideEntryProcessorTest.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/BinaryMetadataRegistrationInsideEntryProcessorTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/BinaryMetadataRegistrationInsideEntryProcessorTest.java
index 73dae4b..c7c3757 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/BinaryMetadataRegistrationInsideEntryProcessorTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/BinaryMetadataRegistrationInsideEntryProcessorTest.java
@@ -17,7 +17,7 @@
 
 package org.apache.ignite.internal.processors.cache;
 
-import java.util.Arrays;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 import javax.cache.processor.EntryProcessor;
@@ -40,7 +40,7 @@ public class 
BinaryMetadataRegistrationInsideEntryProcessorTest extends GridComm
     /** {@inheritDoc} */
     @Override protected IgniteConfiguration getConfiguration() {
         TcpDiscoveryVmIpFinder ipFinder = new TcpDiscoveryVmIpFinder()
-            .setAddresses(Arrays.asList("127.0.0.1:47500..47509"));
+            .setAddresses(Collections.singletonList("127.0.0.1:47500..47509"));
 
         return new IgniteConfiguration()
             .setDiscoverySpi(new TcpDiscoverySpi().setIpFinder(ipFinder))
@@ -60,9 +60,9 @@ public class 
BinaryMetadataRegistrationInsideEntryProcessorTest extends GridComm
                 cache.invoke(i, new CustomProcessor());
         }
         catch (Exception e) {
-            Map<Integer, CustomObj> value = cache.get(1);
+            Map<Integer, CustomObj> val = cache.get(1);
 
-            if ((value != null) && (value.get(1) != null) && 
(value.get(1).getObj() == CustomEnum.ONE))
+            if ((val != null) && (val.get(1).anEnum == CustomEnum.ONE) && 
val.get(1).obj.data.equals("test"))
                 System.out.println("Data was saved.");
             else
                 System.out.println("Data wasn't saved.");
@@ -82,7 +82,7 @@ public class 
BinaryMetadataRegistrationInsideEntryProcessorTest extends GridComm
             Object... objects) throws EntryProcessorException {
             Map<Integer, CustomObj> map = new HashMap<>();
 
-            map.put(1, new CustomObj(CustomEnum.ONE));
+            map.put(1, new CustomObj(new CustomInnerObject("test"), 
CustomEnum.ONE));
 
             entry.setValue(map);
 
@@ -95,27 +95,20 @@ public class 
BinaryMetadataRegistrationInsideEntryProcessorTest extends GridComm
      */
     private static class CustomObj {
         /** Object. */
-        private final Object obj;
+        private final CustomInnerObject obj;
+
+        /** Enum. */
+        private final CustomEnum anEnum;
 
         /**
          * @param obj Object.
+         * @param anEnum Enum.
          */
-        public CustomObj(Object obj) {
+        CustomObj(
+            CustomInnerObject obj,
+            CustomEnum anEnum) {
             this.obj = obj;
-        }
-
-        /**
-         * @param val Value.
-         */
-        public static CustomObj valueOf(int val) {
-            return new CustomObj(val);
-        }
-
-        /**
-         *
-         */
-        public Object getObj() {
-            return obj;
+            this.anEnum = anEnum;
         }
     }
 
@@ -138,4 +131,18 @@ public class 
BinaryMetadataRegistrationInsideEntryProcessorTest extends GridComm
         }
     }
 
+    /**
+     *
+     */
+    private static class CustomInnerObject {
+        /** */
+        private final String data;
+
+        /**
+         * @param data Data.
+         */
+        CustomInnerObject(String data) {
+            this.data = data;
+        }
+    }
 }
\ No newline at end of file

Reply via email to