Return-Path: X-Original-To: apmail-ignite-commits-archive@minotaur.apache.org Delivered-To: apmail-ignite-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 4B24018C64 for ; Fri, 4 Sep 2015 16:27:16 +0000 (UTC) Received: (qmail 26727 invoked by uid 500); 4 Sep 2015 16:27:16 -0000 Delivered-To: apmail-ignite-commits-archive@ignite.apache.org Received: (qmail 26614 invoked by uid 500); 4 Sep 2015 16:27:16 -0000 Mailing-List: contact commits-help@ignite.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@ignite.apache.org Delivered-To: mailing list commits@ignite.apache.org Received: (qmail 26282 invoked by uid 99); 4 Sep 2015 16:27:15 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 04 Sep 2015 16:27:15 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id B95CAE0252; Fri, 4 Sep 2015 16:27:15 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: sboikov@apache.org To: commits@ignite.apache.org Date: Fri, 04 Sep 2015 16:27:27 -0000 Message-Id: In-Reply-To: <32fe56bbbbab49f3a70cddb00c220582@git.apache.org> References: <32fe56bbbbab49f3a70cddb00c220582@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: [13/55] [abbrv] ignite git commit: ignite-1353: predefined ID is now properly determined during serialization/deserialization ignite-1353: predefined ID is now properly determined during serialization/deserialization Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/4d3c1f07 Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/4d3c1f07 Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/4d3c1f07 Branch: refs/heads/ignite-1093-2 Commit: 4d3c1f07b850a6519908c6d4383ec81310bbab40 Parents: 58a665a Author: Denis Magda Authored: Fri Sep 4 13:34:58 2015 +0300 Committer: Denis Magda Committed: Fri Sep 4 13:34:58 2015 +0300 ---------------------------------------------------------------------- .../portable/PortableClassDescriptor.java | 79 ++++++++----- .../internal/portable/PortableContext.java | 113 +++++++++---------- .../internal/portable/PortableWriterExImpl.java | 92 ++++----------- .../GridPortableMarshallerSelfTest.java | 68 +++++++---- .../portable/GridPortableWildcardsSelfTest.java | 60 +++++----- 5 files changed, 208 insertions(+), 204 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/4d3c1f07/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableClassDescriptor.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableClassDescriptor.java b/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableClassDescriptor.java index 24ad5ce..a2b4b74 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableClassDescriptor.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableClassDescriptor.java @@ -19,10 +19,13 @@ package org.apache.ignite.internal.portable; import java.io.Externalizable; import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; +import java.lang.reflect.Modifier; import java.math.BigDecimal; import java.sql.Timestamp; import java.util.ArrayList; @@ -36,6 +39,8 @@ import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.internal.processors.cache.CacheObjectImpl; import org.apache.ignite.internal.util.typedef.internal.U; import org.apache.ignite.marshaller.MarshallerExclusions; +import org.apache.ignite.marshaller.optimized.OptimizedMarshaller; +import org.apache.ignite.marshaller.portable.PortableMarshaller; import org.apache.ignite.portable.PortableException; import org.apache.ignite.portable.PortableIdMapper; import org.apache.ignite.portable.PortableMarshalAware; @@ -95,36 +100,10 @@ public class PortableClassDescriptor { private final boolean registered; /** */ - private final boolean excluded; + private final boolean useOptMarshaller; - /** - * @param ctx Context. - * @param cls Class. - * @param userType User type flag. - * @param typeId Type ID. - * @param typeName Type name. - * @param idMapper ID mapper. - * @param serializer Serializer. - * @param useTs Use timestamp flag. - * @param metaDataEnabled Metadata enabled flag. - * @param keepDeserialized Keep deserialized flag. - * @throws PortableException In case of error. - */ - PortableClassDescriptor( - PortableContext ctx, - Class cls, - boolean userType, - int typeId, - String typeName, - @Nullable PortableIdMapper idMapper, - @Nullable PortableSerializer serializer, - boolean useTs, - boolean metaDataEnabled, - boolean keepDeserialized - ) throws PortableException { - this(ctx, cls, userType, typeId, typeName, idMapper, serializer, useTs, metaDataEnabled, keepDeserialized, - true); - } + /** */ + private final boolean excluded; /** * @param ctx Context. @@ -138,6 +117,7 @@ public class PortableClassDescriptor { * @param metaDataEnabled Metadata enabled flag. * @param keepDeserialized Keep deserialized flag. * @param registered Whether typeId has been successfully registered by MarshallerContext or not. + * @param predefined Whether the class is predefined or not. * @throws PortableException In case of error. */ PortableClassDescriptor( @@ -151,7 +131,8 @@ public class PortableClassDescriptor { boolean useTs, boolean metaDataEnabled, boolean keepDeserialized, - boolean registered + boolean registered, + boolean predefined ) throws PortableException { assert ctx != null; assert cls != null; @@ -168,6 +149,8 @@ public class PortableClassDescriptor { excluded = MarshallerExclusions.isExcluded(cls); + useOptMarshaller = !predefined && initUseOptimizedMarshallerFlag(); + if (excluded) mode = Mode.EXCLUSION; else @@ -313,11 +296,19 @@ public class PortableClassDescriptor { /** * @return Whether typeId has been successfully registered by MarshallerContext or not. */ - public boolean isRegistered() { + public boolean registered() { return registered; } /** + * @return {@code true} if {@link OptimizedMarshaller} must be used instead of {@link PortableMarshaller} + * for object serialization and deserialization. + */ + public boolean useOptimizedMarshaller() { + return useOptMarshaller; + } + + /** * Checks whether the class values are explicitly excluded from marshalling. * * @return {@code true} if excluded, {@code false} otherwise. @@ -720,6 +711,32 @@ public class PortableClassDescriptor { } /** + * Determines whether to use {@link OptimizedMarshaller} for serialization or + * not. + * + * @return {@code true} if to use, {@code false} otherwise. + */ + private boolean initUseOptimizedMarshallerFlag() { + boolean use; + + try { + Method writeObj = cls.getDeclaredMethod("writeObject", ObjectOutputStream.class); + Method readObj = cls.getDeclaredMethod("readObject", ObjectInputStream.class); + + if (!Modifier.isStatic(writeObj.getModifiers()) && !Modifier.isStatic(readObj.getModifiers()) && + writeObj.getReturnType() == void.class && readObj.getReturnType() == void.class) + use = true; + else + use = false; + } + catch (NoSuchMethodException e) { + use = false; + } + + return use; + } + + /** * @param cls Class. * @return Mode. */ http://git-wip-us.apache.org/repos/asf/ignite/blob/4d3c1f07/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableContext.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableContext.java b/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableContext.java index db7e41e..33a105b 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableContext.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableContext.java @@ -112,7 +112,7 @@ public class PortableContext implements Externalizable { private final Map predefinedTypes = new HashMap<>(); /** */ - private final Set predefinedClasses = new HashSet<>(); + private final Map predefinedTypeNames = new HashMap<>(); /** */ private final Map, Byte> colTypes = new HashMap<>(); @@ -432,7 +432,7 @@ public class PortableContext implements Externalizable { PortableClassDescriptor desc = descByCls.get(cls); - if (desc == null || !desc.isRegistered()) + if (desc == null || !desc.registered()) desc = registerClassDescriptor(cls); return desc; @@ -447,11 +447,22 @@ public class PortableContext implements Externalizable { public PortableClassDescriptor descriptorForTypeId(boolean userType, int typeId, ClassLoader ldr) { assert typeId != GridPortableMarshaller.UNREGISTERED_TYPE_ID; - PortableClassDescriptor desc = userType ? userTypes.get(typeId) : predefinedTypes.get(typeId); + //TODO: IGNITE-1358 (uncomment when fixed) + //PortableClassDescriptor desc = userType ? userTypes.get(typeId) : predefinedTypes.get(typeId); + + // As a workaround for IGNITE-1358 we always check the predefined map before. + PortableClassDescriptor desc = predefinedTypes.get(typeId); if (desc != null) return desc; + if (userType) { + desc = userTypes.get(typeId); + + if (desc != null) + return desc; + } + Class cls; try { @@ -496,7 +507,10 @@ public class PortableContext implements Externalizable { null, useTs, metaDataEnabled, - keepDeserialized); + keepDeserialized, + true, /* registered */ + false /* predefined */ + ); PortableClassDescriptor old = descByCls.putIfAbsent(cls, desc); @@ -529,7 +543,8 @@ public class PortableContext implements Externalizable { try { registered = marshCtx.registerClass(typeId, cls); - } catch (IgniteCheckedException e) { + } + catch (IgniteCheckedException e) { throw new PortableException("Failed to register class.", e); } @@ -543,7 +558,9 @@ public class PortableContext implements Externalizable { useTs, metaDataEnabled, keepDeserialized, - registered); + registered, + false /* predefined */ + ); // perform put() instead of putIfAbsent() because "registered" flag may have been changed. userTypes.put(typeId, desc); @@ -584,43 +601,17 @@ public class PortableContext implements Externalizable { * @return Type ID. */ public int typeId(String typeName) { - int id; - - if (marshCtx.isSystemType(typeName)) - id = typeName.hashCode(); - - else { - typeName = typeName(typeName); - - id = idMapper(typeName).typeId(typeName); - } - - return id; - } - - /** - * @param cls Class. - * @return Type ID. - * @throws PortableException In case of error. - */ - public Type typeId(Class cls) throws PortableException { - String clsName = cls.getName(); - - if (marshCtx.isSystemType(clsName)) - return new Type(clsName.hashCode(), true); - - if (predefinedClasses.contains(cls)) - return new Type(DFLT_ID_MAPPER.typeId(typeName(clsName)), true); + String shortTypeName = typeName(typeName); - PortableClassDescriptor desc = descByCls.get(cls); + Integer id = predefinedTypeNames.get(shortTypeName); - boolean registered = desc != null && desc.isRegistered(); + if (id != null) + return id; - if (!registered) - // forces to register the class and fill up all required data structures - desc = registerUserClassDescriptor(cls); + if (marshCtx.isSystemType(typeName)) + return typeName.hashCode(); - return new Type(desc.typeId(), desc.isRegistered()); + return idMapper(shortTypeName).typeId(shortTypeName); } /** @@ -692,22 +683,26 @@ public class PortableContext implements Externalizable { * @return GridPortableClassDescriptor. */ public PortableClassDescriptor registerPredefinedType(Class cls, int id) { + String typeName = typeName(cls.getName()); + PortableClassDescriptor desc = new PortableClassDescriptor( this, cls, false, id, - typeName(cls.getName()), + typeName, DFLT_ID_MAPPER, null, false, false, - false + false, + true, /* registered */ + true /* predefined */ ); - predefinedClasses.add(cls); - + predefinedTypeNames.put(typeName, id); predefinedTypes.put(id, desc); + descByCls.put(cls, desc); return desc; @@ -745,6 +740,10 @@ public class PortableContext implements Externalizable { int id = idMapper.typeId(clsName); + //Workaround for IGNITE-1358 + if (predefinedTypes.get(id) != null) + throw new PortableException("Duplicate type ID [clsName=" + clsName + ", id=" + id + ']'); + if (mappers.put(id, idMapper) != null) throw new PortableException("Duplicate type ID [clsName=" + clsName + ", id=" + id + ']'); @@ -770,7 +769,10 @@ public class PortableContext implements Externalizable { serializer, useTs, metaDataEnabled, - keepDeserialized); + keepDeserialized, + true, /* registered */ + false /* predefined */ + ); fieldsMeta = desc.fieldsMeta(); @@ -863,16 +865,6 @@ public class PortableContext implements Externalizable { } /** - * Returns whether {@code cls} is predefined in the context or not. - * - * @param cls Class. - * @return {@code true} if predefined, {@code false} otherwise. - */ - public boolean isPredefinedClass(Class cls) { - return predefinedClasses.contains(cls); - } - - /** * Returns instance of {@link OptimizedMarshaller}. * * @return Optimized marshaller. @@ -977,6 +969,7 @@ public class PortableContext implements Externalizable { return lowerCaseHashCode(fieldName); } } + /** * Type descriptors. */ @@ -1113,21 +1106,27 @@ public class PortableContext implements Externalizable { * Type id wrapper. */ static class Type { - /** Type id*/ - private int id; + /** Type id */ + private final int id; /** Whether the following type is registered in a cache or not */ - private boolean registered; + private final boolean registered; public Type(int id, boolean registered) { this.id = id; this.registered = registered; } + /** + * @return Type ID. + */ public int id() { return id; } + /** + * @return Registered flag value. + */ public boolean registered() { return registered; } http://git-wip-us.apache.org/repos/asf/ignite/blob/4d3c1f07/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableWriterExImpl.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableWriterExImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableWriterExImpl.java index 364d5f8..3152c4b 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableWriterExImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableWriterExImpl.java @@ -93,9 +93,6 @@ public class PortableWriterExImpl implements PortableWriter, PortableRawWriterEx private static final int INIT_CAP = 1024; /** */ - private static final ConcurrentHashMap, Boolean> useOptMarshCache = new ConcurrentHashMap<>(); - - /** */ private final PortableContext ctx; /** */ @@ -197,7 +194,19 @@ public class PortableWriterExImpl implements PortableWriter, PortableRawWriterEx void marshal(Object obj, boolean detached) throws PortableException { assert obj != null; - if (useOptimizedMarshaller(obj)) { + cls = obj.getClass(); + + PortableClassDescriptor desc = ctx.descriptorForClass(cls); + + if (desc == null) + throw new PortableException("Object is not portable: [class=" + cls + ']'); + + if (desc.excluded()) { + doWriteByte(NULL); + return; + } + + if (desc.useOptimizedMarshaller()) { writeByte(OPTM_MARSH); try { @@ -214,18 +223,6 @@ public class PortableWriterExImpl implements PortableWriter, PortableRawWriterEx return; } - cls = obj.getClass(); - - PortableClassDescriptor desc = ctx.descriptorForClass(cls); - - if (desc == null) - throw new PortableException("Object is not portable: [class=" + cls + ']'); - - if (desc.excluded()) { - doWriteByte(NULL); - return; - } - if (desc.getWriteReplaceMethod() != null) { Object replace; @@ -269,44 +266,6 @@ public class PortableWriterExImpl implements PortableWriter, PortableRawWriterEx desc.write(obj, this); } - /** - * Determines whether to use {@link org.apache.ignite.marshaller.optimized.OptimizedMarshaller} for serialization - * or not. - * - * @param obj Object to serialize. - * @return {@code true} if to use, {@code false} otherwise. - */ - private boolean useOptimizedMarshaller(Object obj) { - Class cls = obj.getClass(); - - Boolean use = useOptMarshCache.get(cls); - - if (use != null) - return use; - - if (ctx.isPredefinedClass(cls)) - use = false; - else { - try { - Method writeObj = cls.getDeclaredMethod("writeObject", ObjectOutputStream.class); - Method readObj = cls.getDeclaredMethod("readObject", ObjectInputStream.class); - - if (!Modifier.isStatic(writeObj.getModifiers()) && !Modifier.isStatic(readObj.getModifiers()) && - writeObj.getReturnType() == void.class && readObj.getReturnType() == void.class) - use = true; - else - use = false; - - } catch (NoSuchMethodException e) { - use = false; - } - } - - useOptMarshCache.putIfAbsent(cls, use); - - return use; - } - /** * @param obj Object. * @return Handle. @@ -803,12 +762,12 @@ public class PortableWriterExImpl implements PortableWriter, PortableRawWriterEx if (tryWriteAsHandle(val)) return; - PortableContext.Type type = ctx.typeId(val.getClass().getComponentType()); + PortableClassDescriptor desc = ctx.descriptorForClass(val.getClass().getComponentType()); doWriteByte(OBJ_ARR); - if (type.registered()) - doWriteInt(type.id()); + if (desc.registered()) + doWriteInt(desc.typeId()); else { doWriteInt(UNREGISTERED_TYPE_ID); doWriteString(val.getClass().getComponentType().getName()); @@ -887,12 +846,12 @@ public class PortableWriterExImpl implements PortableWriter, PortableRawWriterEx if (val == null) doWriteByte(NULL); else { - PortableContext.Type type = ctx.typeId(val.getClass()); + PortableClassDescriptor desc = ctx.descriptorForClass(val.getClass()); doWriteByte(ENUM); - if (type.registered()) - doWriteInt(type.id()); + if (desc.registered()) + doWriteInt(desc.typeId()); else { doWriteInt(UNREGISTERED_TYPE_ID); doWriteString(val.getClass().getName()); @@ -911,12 +870,11 @@ public class PortableWriterExImpl implements PortableWriter, PortableRawWriterEx if (val == null) doWriteByte(NULL); else { - PortableContext.Type type = ctx.typeId(val.getClass().getComponentType()); - + PortableClassDescriptor desc = ctx.descriptorForClass(val.getClass().getComponentType()); doWriteByte(ENUM_ARR); - if (type.registered()) - doWriteInt(type.id()); + if (desc.registered()) + doWriteInt(desc.typeId()); else { doWriteInt(UNREGISTERED_TYPE_ID); doWriteString(val.getClass().getComponentType().getName()); @@ -937,12 +895,12 @@ public class PortableWriterExImpl implements PortableWriter, PortableRawWriterEx if (val == null) doWriteByte(NULL); else { - PortableContext.Type type = ctx.typeId(val); + PortableClassDescriptor desc = ctx.descriptorForClass(val); doWriteByte(CLASS); - if (type.registered()) - doWriteInt(type.id()); + if (desc.registered()) + doWriteInt(desc.typeId()); else { doWriteInt(UNREGISTERED_TYPE_ID); doWriteString(val.getClass().getName()); http://git-wip-us.apache.org/repos/asf/ignite/blob/4d3c1f07/modules/core/src/test/java/org/apache/ignite/internal/portable/GridPortableMarshallerSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/portable/GridPortableMarshallerSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/portable/GridPortableMarshallerSelfTest.java index c8287a0..4545a58 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/portable/GridPortableMarshallerSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/portable/GridPortableMarshallerSelfTest.java @@ -17,6 +17,7 @@ package org.apache.ignite.internal.portable; +import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.math.BigDecimal; @@ -33,6 +34,7 @@ import java.util.HashSet; import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.Map; +import java.util.Set; import java.util.TreeMap; import java.util.TreeSet; import java.util.UUID; @@ -69,7 +71,6 @@ import sun.misc.Unsafe; import static org.apache.ignite.internal.portable.PortableThreadLocalMemoryAllocator.THREAD_LOCAL_ALLOC; import static org.junit.Assert.assertArrayEquals; -import static org.junit.Assert.assertTrue; /** * Portable marshaller tests. @@ -1185,7 +1186,7 @@ public class GridPortableMarshallerSelfTest extends GridCommonAbstractTest { customType1.setIdMapper(new PortableIdMapper() { @Override public int typeId(String clsName) { - return 100; + return 300; } @Override public int fieldId(int typeId, String fieldName) { @@ -1197,7 +1198,7 @@ public class GridPortableMarshallerSelfTest extends GridCommonAbstractTest { customType2.setIdMapper(new PortableIdMapper() { @Override public int typeId(String clsName) { - return 200; + return 400; } @Override public int fieldId(int typeId, String fieldName) { @@ -1209,7 +1210,7 @@ public class GridPortableMarshallerSelfTest extends GridCommonAbstractTest { customType3.setIdMapper(new PortableIdMapper() { @Override public int typeId(String clsName) { - return 300; + return 500; } @Override public int fieldId(int typeId, String fieldName) { @@ -1245,9 +1246,9 @@ public class GridPortableMarshallerSelfTest extends GridCommonAbstractTest { assertEquals("key".hashCode(), ctx.typeId("Key")); assertEquals("nonexistentclass3".hashCode(), ctx.typeId("NonExistentClass3")); assertEquals("nonexistentclass4".hashCode(), ctx.typeId("NonExistentClass4")); - assertEquals(100, ctx.typeId(getClass().getSimpleName() + "$Value")); - assertEquals(200, ctx.typeId("NonExistentClass1")); - assertEquals(300, ctx.typeId("NonExistentClass2")); + assertEquals(300, ctx.typeId(getClass().getSimpleName() + "$Value")); + assertEquals(400, ctx.typeId("NonExistentClass1")); + assertEquals(500, ctx.typeId("NonExistentClass2")); assertEquals("nonexistentclass5".hashCode(), ctx.typeId("NonExistentClass5")); } @@ -1261,16 +1262,16 @@ public class GridPortableMarshallerSelfTest extends GridCommonAbstractTest { customType1.setIdMapper(new PortableIdMapper() { @Override public int typeId(String clsName) { - return 100; + return 300; } @Override public int fieldId(int typeId, String fieldName) { switch (fieldName) { case "val1": - return 101; + return 301; case "val2": - return 102; + return 302; default: return 0; @@ -1282,16 +1283,16 @@ public class GridPortableMarshallerSelfTest extends GridCommonAbstractTest { customType2.setIdMapper(new PortableIdMapper() { @Override public int typeId(String clsName) { - return 200; + return 400; } @Override public int fieldId(int typeId, String fieldName) { switch (fieldName) { case "val1": - return 201; + return 401; case "val2": - return 202; + return 402; default: return 0; @@ -1309,12 +1310,12 @@ public class GridPortableMarshallerSelfTest extends GridCommonAbstractTest { assertEquals("val".hashCode(), ctx.fieldId("key".hashCode(), "val")); assertEquals("val".hashCode(), ctx.fieldId("nonexistentclass2".hashCode(), "val")); assertEquals("val".hashCode(), ctx.fieldId("notconfiguredclass".hashCode(), "val")); - assertEquals(101, ctx.fieldId(100, "val1")); - assertEquals(102, ctx.fieldId(100, "val2")); - assertEquals("val3".hashCode(), ctx.fieldId(100, "val3")); - assertEquals(201, ctx.fieldId(200, "val1")); - assertEquals(202, ctx.fieldId(200, "val2")); - assertEquals("val3".hashCode(), ctx.fieldId(200, "val3")); + assertEquals(301, ctx.fieldId(300, "val1")); + assertEquals(302, ctx.fieldId(300, "val2")); + assertEquals("val3".hashCode(), ctx.fieldId(300, "val3")); + assertEquals(401, ctx.fieldId(400, "val1")); + assertEquals(402, ctx.fieldId(400, "val2")); + assertEquals("val3".hashCode(), ctx.fieldId(400, "val3")); } /** @@ -2243,6 +2244,35 @@ public class GridPortableMarshallerSelfTest extends GridCommonAbstractTest { /** * @throws Exception If failed. */ + public void testPredefinedTypeIds() throws Exception { + PortableMarshaller marsh = new PortableMarshaller(); + + PortableContext pCtx = initPortableContext(marsh); + + Field field = pCtx.getClass().getDeclaredField("predefinedTypeNames"); + + field.setAccessible(true); + + Map map = (Map)field.get(pCtx); + + assertTrue(map.size() > 0); + + for (Map.Entry entry : map.entrySet()) { + int id = entry.getValue(); + + if (id == GridPortableMarshaller.UNREGISTERED_TYPE_ID) + continue; + + PortableClassDescriptor desc = pCtx.descriptorForTypeId(false, entry.getValue(), null); + + assertEquals(desc.typeId(), pCtx.typeId(desc.describedClass().getName())); + assertEquals(desc.typeId(), pCtx.typeId(pCtx.typeName(desc.describedClass().getName()))); + } + } + + /** + * @throws Exception If failed. + */ public void testCyclicReferencesMarshalling() throws Exception { PortableMarshaller marsh = new PortableMarshaller(); http://git-wip-us.apache.org/repos/asf/ignite/blob/4d3c1f07/modules/core/src/test/java/org/apache/ignite/internal/portable/GridPortableWildcardsSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/portable/GridPortableWildcardsSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/portable/GridPortableWildcardsSelfTest.java index 95dfbe8..349f152 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/portable/GridPortableWildcardsSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/portable/GridPortableWildcardsSelfTest.java @@ -95,11 +95,11 @@ public class GridPortableWildcardsSelfTest extends GridCommonAbstractTest { @SuppressWarnings("IfMayBeConditional") @Override public int typeId(String clsName) { if (clsName.endsWith("1")) - return 100; + return 300; else if (clsName.endsWith("2")) - return 200; + return 400; else if (clsName.endsWith("InnerClass")) - return 300; + return 500; else return -500; } @@ -120,9 +120,9 @@ public class GridPortableWildcardsSelfTest extends GridCommonAbstractTest { assertEquals(3, typeMappers.size()); - assertEquals(100, typeMappers.get("GridPortableTestClass1").typeId("GridPortableTestClass1")); - assertEquals(200, typeMappers.get("GridPortableTestClass2").typeId("GridPortableTestClass2")); - assertEquals(300, typeMappers.get("InnerClass").typeId("InnerClass")); + assertEquals(300, typeMappers.get("GridPortableTestClass1").typeId("GridPortableTestClass1")); + assertEquals(400, typeMappers.get("GridPortableTestClass2").typeId("GridPortableTestClass2")); + assertEquals(500, typeMappers.get("InnerClass").typeId("InnerClass")); } /** @@ -161,11 +161,11 @@ public class GridPortableWildcardsSelfTest extends GridCommonAbstractTest { @SuppressWarnings("IfMayBeConditional") @Override public int typeId(String clsName) { if (clsName.endsWith("1")) - return 100; + return 300; else if (clsName.endsWith("2")) - return 200; + return 400; else if (clsName.endsWith("InnerClass")) - return 300; + return 500; else return -500; } @@ -186,9 +186,9 @@ public class GridPortableWildcardsSelfTest extends GridCommonAbstractTest { assertEquals(3, typeMappers.size()); - assertEquals(100, typeMappers.get("GridPortableTestClass1").typeId("GridPortableTestClass1")); - assertEquals(200, typeMappers.get("GridPortableTestClass2").typeId("GridPortableTestClass2")); - assertEquals(300, typeMappers.get("InnerClass").typeId("InnerClass")); + assertEquals(300, typeMappers.get("GridPortableTestClass1").typeId("GridPortableTestClass1")); + assertEquals(400, typeMappers.get("GridPortableTestClass2").typeId("GridPortableTestClass2")); + assertEquals(500, typeMappers.get("InnerClass").typeId("InnerClass")); } /** @@ -203,11 +203,11 @@ public class GridPortableWildcardsSelfTest extends GridCommonAbstractTest { @SuppressWarnings("IfMayBeConditional") @Override public int typeId(String clsName) { if (clsName.endsWith("1")) - return 100; + return 300; else if (clsName.endsWith("2")) - return 200; + return 400; else if (clsName.endsWith("InnerClass")) - return 300; + return 500; else return -500; } @@ -228,9 +228,9 @@ public class GridPortableWildcardsSelfTest extends GridCommonAbstractTest { assertEquals(3, typeMappers.size()); - assertEquals(100, typeMappers.get("GridPortableTestClass1").typeId("GridPortableTestClass1")); - assertEquals(200, typeMappers.get("GridPortableTestClass2").typeId("GridPortableTestClass2")); - assertEquals(300, typeMappers.get("InnerClass").typeId("InnerClass")); + assertEquals(300, typeMappers.get("GridPortableTestClass1").typeId("GridPortableTestClass1")); + assertEquals(400, typeMappers.get("GridPortableTestClass2").typeId("GridPortableTestClass2")); + assertEquals(500, typeMappers.get("InnerClass").typeId("InnerClass")); } /** @@ -310,9 +310,9 @@ public class GridPortableWildcardsSelfTest extends GridCommonAbstractTest { @SuppressWarnings("IfMayBeConditional") @Override public int typeId(String clsName) { if (clsName.endsWith("1")) - return 100; + return 300; else if (clsName.endsWith("2")) - return 200; + return 400; else return -500; } @@ -333,8 +333,8 @@ public class GridPortableWildcardsSelfTest extends GridCommonAbstractTest { assertEquals(3, typeMappers.size()); - assertEquals(100, typeMappers.get("GridPortableTestClass1").typeId("GridPortableTestClass1")); - assertEquals(200, typeMappers.get("GridPortableTestClass2").typeId("GridPortableTestClass2")); + assertEquals(300, typeMappers.get("GridPortableTestClass1").typeId("GridPortableTestClass1")); + assertEquals(400, typeMappers.get("GridPortableTestClass2").typeId("GridPortableTestClass2")); } /** @@ -372,9 +372,9 @@ public class GridPortableWildcardsSelfTest extends GridCommonAbstractTest { @SuppressWarnings("IfMayBeConditional") @Override public int typeId(String clsName) { if (clsName.endsWith("1")) - return 100; + return 300; else if (clsName.endsWith("2")) - return 200; + return 400; else return -500; } @@ -395,8 +395,8 @@ public class GridPortableWildcardsSelfTest extends GridCommonAbstractTest { assertEquals(3, typeMappers.size()); - assertEquals(100, typeMappers.get("GridPortableTestClass1").typeId("GridPortableTestClass1")); - assertEquals(200, typeMappers.get("GridPortableTestClass2").typeId("GridPortableTestClass2")); + assertEquals(300, typeMappers.get("GridPortableTestClass1").typeId("GridPortableTestClass1")); + assertEquals(400, typeMappers.get("GridPortableTestClass2").typeId("GridPortableTestClass2")); } /** @@ -411,9 +411,9 @@ public class GridPortableWildcardsSelfTest extends GridCommonAbstractTest { @SuppressWarnings("IfMayBeConditional") @Override public int typeId(String clsName) { if (clsName.endsWith("1")) - return 100; + return 300; else if (clsName.endsWith("2")) - return 200; + return 400; else return -500; } @@ -434,8 +434,8 @@ public class GridPortableWildcardsSelfTest extends GridCommonAbstractTest { assertEquals(3, typeMappers.size()); - assertEquals(100, typeMappers.get("GridPortableTestClass1").typeId("GridPortableTestClass1")); - assertEquals(200, typeMappers.get("GridPortableTestClass2").typeId("GridPortableTestClass2")); + assertEquals(300, typeMappers.get("GridPortableTestClass1").typeId("GridPortableTestClass1")); + assertEquals(400, typeMappers.get("GridPortableTestClass2").typeId("GridPortableTestClass2")); } /**