You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by vo...@apache.org on 2015/12/17 10:42:34 UTC

ignite git commit: IGNITE-2100: Fixed "mustDeserialize" logic.

Repository: ignite
Updated Branches:
  refs/heads/ignite-2100 d5e5c7032 -> b932135cd


IGNITE-2100: Fixed "mustDeserialize" logic.


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

Branch: refs/heads/ignite-2100
Commit: b932135cdd58a2b566e2b11d7f7ca2b92d3db96e
Parents: d5e5c70
Author: vozerov-gridgain <vo...@gridgain.com>
Authored: Thu Dec 17 12:43:31 2015 +0300
Committer: vozerov-gridgain <vo...@gridgain.com>
Committed: Thu Dec 17 12:43:31 2015 +0300

----------------------------------------------------------------------
 .../ignite/internal/binary/BinaryContext.java   | 37 +++++++++++++++++---
 1 file changed, 32 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/b932135c/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryContext.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryContext.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryContext.java
index 30ad6bc..abe283e 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryContext.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryContext.java
@@ -247,9 +247,12 @@ public class BinaryContext implements Externalizable {
      * @return {@code True} if must be deserialized.
      */
     public boolean mustDeserialize(Class cls) {
-        BinaryClassDescriptor desc = descriptorForClass(cls, false);
+        BinaryClassDescriptor desc = descByCls.get(cls);
 
-        return desc.useOptimizedMarshaller();
+        if (desc == null)
+            return marshCtx.isSystemType(cls.getName()) || serializerForClass(cls) == null;
+        else
+            return desc.useOptimizedMarshaller();
     }
 
     /**
@@ -576,8 +579,7 @@ public class BinaryContext implements Externalizable {
             throw new BinaryObjectException("Failed to register class.", e);
         }
 
-        BinarySerializer serializer = BinaryUtils.isBinarylizable(cls) || !BinaryUtils.isCustomJavaSerialization(cls) ?
-            new BinaryReflectiveSerializer() : defaultSerializer();
+        BinarySerializer serializer = serializerForClass(cls);
 
         String affFieldName = affinityFieldName(cls);
 
@@ -613,6 +615,21 @@ public class BinaryContext implements Externalizable {
     }
 
     /**
+     * Get serializer for class taking in count default one.
+     *
+     * @param cls Class.
+     * @return Serializer for class or {@code null} if none exists.
+     */
+    private @Nullable BinarySerializer serializerForClass(Class cls) {
+        BinarySerializer serializer = defaultSerializer();
+
+        if (serializer == null && canUseReflectiveSerializer(cls))
+            serializer = new BinaryReflectiveSerializer();
+
+        return serializer;
+    }
+
+    /**
      * @return Default serializer.
      */
     private BinarySerializer defaultSerializer() {
@@ -822,7 +839,7 @@ public class BinaryContext implements Externalizable {
                 // At this point we must decide whether to rely on Java serialization mechanics or not.
                 // If no serializer is provided, we examine the class and if it doesn't contain non-trivial
                 // serialization logic we are safe to fallback to reflective binary serialization.
-                if (BinaryUtils.isBinarylizable(cls) || !BinaryUtils.isCustomJavaSerialization(cls))
+                if (canUseReflectiveSerializer(cls))
                     serializer = new BinaryReflectiveSerializer();
             }
 
@@ -852,6 +869,16 @@ public class BinaryContext implements Externalizable {
     }
 
     /**
+     * Check whether reflective serializer can be used for class.
+     *
+     * @param cls Class.
+     * @return {@code True} if reflective serializer can be used.
+     */
+    private static boolean canUseReflectiveSerializer(Class cls) {
+        return BinaryUtils.isBinarylizable(cls) || !BinaryUtils.isCustomJavaSerialization(cls);
+    }
+
+    /**
      * Create binary field.
      *
      * @param typeId Type ID.