IGNITE-141 - Marshallers refactoring
Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/6d85e75d Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/6d85e75d Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/6d85e75d Branch: refs/heads/ignite-141 Commit: 6d85e75de739c4fd3f8a889a661a8c33130f633a Parents: e09b037 Author: Valentin Kulichenko <vkuliche...@gridgain.com> Authored: Wed Feb 25 22:23:35 2015 -0800 Committer: Valentin Kulichenko <vkuliche...@gridgain.com> Committed: Wed Feb 25 22:23:35 2015 -0800 ---------------------------------------------------------------------- .../CacheRendezvousAffinityFunction.java | 1 - .../org/apache/ignite/internal/GridTopic.java | 89 +- .../GridClientOptimizedMarshaller.java | 24 +- .../affinity/GridAffinityMessage.java | 13 +- .../processors/cache/CacheInvokeResult.java | 12 +- .../processors/cache/GridCacheReturn.java | 12 +- .../IgniteExternalizableExpiryPolicy.java | 12 +- .../jdbc/GridCacheQueryJdbcMetadataTask.java | 12 +- .../query/jdbc/GridCacheQueryJdbcTask.java | 12 +- .../cache/transactions/IgniteTxEntry.java | 12 +- .../cache/version/GridCacheVersion.java | 12 +- .../cache/version/GridCacheVersionEx.java | 9 - .../streamer/GridStreamerExecutionBatch.java | 12 +- .../java/org/apache/ignite/lang/IgniteUuid.java | 13 +- .../optimized/OptimizedClassDescriptor.java | 30 +- .../optimized/OptimizedClassResolver.java | 477 ----- .../optimized/OptimizedMarshallable.java | 65 - .../optimized/OptimizedMarshaller.java | 138 +- .../optimized/OptimizedMarshallerUtils.java | 153 +- .../optimized/OptimizedObjectInputStream.java | 4 +- .../optimized/OptimizedObjectOutputStream.java | 7 +- .../optimized-classnames.previous.properties | 0 .../optimized/optimized-classnames.properties | 1651 ------------------ .../cache/GridCacheAffinityRoutingSelfTest.java | 6 - .../dataload/GridDataLoaderImplSelfTest.java | 7 - .../streamer/GridStreamerEvictionSelfTest.java | 1 - .../GridMarshallerPerformanceTest.java | 2 - .../optimized/OptimizedMarshallerSelfTest.java | 170 -- .../optimized/OptimizedMarshallerTest.java | 63 - .../OptimizedObjectStreamSelfTest.java | 6 +- 30 files changed, 86 insertions(+), 2939 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6d85e75d/modules/core/src/main/java/org/apache/ignite/cache/affinity/rendezvous/CacheRendezvousAffinityFunction.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/cache/affinity/rendezvous/CacheRendezvousAffinityFunction.java b/modules/core/src/main/java/org/apache/ignite/cache/affinity/rendezvous/CacheRendezvousAffinityFunction.java index 87d768f..f7bc2c5 100644 --- a/modules/core/src/main/java/org/apache/ignite/cache/affinity/rendezvous/CacheRendezvousAffinityFunction.java +++ b/modules/core/src/main/java/org/apache/ignite/cache/affinity/rendezvous/CacheRendezvousAffinityFunction.java @@ -21,7 +21,6 @@ import org.apache.ignite.*; import org.apache.ignite.cache.affinity.*; import org.apache.ignite.cluster.*; import org.apache.ignite.internal.*; -import org.apache.ignite.internal.util.*; import org.apache.ignite.internal.util.typedef.*; import org.apache.ignite.internal.util.typedef.internal.*; import org.apache.ignite.lang.*; http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6d85e75d/modules/core/src/main/java/org/apache/ignite/internal/GridTopic.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/GridTopic.java b/modules/core/src/main/java/org/apache/ignite/internal/GridTopic.java index 32bab16..06f1653 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/GridTopic.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/GridTopic.java @@ -19,7 +19,6 @@ package org.apache.ignite.internal; import org.apache.ignite.internal.util.typedef.internal.*; import org.apache.ignite.lang.*; -import org.apache.ignite.marshaller.optimized.*; import org.jetbrains.annotations.*; import java.io.*; @@ -186,15 +185,11 @@ public enum GridTopic { /** * */ - private static class T1 implements Externalizable, OptimizedMarshallable { + private static class T1 implements Externalizable { /** */ private static final long serialVersionUID = 0L; /** */ - @SuppressWarnings({"NonConstantFieldWithUpperCaseName", "AbbreviationUsage", "UnusedDeclaration"}) - private static Object GG_CLASS_ID; - - /** */ private GridTopic topic; /** */ @@ -217,11 +212,6 @@ public enum GridTopic { } /** {@inheritDoc} */ - @Override public Object ggClassId() { - return GG_CLASS_ID; - } - - /** {@inheritDoc} */ @Override public int hashCode() { return topic.ordinal() + id.hashCode(); } @@ -258,15 +248,11 @@ public enum GridTopic { /** * */ - private static class T2 implements Externalizable, OptimizedMarshallable { + private static class T2 implements Externalizable { /** */ private static final long serialVersionUID = 0L; /** */ - @SuppressWarnings({"NonConstantFieldWithUpperCaseName", "AbbreviationUsage", "UnusedDeclaration"}) - private static Object GG_CLASS_ID; - - /** */ private GridTopic topic; /** */ @@ -294,11 +280,6 @@ public enum GridTopic { } /** {@inheritDoc} */ - @Override public Object ggClassId() { - return GG_CLASS_ID; - } - - /** {@inheritDoc} */ @Override public int hashCode() { return topic.ordinal() + id1.hashCode() + id2.hashCode(); } @@ -337,15 +318,11 @@ public enum GridTopic { /** * */ - private static class T3 implements Externalizable, OptimizedMarshallable { + private static class T3 implements Externalizable { /** */ private static final long serialVersionUID = 0L; /** */ - @SuppressWarnings({"NonConstantFieldWithUpperCaseName", "AbbreviationUsage", "UnusedDeclaration"}) - private static Object GG_CLASS_ID; - - /** */ private GridTopic topic; /** */ @@ -384,11 +361,6 @@ public enum GridTopic { } /** {@inheritDoc} */ - @Override public Object ggClassId() { - return GG_CLASS_ID; - } - - /** {@inheritDoc} */ @Override public void writeExternal(ObjectOutput out) throws IOException { out.writeByte(topic.ordinal()); U.writeUuid(out, id1); @@ -409,15 +381,11 @@ public enum GridTopic { /** * */ - private static class T4 implements Externalizable, OptimizedMarshallable { + private static class T4 implements Externalizable { /** */ private static final long serialVersionUID = 0L; /** */ - @SuppressWarnings({"NonConstantFieldWithUpperCaseName", "AbbreviationUsage", "UnusedDeclaration"}) - private static Object GG_CLASS_ID; - - /** */ private GridTopic topic; /** */ @@ -450,11 +418,6 @@ public enum GridTopic { } /** {@inheritDoc} */ - @Override public Object ggClassId() { - return GG_CLASS_ID; - } - - /** {@inheritDoc} */ @Override public int hashCode() { return topic.ordinal() + id1.hashCode() + id2.hashCode() + (int)(id3 ^ (id3 >>> 32)); } @@ -495,15 +458,11 @@ public enum GridTopic { /** * */ - private static class T5 implements Externalizable, OptimizedMarshallable { + private static class T5 implements Externalizable { /** */ private static final long serialVersionUID = 0L; /** */ - @SuppressWarnings({"NonConstantFieldWithUpperCaseName", "AbbreviationUsage", "UnusedDeclaration"}) - private static Object GG_CLASS_ID; - - /** */ private GridTopic topic; /** */ @@ -536,11 +495,6 @@ public enum GridTopic { } /** {@inheritDoc} */ - @Override public Object ggClassId() { - return GG_CLASS_ID; - } - - /** {@inheritDoc} */ @Override public int hashCode() { return topic.ordinal() + id1.hashCode() + id2 + (int)(id3 ^ (id3 >>> 32)); } @@ -581,15 +535,11 @@ public enum GridTopic { /** * */ - private static class T6 implements Externalizable, OptimizedMarshallable { + private static class T6 implements Externalizable { /** */ private static final long serialVersionUID = 0L; /** */ - @SuppressWarnings({"NonConstantFieldWithUpperCaseName", "AbbreviationUsage", "UnusedDeclaration"}) - private static Object GG_CLASS_ID; - - /** */ private GridTopic topic; /** */ @@ -617,11 +567,6 @@ public enum GridTopic { } /** {@inheritDoc} */ - @Override public Object ggClassId() { - return GG_CLASS_ID; - } - - /** {@inheritDoc} */ @Override public int hashCode() { return topic.ordinal() + id1.hashCode () + (int)(id2 ^ (id2 >>> 32)); } @@ -660,15 +605,11 @@ public enum GridTopic { /** * */ - private static class T7 implements Externalizable, OptimizedMarshallable { + private static class T7 implements Externalizable { /** */ private static final long serialVersionUID = 0L; /** */ - @SuppressWarnings({"NonConstantFieldWithUpperCaseName", "AbbreviationUsage", "UnusedDeclaration"}) - private static Object GG_CLASS_ID; - - /** */ private GridTopic topic; /** */ @@ -706,11 +647,6 @@ public enum GridTopic { } /** {@inheritDoc} */ - @Override public Object ggClassId() { - return GG_CLASS_ID; - } - - /** {@inheritDoc} */ @Override public int hashCode() { return topic.ordinal() + id1.hashCode() + id2.hashCode() + id3 + (int)(id4 ^ (id4 >>> 32)); } @@ -754,15 +690,11 @@ public enum GridTopic { /** * */ - private static class T8 implements Externalizable, OptimizedMarshallable { + private static class T8 implements Externalizable { /** */ private static final long serialVersionUID = 0L; /** */ - @SuppressWarnings({"NonConstantFieldWithUpperCaseName", "AbbreviationUsage", "UnusedDeclaration"}) - private static Object GG_CLASS_ID; - - /** */ private GridTopic topic; /** */ @@ -790,11 +722,6 @@ public enum GridTopic { } /** {@inheritDoc} */ - @Override public Object ggClassId() { - return GG_CLASS_ID; - } - - /** {@inheritDoc} */ @Override public int hashCode() { return topic.ordinal() + id1.hashCode() + (int)(id2 ^ (id2 >>> 32)); } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6d85e75d/modules/core/src/main/java/org/apache/ignite/internal/client/marshaller/optimized/GridClientOptimizedMarshaller.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/client/marshaller/optimized/GridClientOptimizedMarshaller.java b/modules/core/src/main/java/org/apache/ignite/internal/client/marshaller/optimized/GridClientOptimizedMarshaller.java index c929575..e8b0899 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/client/marshaller/optimized/GridClientOptimizedMarshaller.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/client/marshaller/optimized/GridClientOptimizedMarshaller.java @@ -19,12 +19,11 @@ package org.apache.ignite.internal.client.marshaller.optimized; import org.apache.ignite.*; import org.apache.ignite.internal.client.marshaller.*; -import org.apache.ignite.marshaller.optimized.*; import org.apache.ignite.internal.processors.rest.client.message.*; +import org.apache.ignite.marshaller.optimized.*; import java.io.*; import java.nio.*; -import java.util.*; /** * Wrapper, that adapts {@link org.apache.ignite.marshaller.optimized.OptimizedMarshaller} to @@ -47,24 +46,17 @@ public class GridClientOptimizedMarshaller implements GridClientMarshaller { /** * Constructs optimized marshaller with specific parameters. * - * @param requireSer Flag to enforce {@link Serializable} interface or not. If {@code true}, - * then objects will be required to implement {@link Serializable} in order to be - * marshalled, if {@code false}, then such requirement will be relaxed. - * @param clsNames User preregistered class names. - * @param clsNamesPath Path to a file with user preregistered class names. + * @param requireSer Require serializable flag. * @param poolSize Object streams pool size. * @throws IOException If an I/O error occurs while writing stream header. * @throws IgniteException If this marshaller is not supported on the current JVM. - * @see org.apache.ignite.marshaller.optimized.OptimizedMarshaller + * @see OptimizedMarshaller */ - public GridClientOptimizedMarshaller(boolean requireSer, List<String> clsNames, String clsNamesPath, int poolSize) - throws IOException { - try { - opMarsh = new OptimizedMarshaller(requireSer, clsNames, clsNamesPath, poolSize); - } - catch (IgniteCheckedException e) { - throw new IOException(e); - } + public GridClientOptimizedMarshaller(boolean requireSer, int poolSize) throws IOException { + opMarsh = new OptimizedMarshaller(); + + opMarsh.setRequireSerializable(requireSer); + opMarsh.setPoolSize(poolSize); } /** {@inheritDoc} */ http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6d85e75d/modules/core/src/main/java/org/apache/ignite/internal/processors/affinity/GridAffinityMessage.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/affinity/GridAffinityMessage.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/affinity/GridAffinityMessage.java index 016a792..8378553 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/affinity/GridAffinityMessage.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/affinity/GridAffinityMessage.java @@ -18,11 +18,9 @@ package org.apache.ignite.internal.processors.affinity; import org.apache.ignite.configuration.*; -import org.apache.ignite.internal.util.*; import org.apache.ignite.internal.util.tostring.*; import org.apache.ignite.internal.util.typedef.internal.*; import org.apache.ignite.lang.*; -import org.apache.ignite.marshaller.optimized.*; import java.io.*; import java.util.*; @@ -30,15 +28,11 @@ import java.util.*; /** * Object wrapper containing serialized byte array of original object and deployment information. */ -class GridAffinityMessage implements Externalizable, OptimizedMarshallable { +class GridAffinityMessage implements Externalizable { /** */ private static final long serialVersionUID = 0L; /** */ - @SuppressWarnings({"NonConstantFieldWithUpperCaseName", "AbbreviationUsage", "UnusedDeclaration"}) - private static Object GG_CLASS_ID; - - /** */ private byte[] src; /** */ @@ -130,11 +124,6 @@ class GridAffinityMessage implements Externalizable, OptimizedMarshallable { } /** {@inheritDoc} */ - @Override public Object ggClassId() { - return GG_CLASS_ID; - } - - /** {@inheritDoc} */ @Override public void writeExternal(ObjectOutput out) throws IOException { U.writeByteArray(out, src); http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6d85e75d/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheInvokeResult.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheInvokeResult.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheInvokeResult.java index 3eb0f5a..422b763 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheInvokeResult.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheInvokeResult.java @@ -19,7 +19,6 @@ package org.apache.ignite.internal.processors.cache; import org.apache.ignite.internal.util.tostring.*; import org.apache.ignite.internal.util.typedef.internal.*; -import org.apache.ignite.marshaller.optimized.*; import javax.cache.processor.*; import java.io.*; @@ -27,15 +26,11 @@ import java.io.*; /** * Implementation of {@link EntryProcessorResult}. */ -public class CacheInvokeResult<T> implements EntryProcessorResult<T>, Externalizable, OptimizedMarshallable { +public class CacheInvokeResult<T> implements EntryProcessorResult<T>, Externalizable { /** */ private static final long serialVersionUID = 0L; /** */ - @SuppressWarnings({"NonConstantFieldWithUpperCaseName", "JavaAbbreviationUsage", "UnusedDeclaration"}) - private static Object GG_CLASS_ID; - - /** */ @GridToStringInclude private T res; @@ -64,11 +59,6 @@ public class CacheInvokeResult<T> implements EntryProcessorResult<T>, Externaliz } /** {@inheritDoc} */ - @Override public Object ggClassId() { - return GG_CLASS_ID; - } - - /** {@inheritDoc} */ @Override public T get() throws EntryProcessorException { if (err != null) { if (err instanceof EntryProcessorException) http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6d85e75d/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 3e9047c..554d7b1 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 @@ -19,7 +19,6 @@ package org.apache.ignite.internal.processors.cache; import org.apache.ignite.internal.util.tostring.*; import org.apache.ignite.internal.util.typedef.internal.*; -import org.apache.ignite.marshaller.optimized.*; import org.jetbrains.annotations.*; import javax.cache.processor.*; @@ -29,14 +28,10 @@ import java.util.*; /** * Return value for cases where both, value and success flag need to be returned. */ -public class GridCacheReturn<V> implements Externalizable, OptimizedMarshallable { +public class GridCacheReturn<V> implements Externalizable { /** */ private static final long serialVersionUID = 0L; - /** */ - @SuppressWarnings({"NonConstantFieldWithUpperCaseName", "JavaAbbreviationUsage", "UnusedDeclaration"}) - private static Object GG_CLASS_ID; - /** Value. */ @GridToStringInclude private volatile V v; @@ -201,11 +196,6 @@ public class GridCacheReturn<V> implements Externalizable, OptimizedMarshallable } /** {@inheritDoc} */ - @Override public Object ggClassId() { - return GG_CLASS_ID; - } - - /** {@inheritDoc} */ @Override public void writeExternal(ObjectOutput out) throws IOException { out.writeBoolean(success); out.writeObject(v); http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6d85e75d/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/IgniteExternalizableExpiryPolicy.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/IgniteExternalizableExpiryPolicy.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/IgniteExternalizableExpiryPolicy.java index f4caaca..000eabc 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/IgniteExternalizableExpiryPolicy.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/IgniteExternalizableExpiryPolicy.java @@ -18,7 +18,6 @@ package org.apache.ignite.internal.processors.cache.distributed; import org.apache.ignite.internal.util.typedef.internal.*; -import org.apache.ignite.marshaller.optimized.*; import org.jetbrains.annotations.*; import javax.cache.expiry.*; @@ -28,15 +27,11 @@ import java.util.concurrent.*; /** * Externalizable wrapper for {@link ExpiryPolicy}. */ -public class IgniteExternalizableExpiryPolicy implements ExpiryPolicy, Externalizable, OptimizedMarshallable { +public class IgniteExternalizableExpiryPolicy implements ExpiryPolicy, Externalizable { /** */ private static final long serialVersionUID = 0L; /** */ - @SuppressWarnings({"NonConstantFieldWithUpperCaseName", "AbbreviationUsage", "UnusedDeclaration"}) - private static Object GG_CLASS_ID; - - /** */ private ExpiryPolicy plc; /** */ @@ -74,11 +69,6 @@ public class IgniteExternalizableExpiryPolicy implements ExpiryPolicy, Externali } /** {@inheritDoc} */ - @Override public Object ggClassId() { - return GG_CLASS_ID; - } - - /** {@inheritDoc} */ @Override public Duration getExpiryForCreation() { return forCreate; } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6d85e75d/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/jdbc/GridCacheQueryJdbcMetadataTask.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/jdbc/GridCacheQueryJdbcMetadataTask.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/jdbc/GridCacheQueryJdbcMetadataTask.java index fee601b..43dc81f 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/jdbc/GridCacheQueryJdbcMetadataTask.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/jdbc/GridCacheQueryJdbcMetadataTask.java @@ -27,7 +27,6 @@ import org.apache.ignite.internal.util.typedef.*; import org.apache.ignite.internal.util.typedef.internal.*; import org.apache.ignite.marshaller.*; import org.apache.ignite.marshaller.jdk.*; -import org.apache.ignite.marshaller.optimized.*; import org.apache.ignite.resources.*; import org.jetbrains.annotations.*; @@ -67,14 +66,10 @@ public class GridCacheQueryJdbcMetadataTask extends ComputeTaskAdapter<String, b /** * Job for JDBC adapter. */ - private static class JdbcDriverMetadataJob extends ComputeJobAdapter implements OptimizedMarshallable { + private static class JdbcDriverMetadataJob extends ComputeJobAdapter { /** */ private static final long serialVersionUID = 0L; - /** */ - @SuppressWarnings({"NonConstantFieldWithUpperCaseName", "AbbreviationUsage", "UnusedDeclaration"}) - private static Object GG_CLASS_ID; - /** Cache name. */ private final String cacheName; @@ -94,11 +89,6 @@ public class GridCacheQueryJdbcMetadataTask extends ComputeTaskAdapter<String, b } /** {@inheritDoc} */ - @Override public Object ggClassId() { - return GG_CLASS_ID; - } - - /** {@inheritDoc} */ @Override public Object execute() { byte status; byte[] data; http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6d85e75d/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/jdbc/GridCacheQueryJdbcTask.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/jdbc/GridCacheQueryJdbcTask.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/jdbc/GridCacheQueryJdbcTask.java index 4c6f8e4..02fe066 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/jdbc/GridCacheQueryJdbcTask.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/jdbc/GridCacheQueryJdbcTask.java @@ -29,7 +29,6 @@ import org.apache.ignite.internal.util.typedef.*; import org.apache.ignite.internal.util.typedef.internal.*; import org.apache.ignite.marshaller.*; import org.apache.ignite.marshaller.jdk.*; -import org.apache.ignite.marshaller.optimized.*; import org.apache.ignite.resources.*; import java.math.*; @@ -137,14 +136,10 @@ public class GridCacheQueryJdbcTask extends ComputeTaskAdapter<byte[], byte[]> { /** * Job for JDBC adapter. */ - private static class JdbcDriverJob extends ComputeJobAdapter implements OptimizedMarshallable { + private static class JdbcDriverJob extends ComputeJobAdapter { /** */ private static final long serialVersionUID = 0L; - /** */ - @SuppressWarnings({"NonConstantFieldWithUpperCaseName", "AbbreviationUsage", "UnusedDeclaration"}) - private static Object GG_CLASS_ID; - /** Arguments. */ private final Map<String, Object> args; @@ -172,11 +167,6 @@ public class GridCacheQueryJdbcTask extends ComputeTaskAdapter<byte[], byte[]> { } /** {@inheritDoc} */ - @Override public Object ggClassId() { - return GG_CLASS_ID; - } - - /** {@inheritDoc} */ @Override public Object execute() { try { String cacheName = argument("cache"); http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6d85e75d/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxEntry.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxEntry.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxEntry.java index eb184c9..45cbeb8 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxEntry.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxEntry.java @@ -27,7 +27,6 @@ import org.apache.ignite.internal.util.tostring.*; import org.apache.ignite.internal.util.typedef.*; import org.apache.ignite.internal.util.typedef.internal.*; import org.apache.ignite.lang.*; -import org.apache.ignite.marshaller.optimized.*; import org.jetbrains.annotations.*; import javax.cache.*; @@ -44,14 +43,10 @@ import static org.apache.ignite.internal.processors.cache.GridCacheOperation.*; * {@link #equals(Object)} method, as transaction entries should use referential * equality. */ -public class IgniteTxEntry<K, V> implements GridPeerDeployAware, Externalizable, OptimizedMarshallable { +public class IgniteTxEntry<K, V> implements GridPeerDeployAware, Externalizable { /** */ private static final long serialVersionUID = 0L; - /** */ - @SuppressWarnings({"NonConstantFieldWithUpperCaseName", "AbbreviationUsage", "UnusedDeclaration"}) - private static Object GG_CLASS_ID; - /** Owning transaction. */ @GridToStringExclude private IgniteInternalTx<K, V> tx; @@ -901,11 +896,6 @@ public class IgniteTxEntry<K, V> implements GridPeerDeployAware, Externalizable, } /** {@inheritDoc} */ - @Override public Object ggClassId() { - return GG_CLASS_ID; - } - - /** {@inheritDoc} */ @Override public Class<?> deployClass() { ClassLoader clsLdr = getClass().getClassLoader(); http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6d85e75d/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheVersion.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheVersion.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheVersion.java index 8c37f5a..84b7012 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheVersion.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheVersion.java @@ -19,7 +19,6 @@ package org.apache.ignite.internal.processors.cache.version; import org.apache.ignite.internal.util.typedef.internal.*; import org.apache.ignite.lang.*; -import org.apache.ignite.marshaller.optimized.*; import org.apache.ignite.plugin.extensions.communication.*; import java.io.*; @@ -29,14 +28,10 @@ import java.util.*; /** * Grid unique version. */ -public class GridCacheVersion implements Message, Comparable<GridCacheVersion>, Externalizable, OptimizedMarshallable { +public class GridCacheVersion implements Message, Comparable<GridCacheVersion>, Externalizable { /** */ private static final long serialVersionUID = 0L; - /** */ - @SuppressWarnings({"NonConstantFieldWithUpperCaseName", "AbbreviationUsage", "UnusedDeclaration"}) - private static Object GG_CLASS_ID; - /** Node order mask. */ private static final int NODE_ORDER_MASK = 0x07_FF_FF_FF; @@ -185,11 +180,6 @@ public class GridCacheVersion implements Message, Comparable<GridCacheVersion>, return compareTo(ver) <= 0; } - /** {@inheritDoc} */ - @Override public Object ggClassId() { - return GG_CLASS_ID; - } - /** * @return Version represented as {@code GridUuid} */ http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6d85e75d/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheVersionEx.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheVersionEx.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheVersionEx.java index 9a6cbd2..be040b9 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheVersionEx.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheVersionEx.java @@ -26,10 +26,6 @@ public class GridCacheVersionEx extends GridCacheVersion { /** */ private static final long serialVersionUID = 0L; - /** */ - @SuppressWarnings({"NonConstantFieldWithUpperCaseName", "AbbreviationUsage", "UnusedDeclaration"}) - private static Object GG_CLASS_ID; - /** DR version. */ private GridCacheVersion drVer; @@ -82,11 +78,6 @@ public class GridCacheVersionEx extends GridCacheVersion { } /** {@inheritDoc} */ - @Override public Object ggClassId() { - return GG_CLASS_ID; - } - - /** {@inheritDoc} */ @Override public void readExternal(ObjectInput in) throws IOException { super.readExternal(in); http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6d85e75d/modules/core/src/main/java/org/apache/ignite/internal/processors/streamer/GridStreamerExecutionBatch.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/streamer/GridStreamerExecutionBatch.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/streamer/GridStreamerExecutionBatch.java index 770fcc2..055ed8f 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/streamer/GridStreamerExecutionBatch.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/streamer/GridStreamerExecutionBatch.java @@ -21,7 +21,6 @@ import org.apache.ignite.internal.managers.deployment.*; import org.apache.ignite.internal.util.tostring.*; import org.apache.ignite.internal.util.typedef.internal.*; import org.apache.ignite.lang.*; -import org.apache.ignite.marshaller.optimized.*; import org.jetbrains.annotations.*; import java.io.*; @@ -30,14 +29,10 @@ import java.util.*; /** * Streamer execution batch which should be processed on one node. */ -public class GridStreamerExecutionBatch implements Externalizable, OptimizedMarshallable { +public class GridStreamerExecutionBatch implements Externalizable { /** */ private static final long serialVersionUID = 0L; - /** */ - @SuppressWarnings({"NonConstantFieldWithUpperCaseName", "AbbreviationUsage", "UnusedDeclaration"}) - private static Object GG_CLASS_ID; - /** Execution ID (ID of root future). */ private IgniteUuid execId; @@ -154,11 +149,6 @@ public class GridStreamerExecutionBatch implements Externalizable, OptimizedMars } /** {@inheritDoc} */ - @Override public Object ggClassId() { - return GG_CLASS_ID; - } - - /** {@inheritDoc} */ @Override public void writeExternal(ObjectOutput out) throws IOException { U.writeGridUuid(out, execId); out.writeLong(execStartTs); http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6d85e75d/modules/core/src/main/java/org/apache/ignite/lang/IgniteUuid.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/lang/IgniteUuid.java b/modules/core/src/main/java/org/apache/ignite/lang/IgniteUuid.java index cb622d9..e36b21f 100644 --- a/modules/core/src/main/java/org/apache/ignite/lang/IgniteUuid.java +++ b/modules/core/src/main/java/org/apache/ignite/lang/IgniteUuid.java @@ -20,7 +20,6 @@ package org.apache.ignite.lang; import org.apache.ignite.internal.util.lang.*; import org.apache.ignite.internal.util.typedef.*; import org.apache.ignite.internal.util.typedef.internal.*; -import org.apache.ignite.marshaller.optimized.*; import java.io.*; import java.util.*; @@ -31,15 +30,10 @@ import java.util.concurrent.atomic.*; * 10x time faster for ID creation. It uses extra memory for 8-byte counter additionally to * internal UUID. */ -public final class IgniteUuid implements Comparable<IgniteUuid>, Iterable<IgniteUuid>, Cloneable, Externalizable, - OptimizedMarshallable { +public final class IgniteUuid implements Comparable<IgniteUuid>, Iterable<IgniteUuid>, Cloneable, Externalizable { /** */ private static final long serialVersionUID = 0L; - /** */ - @SuppressWarnings({"NonConstantFieldWithUpperCaseName", "AbbreviationUsage", "UnusedDeclaration"}) - private static Object GG_CLASS_ID; - /** VM ID. */ public static final UUID VM_ID = UUID.randomUUID(); @@ -157,11 +151,6 @@ public final class IgniteUuid implements Comparable<IgniteUuid>, Iterable<Ignite } /** {@inheritDoc} */ - @Override public Object ggClassId() { - return GG_CLASS_ID; - } - - /** {@inheritDoc} */ @Override public void writeExternal(ObjectOutput out) throws IOException { U.writeUuid(out, gid); http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6d85e75d/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedClassDescriptor.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedClassDescriptor.java b/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedClassDescriptor.java index cbbba5c..90ac2d1 100644 --- a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedClassDescriptor.java +++ b/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedClassDescriptor.java @@ -132,12 +132,6 @@ class OptimizedClassDescriptor { /** Class. */ private Class<?> cls; - /** Header. */ - private Integer hdr; - - /** ID. */ - private Integer id; - /** Short ID. */ private Short shortId; @@ -210,10 +204,6 @@ class OptimizedClassDescriptor { excluded = MarshallerExclusions.isExcluded(cls); - T2<Integer, Integer> t = OptimizedClassResolver.writeClassData(cls); - - hdr = t.get1(); - id = t.get2(); name = cls.getName(); if (!excluded) { @@ -576,20 +566,6 @@ class OptimizedClassDescriptor { } /** - * @return Header. - */ - Integer header() { - return hdr; - } - - /** - * @return ID. - */ - Integer id() { - return id; - } - - /** * @return Short ID. */ Short shortId() { @@ -660,6 +636,8 @@ class OptimizedClassDescriptor { */ @SuppressWarnings("ForLoopReplaceableByForEach") void write(OptimizedObjectOutputStream out, Object obj) throws IOException { + out.writeInt(cls.getName().hashCode()); + switch (type) { case TYPE_BYTE: out.writeByte((Byte)obj); @@ -802,7 +780,7 @@ class OptimizedClassDescriptor { break; case TYPE_CLS: - OptimizedClassResolver.writeClass(out, OptimizedMarshallerUtils.classDescriptor((Class<?>) obj, obj)); + out.writeInt(((Class<?>)obj).getName().hashCode()); break; @@ -921,7 +899,7 @@ class OptimizedClassDescriptor { return in.readDate(); case TYPE_CLS: - return OptimizedClassResolver.readClass(in, in.classLoader()).describedClass(); + return null; // TODO: IGNITE-141 case TYPE_EXTERNALIZABLE: return in.readExternalizable(constructor, readResolveMtd); http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6d85e75d/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedClassResolver.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedClassResolver.java b/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedClassResolver.java deleted file mode 100644 index 9a7c981..0000000 --- a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedClassResolver.java +++ /dev/null @@ -1,477 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.ignite.marshaller.optimized; - -import org.apache.ignite.internal.util.*; -import org.apache.ignite.internal.util.typedef.*; -import org.apache.ignite.internal.util.typedef.internal.*; -import org.apache.ignite.lang.*; -import org.jdk8.backport.*; -import org.jetbrains.annotations.*; - -import java.io.*; -import java.math.*; -import java.sql.*; -import java.util.*; -import java.util.Date; -import java.util.concurrent.*; -import java.util.concurrent.atomic.*; -import java.util.concurrent.locks.*; - -/** - * Resolves class names by serialVersionUID. - */ -@SuppressWarnings({"UnnecessaryFullyQualifiedName", "unchecked"}) -class OptimizedClassResolver { - /** File name to generate. */ - private static final String FILE_NAME = "optimized-classnames.properties"; - - /** */ - private static final Map<String, Integer> ggxName2id = new HashMap<>(); - - /** */ - private static final T2<Class<?>, OptimizedClassDescriptor>[] ggxId2name; - - /** */ - private static final Map<String, Integer> ggName2id = new HashMap<>(); - - /** */ - private static final T3<String, Class<?>, OptimizedClassDescriptor>[] ggId2name; - - /** */ - private static Map<String, Integer> usrName2Id; - - /** */ - private static T3<String, Class<?>, OptimizedClassDescriptor>[] usrId2Name; - - /** */ - private static final int HEADER_NAME = 255; - - /** */ - private static final int HEADER_GG_NAME = 254; - - /** */ - private static final int HEADER_USER_NAME = 253; - - /** */ - private static final int HEADER_ARRAY = 252; - - /** - * Initialize predefined classes to optimize. - */ - static { - Class[] superOptCls = new Class[] { - // Array types. - byte[].class, - short[].class, - int[].class, - long[].class, - float[].class, - double[].class, - boolean[].class, - char[].class, - - // Boxed types. - Byte.class, - Short.class, - Integer.class, - Long.class, - Float.class, - Double.class, - Boolean.class, - Character.class, - String.class, - - // Atomic. - AtomicBoolean.class,AtomicInteger.class, - AtomicLong.class,AtomicReference.class, - AtomicMarkableReference.class, - AtomicStampedReference.class, - AtomicIntegerArray.class, - AtomicReferenceArray.class, - - // Concurrent types. - ConcurrentHashMap.class, - ConcurrentLinkedQueue.class, - ConcurrentSkipListMap.class, - ConcurrentSkipListSet.class, - LinkedBlockingDeque.class, - LinkedBlockingQueue.class, - PriorityBlockingQueue.class, - CopyOnWriteArrayList.class, - CopyOnWriteArraySet.class, - - // Locks. - ReentrantLock.class, - ReentrantReadWriteLock.class, - ReentrantReadWriteLock.ReadLock.class, - ReentrantReadWriteLock.WriteLock.class, - - // Util types. - Date.class, - UUID.class, - Calendar.class, - Random.class, - Calendar.class, - Currency.class, - ArrayList.class, - LinkedList.class, - Stack.class, - Vector.class, - HashMap.class, - HashSet.class, - Hashtable.class, - TreeMap.class, - TreeSet.class, - IdentityHashMap.class, - LinkedHashMap.class, - LinkedHashSet.class, - ArrayDeque.class, - BitSet.class, - EnumMap.class, - EnumSet.class, - - // SQL types. - java.sql.Date.class, - Time.class, - Timestamp.class, - - // Math types. - BigDecimal.class, - BigInteger.class, - - // Ignite types. - IgniteUuid.class, - GridBoundedConcurrentOrderedSet.class, - GridBoundedLinkedHashSet.class, - GridConcurrentHashSet.class, - ConcurrentLinkedDeque8.class, - GridConcurrentPhantomHashSet.class, - GridConcurrentSkipListSet.class, - GridConcurrentWeakHashSet.class, - GridIdentityHashSet.class, - GridLeanSet.class, - GridSetWrapper.class - }; - - // Have to leave a range for special purposes. - assert superOptCls.length < 230; - - ggxId2name = new T2[superOptCls.length]; - - for (int i = 0; i < superOptCls.length; i++) { - Class cls = superOptCls[i]; - - ggxName2id.put(cls.getName(), i); - ggxId2name[i] = new T2<Class<?>, OptimizedClassDescriptor>(cls, null); - } - - BufferedReader reader = new BufferedReader(new InputStreamReader( - OptimizedClassResolver.class.getResourceAsStream(FILE_NAME), - OptimizedMarshallerUtils.UTF_8)); - - List<T3<String, Class<?>, OptimizedClassDescriptor>> ggId2name0 = - new LinkedList<>(); - - try { - for (int i = 0; ; i++) { - String clsName = reader.readLine(); - - if (clsName == null) - break; - - ggName2id.put(clsName, i); - ggId2name0.add(new T3<String, Class<?>, OptimizedClassDescriptor>(clsName, null, null)); - } - - ggId2name = ggId2name0.toArray(new T3[ggId2name0.size()]); - } - catch (IOException e) { - throw new AssertionError(e); - } - finally { - U.close(reader, null); - } - } - - /** - * Ensure singleton. - */ - private OptimizedClassResolver() { - // No-op. - } - - /** - * @param usrName2id0 From name to ID. - * @param usrId2Name0 From ID to name. - */ - static void userClasses(@Nullable Map<String, Integer> usrName2id0, - @Nullable T3<String, Class<?>, OptimizedClassDescriptor>[] usrId2Name0) { - usrName2Id = usrName2id0; - usrId2Name = usrId2Name0; - } - - /** - * @param in DataInput to read from. - * @param clsLdr ClassLoader. - * @return Class descriptor. - * @throws IOException If serial version UID failed. - * @throws ClassNotFoundException If the class cannot be located by the specified class loader. - */ - static OptimizedClassDescriptor readClass(DataInput in, ClassLoader clsLdr) - throws IOException, ClassNotFoundException { - assert in != null; - assert clsLdr != null; - - int hdr = in.readByte() & 0xff; - - if (hdr < ggxId2name.length) { - T2<Class<?>, OptimizedClassDescriptor> ggxT = ggxId2name[hdr]; - - OptimizedClassDescriptor desc = ggxT.get2(); - - if (desc == null) { - desc = OptimizedMarshallerUtils.classDescriptor(ggxT.get1(), null); - - ggxT.set2(desc); - } - - return desc; - } - - String name; - Class<?> cls; - OptimizedClassDescriptor desc; - - switch (hdr) { - case HEADER_GG_NAME: - int ggId = in.readInt(); - - T3<String, Class<?>, OptimizedClassDescriptor> ggT; - - try { - ggT = ggId2name[ggId]; - } - catch (ArrayIndexOutOfBoundsException e) { - throw new ClassNotFoundException("Failed to find optimized class ID " + - "(is same Ignite version running on all nodes?): " + ggId, e); - } - - name = ggT.get1(); - cls = ggT.get2(); - desc = ggT.get3(); - - if (desc == null) { - if (clsLdr == U.gridClassLoader()) { - if (cls == null) { - cls = forName(name, clsLdr); - - ggT.set2(cls); - } - - desc = OptimizedMarshallerUtils.classDescriptor(cls, null); - - ggT.set3(desc); - } - else { - cls = forName(name, clsLdr); - - desc = OptimizedMarshallerUtils.classDescriptor(cls, null); - } - } - - break; - - case HEADER_USER_NAME: - int usrId = in.readInt(); - - T3<String, Class<?>, OptimizedClassDescriptor> usrT; - - try { - if (usrId2Name != null) - usrT = usrId2Name[usrId]; - else - throw new ClassNotFoundException("Failed to find user defined class ID " + - "(make sure to register identical classes on all nodes for optimization): " + usrId); - } - catch (ArrayIndexOutOfBoundsException e) { - throw new ClassNotFoundException("Failed to find user defined class ID " + - "(make sure to register identical classes on all nodes for optimization): " + usrId, e); - } - - name = usrT.get1(); - cls = usrT.get2(); - desc = usrT.get3(); - - if (desc == null) { - if (cls == null) { - cls = forName(name, clsLdr); - - usrT.set2(cls); - } - - desc = OptimizedMarshallerUtils.classDescriptor(cls, null); - - usrT.set3(desc); - } - - break; - - case HEADER_ARRAY: - name = readClass(in, clsLdr).name(); - - name = name.charAt(0) == '[' ? "[" + name : "[L" + name + ';'; - - cls = forName(name, clsLdr); - - return OptimizedMarshallerUtils.classDescriptor(cls, null); - - case HEADER_NAME: - name = in.readUTF(); - - cls = forName(name, clsLdr); - - desc = OptimizedMarshallerUtils.classDescriptor(cls, null); - - break; - - default: - throw new IOException("Unexpected optimized stream header: " + hdr); - } - - short actual = desc.shortId(); - - short exp = in.readShort(); - - if (actual != exp) - throw new ClassNotFoundException("Optimized stream class checksum mismatch " + - "(is same version of marshalled class present on all nodes?) " + - "[expected=" + exp + ", actual=" + actual + ", cls=" + cls + ']'); - - return desc; - } - - /** - * @param out Output. - * @param desc Class descriptor. - * @throws IOException In case of error. - */ - static void writeClass(DataOutput out, OptimizedClassDescriptor desc) throws IOException { - assert out != null; - assert desc != null; - - int hdr = desc.header(); - - out.writeByte(hdr); - - switch (hdr) { - case HEADER_GG_NAME: - case HEADER_USER_NAME: - out.writeInt(desc.id()); - out.writeShort(desc.shortId()); - - return; - - case HEADER_ARRAY: - writeClass(out, OptimizedMarshallerUtils.classDescriptor(desc.componentType(), null)); - - return; - - case HEADER_NAME: - out.writeUTF(desc.name()); - out.writeShort(desc.shortId()); - } - } - - /** - * @param cls Class to write. - * @return Data for {@code writeClass} method. - */ - static T2<Integer, Integer> writeClassData(Class<?> cls) { - assert cls != null; - - String name = cls.getName(); - - Integer superHdr = ggxName2id.get(name); - - if (superHdr != null) - return new T2<>(superHdr, null); - - Integer id; - - if ((id = ggName2id.get(name)) != null) - return new T2<>(HEADER_GG_NAME, id); - - if (usrName2Id != null && (id = usrName2Id.get(name)) != null) - return new T2<>(HEADER_USER_NAME, id); - - if (cls.isArray()) - return new T2<>(HEADER_ARRAY, null); - - return new T2<>(HEADER_NAME, null); - } - - /** - * @param name Class name. - * @param ldr Class loader. - * @return Class. - * @throws ClassNotFoundException If class not found. - */ - private static Class<?> forName(String name, ClassLoader ldr) throws ClassNotFoundException { - Class<?> cls = primitive(name); - - if (cls == null) - cls = OptimizedMarshallerUtils.forName(name, ldr); - - return cls; - } - - /** - * @param name Name of primitive class. - * @return Primitive type class or null. - */ - @SuppressWarnings("TypeMayBeWeakened") - @Nullable private static Class<?> primitive(String name) { - if (name.length() > 7) - return null; - - switch (name.charAt(0)) { - case 'b': - if ("boolean".equals(name)) - return boolean.class; - - return "byte".equals(name) ? byte.class : null; - case 's': - return "short".equals(name) ? short.class : null; - case 'i': - return "int".equals(name) ? int.class : null; - case 'l': - return "long".equals(name) ? long.class : null; - case 'c': - return "char".equals(name) ? char.class : null; - case 'f': - return "float".equals(name) ? float.class : null; - case 'd': - return "double".equals(name) ? double.class : null; - case 'v': - return "void".equals(name) ? void.class : null; - } - - return null; - } -} http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6d85e75d/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallable.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallable.java b/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallable.java deleted file mode 100644 index 729b062..0000000 --- a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallable.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.ignite.marshaller.optimized; - -import java.util.*; - -/** - * Optional interface which helps make serialization even faster by removing internal - * look-ups for classes. - * <p> - * All implementation must have the following: - * <ul> - * <li> - * Must have static filed (private or public) declared of type {@link Object} - * with name {@code GG_CLASS_ID}. Ignite will reflectively initialize this field with - * proper class ID during system startup. - * </li> - * <li> - * Must return the value of {@code GG_CLASS_ID} field from {@link #ggClassId} method. - * </li> - * </ul> - * Here is a sample implementation: - * <pre name="code" class="java"> - * // For better performance consider implementing java.io.Externalizable interface. - * class ExampleMarshallable implements GridOptimizedMarshallable, Serializable { - * // Class ID field required by 'GridOptimizedMarshallable'. - * private static Object GG_CLASS_ID; - * - * ... - * - * @ public Object ggClassId() { - * return GG_CLASS_ID; - * } - * } - * </pre> - * <p> - * Note that for better performance you should also specify list of classes you - * plan to serialize via {@link OptimizedMarshaller#setClassNames(List)} method. - */ -public interface OptimizedMarshallable { - /** */ - public static final String CLS_ID_FIELD_NAME = "GG_CLASS_ID"; - - /** - * Implementation of this method should simply return value of {@code GG_CLASS_ID} field. - * - * @return Class ID for optimized marshalling. - */ - public Object ggClassId(); -} http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6d85e75d/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshaller.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshaller.java b/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshaller.java index 57d0506..1e7f802 100644 --- a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshaller.java +++ b/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshaller.java @@ -19,15 +19,11 @@ package org.apache.ignite.marshaller.optimized; import org.apache.ignite.*; import org.apache.ignite.internal.util.*; -import org.apache.ignite.internal.util.typedef.*; -import org.apache.ignite.internal.util.typedef.internal.*; import org.apache.ignite.marshaller.*; import org.jetbrains.annotations.*; import sun.misc.*; import java.io.*; -import java.net.*; -import java.util.*; /** * Optimized implementation of {@link org.apache.ignite.marshaller.Marshaller}. Unlike {@link org.apache.ignite.marshaller.jdk.JdkMarshaller}, @@ -77,14 +73,14 @@ import java.util.*; * For information about Spring framework visit <a href="http://www.springframework.org/">www.springframework.org</a> */ public class OptimizedMarshaller extends AbstractMarshaller { - /** Whether or not to require an object to be serializable in order to be marshalled. */ - private boolean requireSer = true; - /** Default class loader. */ private final ClassLoader dfltClsLdr = getClass().getClassLoader(); + /** Whether or not to require an object to be serializable in order to be marshalled. */ + private boolean requireSer = true; + /** - * Initializes marshaller not to enforce {@link Serializable} interface. + * Creates new marshaller will all defaults. * * @throws IgniteException If this marshaller is not supported on the current JVM. */ @@ -95,116 +91,22 @@ public class OptimizedMarshaller extends AbstractMarshaller { } /** - * Initializes marshaller with given serialization flag. If {@code true}, - * then objects will be required to implement {@link Serializable} in order - * to be serialize. + * Creates new marshaller providing whether it should + * require {@link Serializable} interface or not. * - * @param requireSer Flag to enforce {@link Serializable} interface or not. If {@code true}, - * then objects will be required to implement {@link Serializable} in order to be - * marshalled, if {@code false}, then such requirement will be relaxed. - * @throws IgniteException If this marshaller is not supported on the current JVM. + * @param requireSer Whether to require {@link Serializable}. */ public OptimizedMarshaller(boolean requireSer) { - this(); - this.requireSer = requireSer; } /** - * Initializes marshaller with given serialization flag. If {@code true}, - * then objects will be required to implement {@link Serializable} in order - * to be serialize. + * Sets whether marshaller should require {@link Serializable} interface or not. * - * @param requireSer Flag to enforce {@link Serializable} interface or not. If {@code true}, - * then objects will be required to implement {@link Serializable} in order to be - * marshalled, if {@code false}, then such requirement will be relaxed. - * @param clsNames User preregistered class names. - * @param clsNamesPath Path to a file with user preregistered class names. - * @param poolSize Object streams pool size. - * @throws IgniteCheckedException If an I/O error occurs while writing stream header. - * @throws IgniteException If this marshaller is not supported on the current JVM. + * @param requireSer Whether to require {@link Serializable}. */ - public OptimizedMarshaller(boolean requireSer, @Nullable List<String> clsNames, - @Nullable String clsNamesPath, int poolSize) throws IgniteCheckedException { - this(requireSer); - - setClassNames(clsNames); - setClassNamesPath(clsNamesPath); - setPoolSize(poolSize); - } - - /** - * Adds provided class names for marshalling optimization. - * <p> - * <b>NOTE</b>: these collections of classes must be identical on all nodes and in the same order. - * - * @param clsNames User preregistered class names to add. - */ - @SuppressWarnings("unchecked") - public void setClassNames(@Nullable List<String> clsNames) { - if (clsNames != null && !clsNames.isEmpty()) { - String[] clsNamesArr = clsNames.toArray(new String[clsNames.size()]); - - Arrays.sort(clsNamesArr); - - Map<String, Integer> name2id = U.newHashMap(clsNamesArr.length); - T3<String, Class<?>, OptimizedClassDescriptor>[] id2name = new T3[clsNamesArr.length]; - - int i = 0; - - for (String name : clsNamesArr) { - name2id.put(name, i); - id2name[i++] = new T3<>(name, null, null); - } - - OptimizedClassResolver.userClasses(name2id, id2name); - } - } - - /** - * Specifies a name of the file which lists all class names to be optimized. - * The file path can either be absolute path, relative to {@code IGNITE_HOME}, - * or specify a resource file on the class path. - * <p> - * The format of the file is class name per line, like this: - * <pre> - * ... - * com.example.Class1 - * com.example.Class2 - * ... - * </pre> - * <p> - * <b>NOTE</b>: this class list must be identical on all nodes and in the same order. - * - * @param path Path to a file with user preregistered class names. - * @throws IgniteCheckedException If an error occurs while writing stream header. - */ - public void setClassNamesPath(@Nullable String path) throws IgniteCheckedException { - if (path == null) - return; - - URL url = IgniteUtils.resolveIgniteUrl(path, false); - - if (url == null) - throw new IgniteCheckedException("Failed to find resource for name: " + path); - - List<String> clsNames; - - try { - clsNames = new LinkedList<>(); - - try (BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream(), OptimizedMarshallerUtils.UTF_8))) { - String clsName; - - while ((clsName = reader.readLine()) != null) - clsNames.add(clsName); - } - } - catch (IOException e) { - throw new IgniteCheckedException("Failed to read class names from path: " + path, e); - } - - setClassNames(clsNames); + public void setRequireSerializable(boolean requireSer) { + this.requireSer = requireSer; } /** @@ -226,24 +128,6 @@ public class OptimizedMarshaller extends AbstractMarshaller { OptimizedObjectStreamRegistry.poolSize(poolSize); } - /** - * @return Whether to enforce {@link Serializable} interface. - */ - public boolean isRequireSerializable() { - return requireSer; - } - - /** - * Sets flag to enforce {@link Serializable} interface or not. - * - * @param requireSer Flag to enforce {@link Serializable} interface or not. If {@code true}, - * then objects will be required to implement {@link Serializable} in order to be - * marshalled, if {@code false}, then such requirement will be relaxed. - */ - public void setRequireSerializable(boolean requireSer) { - this.requireSer = requireSer; - } - /** {@inheritDoc} */ @Override public void marshal(@Nullable Object obj, OutputStream out) throws IgniteCheckedException { assert out != null; http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6d85e75d/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerUtils.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerUtils.java b/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerUtils.java index 6d8ebfc..7bc606a 100644 --- a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerUtils.java +++ b/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerUtils.java @@ -20,7 +20,6 @@ package org.apache.ignite.marshaller.optimized; import org.apache.ignite.internal.util.*; import org.apache.ignite.internal.util.typedef.*; import org.jdk8.backport.*; -import org.jetbrains.annotations.*; import sun.misc.*; import java.io.*; @@ -30,8 +29,6 @@ import java.security.*; import java.util.*; import java.util.concurrent.*; -import static org.apache.ignite.marshaller.optimized.OptimizedMarshallable.*; - /** * Miscellaneous utility methods to facilitate {@link OptimizedMarshaller}. */ @@ -51,129 +48,65 @@ class OptimizedMarshallerUtils { /** UTF-8 character name. */ static final Charset UTF_8 = Charset.forName("UTF-8"); - /** Class descriptors cache. */ - private static final ConcurrentMap<Class<?>, OptimizedClassDescriptor> CLS_DESC_CACHE = + /** Class descriptors by class. */ + private static final ConcurrentMap<Class<?>, OptimizedClassDescriptor> DESC_BY_CLS = new ConcurrentHashMap8<>(256); - /** Classes cache by name. */ - private static final ConcurrentHashMap8<ClassLoader, ConcurrentHashMap8<String, Class<?>>> CLS_BY_NAME_CACHE = - new ConcurrentHashMap8<>(); + /** Class descriptors by ID. */ + private static final ConcurrentMap<Integer, OptimizedClassDescriptor> DESC_BY_ID = + new ConcurrentHashMap8<>(256); /** - * Suppresses default constructor, ensuring non-instantiability. */ private OptimizedMarshallerUtils() { // No-op. } /** - * Gets class for given name and class loader. + * Gets descriptor for provided class. * - * @param name Class name. - * @param ldr Class loader. - * @return Class. - * @throws ClassNotFoundException If class was not found. + * @param cls Class. + * @return Descriptor. + * @throws IOException In case of error. */ - static Class<?> forName(String name, ClassLoader ldr) throws ClassNotFoundException { - assert ldr != null; - assert name != null; - - ConcurrentHashMap8<String, Class<?>> cache = CLS_BY_NAME_CACHE.get(ldr); + static OptimizedClassDescriptor classDescriptor(Class<?> cls) throws IOException { + OptimizedClassDescriptor desc = DESC_BY_CLS.get(cls); - Class<?> cls = null; - - if (cache == null) { - cache = new ConcurrentHashMap8<>(); - - ConcurrentHashMap8<String, Class<?>> old = CLS_BY_NAME_CACHE.putIfAbsent(ldr, cache); - - if (old != null) { - cache = old; - - cls = cache.get(name); - } - } - else - cls = cache.get(name); + if (desc == null) { + // TODO: IGNITE-141 - Put to cache. - if (cls == null) { - cls = Class.forName(name, true, ldr); + OptimizedClassDescriptor old = DESC_BY_CLS.putIfAbsent(cls, desc = new OptimizedClassDescriptor(cls)); - cache.put(name, cls); + if (old != null) + desc = old; } - return cls; + return desc; } /** - * Gets descriptor for provided class. + * Gets descriptor for provided ID. * - * @param cls Class. - * @param obj Object. + * @param id ID. + * @param ldr Class loader. * @return Descriptor. * @throws IOException In case of error. + * @throws ClassNotFoundException If class was not found. */ - static OptimizedClassDescriptor classDescriptor(Class<?> cls, @Nullable Object obj) throws IOException { - if (obj != null) { - if (obj instanceof OptimizedMarshallable) { - OptimizedMarshallable m = (OptimizedMarshallable)obj; - - Object clsId = m.ggClassId(); - - if (clsId != null && !(clsId instanceof OptimizedClassDescriptor)) - throw new IOException("Method '" + obj.getClass().getName() + ".ggClassId() must return " + - "the value of the field '" + CLS_ID_FIELD_NAME + "'."); - - OptimizedClassDescriptor desc = (OptimizedClassDescriptor)clsId; - - if (desc == null) { - desc = new OptimizedClassDescriptor(cls); - - try { - Field field = obj.getClass().getDeclaredField(CLS_ID_FIELD_NAME); - - field.setAccessible(true); - - Object o = field.get(null); - - if (o == null) { - if ((field.getModifiers() & Modifier.STATIC) == 0) - throw new IOException("Field '" + CLS_ID_FIELD_NAME + "' must be declared static: " + - obj.getClass().getName()); - - field.set(null, desc); - - if (m.ggClassId() == null) - throw new IOException( "Method '" + obj.getClass().getName() + ".ggClassId() must " + - "return the value of the field '" + CLS_ID_FIELD_NAME + "': " - + obj.getClass().getName()); - } - else if (!(o instanceof OptimizedClassDescriptor)) - throw new IOException("Field '" + CLS_ID_FIELD_NAME + "' must be declared with " + - "null value: " + obj.getClass().getName()); - } - catch (NoSuchFieldException e) { - throw new IOException("GridOptimizedMarshallable classes must have static field declared " + - "[fieldName=" + CLS_ID_FIELD_NAME + ", cls=" + obj.getClass().getName() + ']', e); - } - catch (IllegalAccessException e) { - throw new IOException("Failed to set field '" + CLS_ID_FIELD_NAME + "' on '" + - obj.getClass().getName() + "' class.", e); - } - } - - return desc; - } - } - - OptimizedClassDescriptor desc = CLS_DESC_CACHE.get(cls); + static OptimizedClassDescriptor classDescriptor(int id, ClassLoader ldr) + throws IOException, ClassNotFoundException { + OptimizedClassDescriptor desc = DESC_BY_ID.get(id); if (desc == null) { - OptimizedClassDescriptor existing = CLS_DESC_CACHE.putIfAbsent(cls, - desc = new OptimizedClassDescriptor(cls)); + // TODO: IGNITE-141 - Get from cache. + String clsName = null; + + Class<?> cls = Class.forName(clsName, true, ldr); - if (existing != null) - desc = existing; + OptimizedClassDescriptor old = DESC_BY_ID.putIfAbsent(id, desc = new OptimizedClassDescriptor(cls)); + + if (old != null) + desc = old; } return desc; @@ -185,11 +118,9 @@ class OptimizedMarshallerUtils { * @param ldr Undeployed class loader. */ public static void onUndeploy(ClassLoader ldr) { - CLS_BY_NAME_CACHE.remove(ldr); - - for (Class<?> cls : CLS_DESC_CACHE.keySet()) { + for (Class<?> cls : DESC_BY_CLS.keySet()) { if (ldr.equals(cls.getClassLoader())) - CLS_DESC_CACHE.remove(cls); + DESC_BY_CLS.remove(cls); } } @@ -197,20 +128,8 @@ class OptimizedMarshallerUtils { * Intended for test purposes only. */ public static void clearCache() { - CLS_BY_NAME_CACHE.clear(); - CLS_DESC_CACHE.clear(); - } - - /** - * - */ - public static void printMemoryStats() { - X.println(">>>"); - X.println(">>> GridOptimizedMarshallerUtils memory stats:"); - X.println(" Cache size: " + CLS_DESC_CACHE.size()); - - for (Map.Entry<Class<?>, OptimizedClassDescriptor> e : CLS_DESC_CACHE.entrySet()) - X.println(" " + e.getKey() + " : " + e.getValue()); + DESC_BY_CLS.clear(); + DESC_BY_ID.clear(); } /** http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6d85e75d/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedObjectInputStream.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedObjectInputStream.java b/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedObjectInputStream.java index ef589e9..6b07e08 100644 --- a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedObjectInputStream.java +++ b/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedObjectInputStream.java @@ -143,7 +143,9 @@ class OptimizedObjectInputStream extends ObjectInputStream { return handles.lookup(readInt()); case OBJECT: - OptimizedClassDescriptor desc = OptimizedClassResolver.readClass(this, clsLdr); + int clsId = readInt(); + + OptimizedClassDescriptor desc = OptimizedMarshallerUtils.classDescriptor(clsId, clsLdr); curCls = desc.describedClass(); http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6d85e75d/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedObjectOutputStream.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedObjectOutputStream.java b/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedObjectOutputStream.java index ff1f043..507dde6 100644 --- a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedObjectOutputStream.java +++ b/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedObjectOutputStream.java @@ -156,7 +156,7 @@ class OptimizedObjectOutputStream extends ObjectOutputStream { else { Class<?> cls = obj.getClass(); - OptimizedClassDescriptor desc = classDescriptor(cls, obj); + OptimizedClassDescriptor desc = classDescriptor(cls); if (desc.excluded()) { writeByte(NULL); @@ -180,7 +180,7 @@ class OptimizedObjectOutputStream extends ObjectOutputStream { if (obj0 != obj) { obj = obj0; - desc = classDescriptor(obj.getClass(), obj); + desc = classDescriptor(obj.getClass()); } if (handle >= 0) { @@ -190,8 +190,6 @@ class OptimizedObjectOutputStream extends ObjectOutputStream { else { writeByte(OBJECT); - OptimizedClassResolver.writeClass(this, desc); - desc.write(this, obj); } } @@ -762,7 +760,6 @@ class OptimizedObjectOutputStream extends ObjectOutputStream { /** * @param out Output stream. - * @throws IOException In case of error. */ @SuppressWarnings("unchecked") private PutFieldImpl(OptimizedObjectOutputStream out) { http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6d85e75d/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/optimized-classnames.previous.properties ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/optimized-classnames.previous.properties b/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/optimized-classnames.previous.properties deleted file mode 100644 index e69de29..0000000