Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id 6225F200BA7 for ; Fri, 16 Sep 2016 07:49:19 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id 60D04160AF2; Fri, 16 Sep 2016 05:49:19 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 2C1FC160ADB for ; Fri, 16 Sep 2016 07:49:17 +0200 (CEST) Received: (qmail 22305 invoked by uid 500); 16 Sep 2016 05:49: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 22063 invoked by uid 99); 16 Sep 2016 05:49:16 -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, 16 Sep 2016 05:49:16 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id F31BAE03CE; Fri, 16 Sep 2016 05:49:15 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: akuznetsov@apache.org To: commits@ignite.apache.org Date: Fri, 16 Sep 2016 05:49:19 -0000 Message-Id: <0d75e039a11f409ca63e0f20be3a0af5@git.apache.org> In-Reply-To: References: X-Mailer: ASF-Git Admin Mailer Subject: [05/50] [abbrv] ignite git commit: IGNITE-2649: Ensured correct local Ignite instance processing during serialization and deserialization. archived-at: Fri, 16 Sep 2016 05:49:19 -0000 IGNITE-2649: Ensured correct local Ignite instance processing during serialization and deserialization. Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/59527c56 Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/59527c56 Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/59527c56 Branch: refs/heads/ignite-3443 Commit: 59527c5649afd3576d944d42299cf49416972562 Parents: 1cc502d Author: vozerov-gridgain Authored: Fri Sep 9 12:27:55 2016 +0300 Committer: vozerov-gridgain Committed: Fri Sep 9 13:01:16 2016 +0300 ---------------------------------------------------------------------- .../apache/ignite/internal/GridLoggerProxy.java | 3 +- .../org/apache/ignite/internal/IgnitionEx.java | 17 +- .../ignite/internal/binary/BinaryContext.java | 3 + .../internal/binary/BinaryMarshaller.java | 21 +- .../internal/binary/BinaryReaderExImpl.java | 24 ++ .../internal/binary/BinaryWriterExImpl.java | 18 + .../client/GridClientConfiguration.java | 1 - .../internal/cluster/ClusterGroupAdapter.java | 2 +- .../cluster/ClusterNodeLocalMapImpl.java | 3 +- .../processors/cache/GridCacheAdapter.java | 2 +- .../processors/cache/GridCacheContext.java | 2 +- .../processors/cache/GridCacheProcessor.java | 5 +- .../ignite/internal/util/IgniteUtils.java | 60 ++- .../ignite/marshaller/AbstractMarshaller.java | 41 +- .../AbstractNodeNameAwareMarshaller.java | 142 +++++++ .../ignite/marshaller/MarshallerUtils.java | 58 +++ .../ignite/marshaller/jdk/JdkMarshaller.java | 40 +- .../optimized/OptimizedMarshaller.java | 12 +- .../sharedfs/SharedFsCheckpointSpi.java | 7 +- .../ignite/spi/discovery/tcp/ClientImpl.java | 11 +- .../ignite/spi/discovery/tcp/ServerImpl.java | 29 +- .../spi/discovery/tcp/TcpDiscoverySpi.java | 20 +- .../ignite/stream/socket/SocketStreamer.java | 18 +- .../ignite/internal/ClusterGroupSelfTest.java | 2 +- .../cache/GridLocalIgniteSerializationTest.java | 378 +++++++++++++++++++ .../spi/discovery/tcp/TcpDiscoverySelfTest.java | 2 +- .../ignite/testsuites/IgniteBasicTestSuite.java | 2 + 27 files changed, 818 insertions(+), 105 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/59527c56/modules/core/src/main/java/org/apache/ignite/internal/GridLoggerProxy.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/GridLoggerProxy.java b/modules/core/src/main/java/org/apache/ignite/internal/GridLoggerProxy.java index 295ee1c..b26921b 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/GridLoggerProxy.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/GridLoggerProxy.java @@ -202,10 +202,9 @@ public class GridLoggerProxy implements IgniteLogger, LifecycleAware, Externaliz try { IgniteBiTuple t = stash.get(); - String gridNameR = t.get1(); Object ctgrR = t.get2(); - IgniteLogger log = IgnitionEx.gridx(gridNameR).log(); + IgniteLogger log = IgnitionEx.localIgnite().log(); return ctgrR != null ? log.getLogger(ctgrR) : log; } http://git-wip-us.apache.org/repos/asf/ignite/blob/59527c56/modules/core/src/main/java/org/apache/ignite/internal/IgnitionEx.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/IgnitionEx.java b/modules/core/src/main/java/org/apache/ignite/internal/IgnitionEx.java index 30f1d15..b54c17d 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/IgnitionEx.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/IgnitionEx.java @@ -77,6 +77,7 @@ import org.apache.ignite.lang.IgniteBiTuple; import org.apache.ignite.logger.LoggerNodeIdAware; import org.apache.ignite.logger.java.JavaLogger; import org.apache.ignite.marshaller.Marshaller; +import org.apache.ignite.marshaller.MarshallerUtils; import org.apache.ignite.marshaller.jdk.JdkMarshaller; import org.apache.ignite.mxbean.IgnitionMXBean; import org.apache.ignite.plugin.segmentation.SegmentationPolicy; @@ -1278,17 +1279,21 @@ public class IgnitionEx { } /** - * Gets the grid, which is owner of current thread. An Exception is thrown if - * current thread is not an {@link IgniteThread}. + * Gets a name of the grid from thread local config, which is owner of current thread. * * @return Grid instance related to current thread * @throws IllegalArgumentException Thrown to indicate, that current thread is not an {@link IgniteThread}. */ public static IgniteKernal localIgnite() throws IllegalArgumentException { - if (Thread.currentThread() instanceof IgniteThread) + String name = U.getCurrentIgniteName(); + + if (U.isCurrentIgniteNameSet(name)) + return gridx(name); + else if (Thread.currentThread() instanceof IgniteThread) return gridx(((IgniteThread)Thread.currentThread()).getGridName()); else - throw new IllegalArgumentException("This method should be accessed under " + IgniteThread.class.getName()); + throw new IllegalArgumentException("Ignite grid name thread local must be set or" + + " this method should be accessed under " + IgniteThread.class.getName()); } /** @@ -1297,7 +1302,7 @@ public class IgnitionEx { * @param name Grid name. * @return Grid instance. */ - public static IgniteKernal gridx(@Nullable String name) { + private static IgniteKernal gridx(@Nullable String name) { IgniteNamedInstance grid = name != null ? grids.get(name) : dfltGrid; IgniteKernal res; @@ -1929,6 +1934,8 @@ public class IgnitionEx { marsh = new BinaryMarshaller(); } + MarshallerUtils.setNodeName(marsh, cfg.getGridName()); + myCfg.setMarshaller(marsh); if (myCfg.getPeerClassLoadingLocalClassPathExclude() == null) http://git-wip-us.apache.org/repos/asf/ignite/blob/59527c56/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryContext.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryContext.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryContext.java index 97afef1..0d66970 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryContext.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryContext.java @@ -82,6 +82,7 @@ import org.apache.ignite.internal.util.typedef.T2; import org.apache.ignite.internal.util.typedef.internal.U; import org.apache.ignite.lang.IgniteBiTuple; import org.apache.ignite.marshaller.MarshallerContext; +import org.apache.ignite.marshaller.MarshallerUtils; import org.apache.ignite.marshaller.optimized.OptimizedMarshaller; import org.jetbrains.annotations.Nullable; import org.jsr166.ConcurrentHashMap8; @@ -251,6 +252,8 @@ public class BinaryContext { assert metaHnd != null; assert igniteCfg != null; + MarshallerUtils.setNodeName(optmMarsh, igniteCfg.getGridName()); + this.metaHnd = metaHnd; this.igniteCfg = igniteCfg; this.log = log; http://git-wip-us.apache.org/repos/asf/ignite/blob/59527c56/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryMarshaller.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryMarshaller.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryMarshaller.java index 39015e5..168c61a 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryMarshaller.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryMarshaller.java @@ -24,7 +24,7 @@ import java.io.OutputStream; import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.binary.BinaryObjectException; import org.apache.ignite.configuration.IgniteConfiguration; -import org.apache.ignite.marshaller.AbstractMarshaller; +import org.apache.ignite.marshaller.AbstractNodeNameAwareMarshaller; import org.apache.ignite.marshaller.MarshallerContext; import org.jetbrains.annotations.Nullable; import sun.misc.Unsafe; @@ -33,7 +33,7 @@ import sun.misc.Unsafe; * Implementation of {@link org.apache.ignite.marshaller.Marshaller} that lets to serialize and deserialize all objects * in the binary format. */ -public class BinaryMarshaller extends AbstractMarshaller { +public class BinaryMarshaller extends AbstractNodeNameAwareMarshaller { /** */ private GridBinaryMarshaller impl; @@ -67,15 +67,6 @@ public class BinaryMarshaller extends AbstractMarshaller { } /** - * Returns currently set {@link MarshallerContext}. - * - * @return Marshaller context. - */ - public MarshallerContext getContext() { - return ctx; - } - - /** * Sets {@link BinaryContext}. *

* @param ctx Binary context. @@ -88,12 +79,12 @@ public class BinaryMarshaller extends AbstractMarshaller { } /** {@inheritDoc} */ - @Override public byte[] marshal(@Nullable Object obj) throws IgniteCheckedException { + @Override protected byte[] marshal0(@Nullable Object obj) throws IgniteCheckedException { return impl.marshal(obj); } /** {@inheritDoc} */ - @Override public void marshal(@Nullable Object obj, OutputStream out) throws IgniteCheckedException { + @Override protected void marshal0(@Nullable Object obj, OutputStream out) throws IgniteCheckedException { byte[] arr = marshal(obj); try { @@ -105,12 +96,12 @@ public class BinaryMarshaller extends AbstractMarshaller { } /** {@inheritDoc} */ - @Override public T unmarshal(byte[] bytes, @Nullable ClassLoader clsLdr) throws IgniteCheckedException { + @Override protected T unmarshal0(byte[] bytes, @Nullable ClassLoader clsLdr) throws IgniteCheckedException { return impl.deserialize(bytes, clsLdr); } /** {@inheritDoc} */ - @Override public T unmarshal(InputStream in, @Nullable ClassLoader clsLdr) throws IgniteCheckedException { + @Override protected T unmarshal0(InputStream in, @Nullable ClassLoader clsLdr) throws IgniteCheckedException { ByteArrayOutputStream buf = new ByteArrayOutputStream(); // we have to fully read the InputStream because GridBinaryMarshaller requires support of a method that http://git-wip-us.apache.org/repos/asf/ignite/blob/59527c56/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryReaderExImpl.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryReaderExImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryReaderExImpl.java index 194b1be..775f237 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryReaderExImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryReaderExImpl.java @@ -34,6 +34,7 @@ import org.apache.ignite.binary.BinaryObjectException; import org.apache.ignite.binary.BinaryRawReader; import org.apache.ignite.binary.BinaryReader; import org.apache.ignite.internal.binary.streams.BinaryInputStream; +import org.apache.ignite.internal.util.IgniteUtils; import org.apache.ignite.internal.util.typedef.internal.SB; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -1442,6 +1443,22 @@ public class BinaryReaderExImpl implements BinaryReader, BinaryRawReaderEx, Bina * @throws BinaryObjectException If failed. */ @Nullable Object deserialize() throws BinaryObjectException { + String newName = ctx.configuration().getGridName(); + String oldName = IgniteUtils.setCurrentIgniteName(newName); + + try { + return deserialize0(); + } + finally { + IgniteUtils.restoreOldIgniteName(oldName, newName); + } + } + + /** + * @return Deserialized object. + * @throws BinaryObjectException If failed. + */ + @Nullable private Object deserialize0() throws BinaryObjectException { Object obj; byte flag = in.readByte(); @@ -2050,6 +2067,13 @@ public class BinaryReaderExImpl implements BinaryReader, BinaryRawReaderEx, Bina } /** + * @return Binary context. + */ + public BinaryContext context() { + return ctx; + } + + /** * Flag. */ private enum Flag { http://git-wip-us.apache.org/repos/asf/ignite/blob/59527c56/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryWriterExImpl.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryWriterExImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryWriterExImpl.java index 9450482..21fb2bf 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryWriterExImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryWriterExImpl.java @@ -23,6 +23,7 @@ import org.apache.ignite.binary.BinaryRawWriter; import org.apache.ignite.binary.BinaryWriter; import org.apache.ignite.internal.binary.streams.BinaryHeapOutputStream; import org.apache.ignite.internal.binary.streams.BinaryOutputStream; +import org.apache.ignite.internal.util.IgniteUtils; import org.apache.ignite.internal.util.typedef.internal.A; import org.jetbrains.annotations.Nullable; @@ -138,6 +139,23 @@ public class BinaryWriterExImpl implements BinaryWriter, BinaryRawWriterEx, Obje * @throws org.apache.ignite.binary.BinaryObjectException In case of error. */ void marshal(Object obj, boolean enableReplace) throws BinaryObjectException { + String newName = ctx.configuration().getGridName(); + String oldName = IgniteUtils.setCurrentIgniteName(newName); + + try { + marshal0(obj, enableReplace); + } + finally { + IgniteUtils.restoreOldIgniteName(oldName, newName); + } + } + + /** + * @param obj Object. + * @param enableReplace Object replacing enabled flag. + * @throws org.apache.ignite.binary.BinaryObjectException In case of error. + */ + private void marshal0(Object obj, boolean enableReplace) throws BinaryObjectException { assert obj != null; Class cls = obj.getClass(); http://git-wip-us.apache.org/repos/asf/ignite/blob/59527c56/modules/core/src/main/java/org/apache/ignite/internal/client/GridClientConfiguration.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/client/GridClientConfiguration.java b/modules/core/src/main/java/org/apache/ignite/internal/client/GridClientConfiguration.java index e9d2958..cac1bb3 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/client/GridClientConfiguration.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/client/GridClientConfiguration.java @@ -157,7 +157,6 @@ public class GridClientConfiguration { tcpNoDelay = cfg.isTcpNoDelay(); topRefreshFreq = cfg.getTopologyRefreshFrequency(); daemon = cfg.isDaemon(); - marshaller = cfg.getMarshaller(); setDataConfigurations(cfg.getDataConfigurations()); } http://git-wip-us.apache.org/repos/asf/ignite/blob/59527c56/modules/core/src/main/java/org/apache/ignite/internal/cluster/ClusterGroupAdapter.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/cluster/ClusterGroupAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/cluster/ClusterGroupAdapter.java index c664f1e..648c86d 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/cluster/ClusterGroupAdapter.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/cluster/ClusterGroupAdapter.java @@ -727,7 +727,7 @@ public class ClusterGroupAdapter implements ClusterGroupEx, Externalizable { */ protected Object readResolve() throws ObjectStreamException { try { - IgniteKernal g = IgnitionEx.gridx(gridName); + IgniteKernal g = IgnitionEx.localIgnite(); return ids != null ? new ClusterGroupAdapter(g.context(), subjId, ids) : new ClusterGroupAdapter(g.context(), subjId, p); http://git-wip-us.apache.org/repos/asf/ignite/blob/59527c56/modules/core/src/main/java/org/apache/ignite/internal/cluster/ClusterNodeLocalMapImpl.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/cluster/ClusterNodeLocalMapImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/cluster/ClusterNodeLocalMapImpl.java index 4890231..3147b12 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/cluster/ClusterNodeLocalMapImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/cluster/ClusterNodeLocalMapImpl.java @@ -26,6 +26,7 @@ import java.io.ObjectStreamException; import java.util.concurrent.ConcurrentMap; import org.apache.ignite.IgniteCluster; import org.apache.ignite.internal.GridKernalContext; +import org.apache.ignite.internal.IgniteKernal; import org.apache.ignite.internal.IgnitionEx; import org.apache.ignite.internal.util.typedef.internal.S; import org.apache.ignite.internal.util.typedef.internal.U; @@ -89,7 +90,7 @@ public class ClusterNodeLocalMapImpl extends ConcurrentHashMap8 impl */ protected Object readResolve() throws ObjectStreamException { try { - return IgnitionEx.gridx(stash.get()).cluster().nodeLocalMap(); + return IgnitionEx.localIgnite().cluster().nodeLocalMap(); } catch (IllegalStateException e) { throw U.withCause(new InvalidObjectException(e.getMessage()), e); http://git-wip-us.apache.org/repos/asf/ignite/blob/59527c56/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java index 1ac94a4..fe6bb1b 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java @@ -4639,7 +4639,7 @@ public abstract class GridCacheAdapter implements IgniteInternalCache t = stash.get(); - return IgnitionEx.gridx(t.get1()).cachex(t.get2()); + return IgnitionEx.localIgnite().cachex(t.get2()); } catch (IllegalStateException e) { throw U.withCause(new InvalidObjectException(e.getMessage()), e); http://git-wip-us.apache.org/repos/asf/ignite/blob/59527c56/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheContext.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheContext.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheContext.java index ba923df..dc9c766 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheContext.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheContext.java @@ -2019,7 +2019,7 @@ public class GridCacheContext implements Externalizable { try { IgniteBiTuple t = stash.get(); - IgniteKernal grid = IgnitionEx.gridx(t.get1()); + IgniteKernal grid = IgnitionEx.localIgnite(); GridCacheAdapter cache = grid.internalCache(t.get2()); http://git-wip-us.apache.org/repos/asf/ignite/blob/59527c56/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java index e104b87..6640db8 100755 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java @@ -116,6 +116,7 @@ import org.apache.ignite.lang.IgnitePredicate; import org.apache.ignite.lang.IgniteUuid; import org.apache.ignite.lifecycle.LifecycleAware; import org.apache.ignite.marshaller.Marshaller; +import org.apache.ignite.marshaller.MarshallerUtils; import org.apache.ignite.marshaller.jdk.JdkMarshaller; import org.apache.ignite.spi.IgniteNodeValidationResult; import org.jetbrains.annotations.Nullable; @@ -185,7 +186,7 @@ public class GridCacheProcessor extends GridProcessorAdapter { private IdentityHashMap sesHolders = new IdentityHashMap<>(); /** Must use JDK marshaller since it is used by discovery to fire custom events. */ - private Marshaller marshaller = new JdkMarshaller(); + private final Marshaller marshaller; /** Count down latch for caches. */ private final CountDownLatch cacheStartedLatch = new CountDownLatch(1); @@ -205,6 +206,8 @@ public class GridCacheProcessor extends GridProcessorAdapter { caches = new ConcurrentHashMap<>(); jCacheProxies = new ConcurrentHashMap<>(); stopSeq = new LinkedList<>(); + + marshaller = MarshallerUtils.jdkMarshaller(ctx.gridName()); } /** http://git-wip-us.apache.org/repos/asf/ignite/blob/59527c56/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java b/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java index a480b87..cdaeab1 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java @@ -254,7 +254,7 @@ import static org.apache.ignite.internal.util.GridUnsafe.staticFieldOffset; /** * Collection of utility methods used throughout the system. */ -@SuppressWarnings({"UnusedReturnValue", "UnnecessaryFullyQualifiedName"}) +@SuppressWarnings({"UnusedReturnValue", "UnnecessaryFullyQualifiedName", "RedundantStringConstructorCall"}) public abstract class IgniteUtils { /** {@code True} if {@code unsafe} should be used for array copy. */ private static final boolean UNSAFE_BYTE_ARR_CP = unsafeByteArrayCopyAvailable(); @@ -490,6 +490,16 @@ public abstract class IgniteUtils { /** Object.toString() */ private static Method toStringMtd; + /** Empty local Ignite name. */ + public static final String LOC_IGNITE_NAME_EMPTY = new String(); + + /** Local Ignite name thread local. */ + private static final ThreadLocal LOC_IGNITE_NAME = new ThreadLocal() { + @Override protected String initialValue() { + return LOC_IGNITE_NAME_EMPTY; + } + }; + /** * Initializes enterprise check. */ @@ -9612,4 +9622,52 @@ public abstract class IgniteUtils { public static > T max(T t0, T t1) { return t0.compareTo(t1) > 0 ? t0 : t1; } + + /** + * Get current Ignite name. + * + * @return Current Ignite name. + */ + @Nullable public static String getCurrentIgniteName() { + return LOC_IGNITE_NAME.get(); + } + + /** + * Check if current Ignite name is set. + * + * @param name Name to check. + * @return {@code True} if set. + */ + @SuppressWarnings("StringEquality") + public static boolean isCurrentIgniteNameSet(@Nullable String name) { + return name != LOC_IGNITE_NAME_EMPTY; + } + + /** + * Set current Ignite name. + * + * @param newName New name. + * @return Old name. + */ + @SuppressWarnings("StringEquality") + @Nullable public static String setCurrentIgniteName(@Nullable String newName) { + String oldName = LOC_IGNITE_NAME.get(); + + if (oldName != newName) + LOC_IGNITE_NAME.set(newName); + + return oldName; + } + + /** + * Restore old Ignite name. + * + * @param oldName Old name. + * @param curName Current name. + */ + @SuppressWarnings("StringEquality") + public static void restoreOldIgniteName(@Nullable String oldName, @Nullable String curName) { + if (oldName != curName) + LOC_IGNITE_NAME.set(oldName); + } } http://git-wip-us.apache.org/repos/asf/ignite/blob/59527c56/modules/core/src/main/java/org/apache/ignite/marshaller/AbstractMarshaller.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/marshaller/AbstractMarshaller.java b/modules/core/src/main/java/org/apache/ignite/marshaller/AbstractMarshaller.java index dd5bad0..6c3428e 100644 --- a/modules/core/src/main/java/org/apache/ignite/marshaller/AbstractMarshaller.java +++ b/modules/core/src/main/java/org/apache/ignite/marshaller/AbstractMarshaller.java @@ -17,12 +17,9 @@ package org.apache.ignite.marshaller; -import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.internal.util.GridByteArrayList; import org.apache.ignite.internal.util.io.GridByteArrayInputStream; import org.apache.ignite.internal.util.io.GridByteArrayOutputStream; -import org.apache.ignite.internal.util.typedef.internal.U; -import org.jetbrains.annotations.Nullable; /** * Base class for marshallers. Provides default implementations of methods @@ -37,7 +34,6 @@ public abstract class AbstractMarshaller implements Marshaller { /** Context. */ protected MarshallerContext ctx; - /** * Undeployment callback invoked when class loader is being undeployed. * @@ -47,38 +43,15 @@ public abstract class AbstractMarshaller implements Marshaller { */ public abstract void onUndeploy(ClassLoader ldr); - /** {@inheritDoc} */ - @Override public void setContext(MarshallerContext ctx) { - this.ctx = ctx; - } - - /** {@inheritDoc} */ - @Override public byte[] marshal(@Nullable Object obj) throws IgniteCheckedException { - GridByteArrayOutputStream out = null; - - try { - out = new GridByteArrayOutputStream(DFLT_BUFFER_SIZE); - - marshal(obj, out); - - return out.toByteArray(); - } - finally { - U.close(out, null); - } + /** + * @return Marshaller context. + */ + public MarshallerContext getContext() { + return ctx; } /** {@inheritDoc} */ - @Override public T unmarshal(byte[] arr, @Nullable ClassLoader clsLdr) throws IgniteCheckedException { - GridByteArrayInputStream in = null; - - try { - in = new GridByteArrayInputStream(arr, 0, arr.length); - - return unmarshal(in, clsLdr); - } - finally { - U.close(in, null); - } + @Override public void setContext(MarshallerContext ctx) { + this.ctx = ctx; } } http://git-wip-us.apache.org/repos/asf/ignite/blob/59527c56/modules/core/src/main/java/org/apache/ignite/marshaller/AbstractNodeNameAwareMarshaller.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/marshaller/AbstractNodeNameAwareMarshaller.java b/modules/core/src/main/java/org/apache/ignite/marshaller/AbstractNodeNameAwareMarshaller.java new file mode 100644 index 0000000..559ac73 --- /dev/null +++ b/modules/core/src/main/java/org/apache/ignite/marshaller/AbstractNodeNameAwareMarshaller.java @@ -0,0 +1,142 @@ +/* + * 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; + +import org.apache.ignite.IgniteCheckedException; +import org.apache.ignite.Ignition; +import org.apache.ignite.internal.util.IgniteUtils; +import org.apache.ignite.internal.util.typedef.internal.U; +import org.jetbrains.annotations.Nullable; + +import java.io.InputStream; +import java.io.OutputStream; + +/** + * Marshaller allowing for {@link Ignition#localIgnite()} calls. + */ +public abstract class AbstractNodeNameAwareMarshaller extends AbstractMarshaller { + /** Whether node name is set. */ + private volatile boolean nodeNameSet; + + /** Node name. */ + private volatile String nodeName = U.LOC_IGNITE_NAME_EMPTY; + + /** + * Set node name. + * + * @param nodeName Node name. + */ + @SuppressWarnings("unchecked") + public void nodeName(@Nullable String nodeName) { + if (!nodeNameSet) { + this.nodeName = nodeName; + + nodeNameSet = true; + } + } + + /** {@inheritDoc} */ + @Override public byte[] marshal(@Nullable Object obj) throws IgniteCheckedException { + String oldNodeName = IgniteUtils.setCurrentIgniteName(nodeName); + + try { + return marshal0(obj); + } + finally { + IgniteUtils.restoreOldIgniteName(oldNodeName, nodeName); + } + } + + /** {@inheritDoc} */ + @Override public void marshal(@Nullable Object obj, OutputStream out) throws IgniteCheckedException { + String oldNodeName = IgniteUtils.setCurrentIgniteName(nodeName); + + try { + marshal0(obj, out); + } + finally { + IgniteUtils.restoreOldIgniteName(oldNodeName, nodeName); + } + } + + /** {@inheritDoc} */ + @Override public T unmarshal(byte[] arr, @Nullable ClassLoader clsLdr) throws IgniteCheckedException { + String oldNodeName = IgniteUtils.setCurrentIgniteName(nodeName); + + try { + return unmarshal0(arr, clsLdr); + } + finally { + IgniteUtils.restoreOldIgniteName(oldNodeName, nodeName); + } + } + + /** {@inheritDoc} */ + @Override public T unmarshal(InputStream in, @Nullable ClassLoader clsLdr) throws IgniteCheckedException { + String oldNodeName = IgniteUtils.setCurrentIgniteName(nodeName); + + try { + return unmarshal0(in, clsLdr); + } + finally { + IgniteUtils.restoreOldIgniteName(oldNodeName, nodeName); + } + } + + /** + * Marshals object to the output stream. This method should not close + * given output stream. + * + * @param obj Object to marshal. + * @param out Output stream to marshal into. + * @throws IgniteCheckedException If marshalling failed. + */ + protected abstract void marshal0(@Nullable Object obj, OutputStream out) throws IgniteCheckedException; + + /** + * Marshals object to byte array. + * + * @param obj Object to marshal. + * @return Byte array. + * @throws IgniteCheckedException If marshalling failed. + */ + protected abstract byte[] marshal0(@Nullable Object obj) throws IgniteCheckedException; + + /** + * Unmarshals object from the input stream using given class loader. + * This method should not close given input stream. + * + * @param Type of unmarshalled object. + * @param in Input stream. + * @param clsLdr Class loader to use. + * @return Unmarshalled object. + * @throws IgniteCheckedException If unmarshalling failed. + */ + protected abstract T unmarshal0(InputStream in, @Nullable ClassLoader clsLdr) throws IgniteCheckedException; + + /** + * Unmarshals object from byte array using given class loader. + * + * @param Type of unmarshalled object. + * @param arr Byte array. + * @param clsLdr Class loader to use. + * @return Unmarshalled object. + * @throws IgniteCheckedException If unmarshalling failed. + */ + protected abstract T unmarshal0(byte[] arr, @Nullable ClassLoader clsLdr) throws IgniteCheckedException; +} http://git-wip-us.apache.org/repos/asf/ignite/blob/59527c56/modules/core/src/main/java/org/apache/ignite/marshaller/MarshallerUtils.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/marshaller/MarshallerUtils.java b/modules/core/src/main/java/org/apache/ignite/marshaller/MarshallerUtils.java new file mode 100644 index 0000000..9668baf --- /dev/null +++ b/modules/core/src/main/java/org/apache/ignite/marshaller/MarshallerUtils.java @@ -0,0 +1,58 @@ +/* + * 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; + +import org.apache.ignite.marshaller.jdk.JdkMarshaller; +import org.jetbrains.annotations.Nullable; + +/** + * Utility marshaller methods. + */ +public class MarshallerUtils { + /** + * Set node name to marshaller context if possible. + * + * @param marsh Marshaller instance. + * @param nodeName Node name. + */ + public static void setNodeName(Marshaller marsh, @Nullable String nodeName) { + if (marsh instanceof AbstractNodeNameAwareMarshaller) + ((AbstractNodeNameAwareMarshaller)marsh).nodeName(nodeName); + } + + /** + * Create JDK marshaller with provided node name. + * + * @param nodeName Node name. + * @return JDK marshaller. + */ + public static JdkMarshaller jdkMarshaller(@Nullable String nodeName) { + JdkMarshaller marsh = new JdkMarshaller(); + + setNodeName(new JdkMarshaller(), nodeName); + + return marsh; + } + + /** + * Private constructor. + */ + private MarshallerUtils() { + // No-op. + } +} http://git-wip-us.apache.org/repos/asf/ignite/blob/59527c56/modules/core/src/main/java/org/apache/ignite/marshaller/jdk/JdkMarshaller.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/marshaller/jdk/JdkMarshaller.java b/modules/core/src/main/java/org/apache/ignite/marshaller/jdk/JdkMarshaller.java index deb3953..7a130d3 100644 --- a/modules/core/src/main/java/org/apache/ignite/marshaller/jdk/JdkMarshaller.java +++ b/modules/core/src/main/java/org/apache/ignite/marshaller/jdk/JdkMarshaller.java @@ -23,9 +23,11 @@ import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.OutputStream; import org.apache.ignite.IgniteCheckedException; +import org.apache.ignite.internal.util.io.GridByteArrayInputStream; +import org.apache.ignite.internal.util.io.GridByteArrayOutputStream; import org.apache.ignite.internal.util.typedef.internal.S; import org.apache.ignite.internal.util.typedef.internal.U; -import org.apache.ignite.marshaller.AbstractMarshaller; +import org.apache.ignite.marshaller.AbstractNodeNameAwareMarshaller; import org.jetbrains.annotations.Nullable; /** @@ -63,9 +65,9 @@ import org.jetbrains.annotations.Nullable; *
* For information about Spring framework visit www.springframework.org */ -public class JdkMarshaller extends AbstractMarshaller { +public class JdkMarshaller extends AbstractNodeNameAwareMarshaller { /** {@inheritDoc} */ - @Override public void marshal(@Nullable Object obj, OutputStream out) throws IgniteCheckedException { + @Override protected void marshal0(@Nullable Object obj, OutputStream out) throws IgniteCheckedException { assert out != null; ObjectOutputStream objOut = null; @@ -87,8 +89,24 @@ public class JdkMarshaller extends AbstractMarshaller { } /** {@inheritDoc} */ + @Override protected byte[] marshal0(@Nullable Object obj) throws IgniteCheckedException { + GridByteArrayOutputStream out = null; + + try { + out = new GridByteArrayOutputStream(DFLT_BUFFER_SIZE); + + marshal(obj, out); + + return out.toByteArray(); + } + finally { + U.close(out, null); + } + } + + /** {@inheritDoc} */ @SuppressWarnings({"unchecked"}) - @Override public T unmarshal(InputStream in, @Nullable ClassLoader clsLdr) throws IgniteCheckedException { + @Override protected T unmarshal0(InputStream in, @Nullable ClassLoader clsLdr) throws IgniteCheckedException { assert in != null; if (clsLdr == null) @@ -115,6 +133,20 @@ public class JdkMarshaller extends AbstractMarshaller { } /** {@inheritDoc} */ + @Override protected T unmarshal0(byte[] arr, @Nullable ClassLoader clsLdr) throws IgniteCheckedException { + GridByteArrayInputStream in = null; + + try { + in = new GridByteArrayInputStream(arr, 0, arr.length); + + return unmarshal(in, clsLdr); + } + finally { + U.close(in, null); + } + } + + /** {@inheritDoc} */ @Override public void onUndeploy(ClassLoader ldr) { // No-op. } http://git-wip-us.apache.org/repos/asf/ignite/blob/59527c56/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 b3caca2..37f7acb 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 @@ -27,7 +27,7 @@ import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.IgniteException; import org.apache.ignite.IgniteSystemProperties; import org.apache.ignite.internal.util.typedef.internal.U; -import org.apache.ignite.marshaller.AbstractMarshaller; +import org.apache.ignite.marshaller.AbstractNodeNameAwareMarshaller; import org.jetbrains.annotations.Nullable; import org.jsr166.ConcurrentHashMap8; import sun.misc.Unsafe; @@ -82,7 +82,7 @@ import static org.apache.ignite.IgniteSystemProperties.IGNITE_OPTIMIZED_MARSHALL *
* For information about Spring framework visit www.springframework.org */ -public class OptimizedMarshaller extends AbstractMarshaller { +public class OptimizedMarshaller extends AbstractNodeNameAwareMarshaller { /** Use default {@code serialVersionUID} for {@link Serializable} classes. */ public static final boolean USE_DFLT_SUID = IgniteSystemProperties.getBoolean(IGNITE_OPTIMIZED_MARSHALLER_USE_DEFAULT_SUID, false); @@ -158,7 +158,7 @@ public class OptimizedMarshaller extends AbstractMarshaller { } /** {@inheritDoc} */ - @Override public void marshal(@Nullable Object obj, OutputStream out) throws IgniteCheckedException { + @Override protected void marshal0(@Nullable Object obj, OutputStream out) throws IgniteCheckedException { assert out != null; OptimizedObjectOutputStream objOut = null; @@ -181,7 +181,7 @@ public class OptimizedMarshaller extends AbstractMarshaller { } /** {@inheritDoc} */ - @Override public byte[] marshal(@Nullable Object obj) throws IgniteCheckedException { + @Override protected byte[] marshal0(@Nullable Object obj) throws IgniteCheckedException { OptimizedObjectOutputStream objOut = null; try { @@ -203,7 +203,7 @@ public class OptimizedMarshaller extends AbstractMarshaller { /** {@inheritDoc} */ @SuppressWarnings("unchecked") - @Override public T unmarshal(InputStream in, @Nullable ClassLoader clsLdr) throws IgniteCheckedException { + @Override protected T unmarshal0(InputStream in, @Nullable ClassLoader clsLdr) throws IgniteCheckedException { assert in != null; OptimizedObjectInputStream objIn = null; @@ -232,7 +232,7 @@ public class OptimizedMarshaller extends AbstractMarshaller { /** {@inheritDoc} */ @SuppressWarnings("unchecked") - @Override public T unmarshal(byte[] arr, @Nullable ClassLoader clsLdr) throws IgniteCheckedException { + @Override protected T unmarshal0(byte[] arr, @Nullable ClassLoader clsLdr) throws IgniteCheckedException { assert arr != null; OptimizedObjectInputStream objIn = null; http://git-wip-us.apache.org/repos/asf/ignite/blob/59527c56/modules/core/src/main/java/org/apache/ignite/spi/checkpoint/sharedfs/SharedFsCheckpointSpi.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/spi/checkpoint/sharedfs/SharedFsCheckpointSpi.java b/modules/core/src/main/java/org/apache/ignite/spi/checkpoint/sharedfs/SharedFsCheckpointSpi.java index 36a4ea6..092c864 100644 --- a/modules/core/src/main/java/org/apache/ignite/spi/checkpoint/sharedfs/SharedFsCheckpointSpi.java +++ b/modules/core/src/main/java/org/apache/ignite/spi/checkpoint/sharedfs/SharedFsCheckpointSpi.java @@ -35,6 +35,7 @@ import org.apache.ignite.internal.util.typedef.internal.S; import org.apache.ignite.internal.util.typedef.internal.SB; import org.apache.ignite.internal.util.typedef.internal.U; import org.apache.ignite.marshaller.Marshaller; +import org.apache.ignite.marshaller.MarshallerUtils; import org.apache.ignite.marshaller.jdk.JdkMarshaller; import org.apache.ignite.resources.IgniteInstanceResource; import org.apache.ignite.resources.LoggerResource; @@ -214,8 +215,10 @@ public class SharedFsCheckpointSpi extends IgniteSpiAdapter implements Checkpoin this.gridName = gridName; - marsh = ignite.configuration().getMarshaller() instanceof BinaryMarshaller ? new JdkMarshaller() : - ignite.configuration().getMarshaller(); + if (ignite.configuration().getMarshaller() instanceof BinaryMarshaller) + marsh = MarshallerUtils.jdkMarshaller(ignite.name()); + else + marsh = ignite.configuration().getMarshaller(); folder = getNextSharedPath(); http://git-wip-us.apache.org/repos/asf/ignite/blob/59527c56/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ClientImpl.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ClientImpl.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ClientImpl.java index 1e71888..bf7f519 100644 --- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ClientImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ClientImpl.java @@ -64,6 +64,7 @@ import org.apache.ignite.internal.util.typedef.internal.LT; import org.apache.ignite.internal.util.typedef.internal.U; import org.apache.ignite.lang.IgniteInClosure; import org.apache.ignite.lang.IgniteUuid; +import org.apache.ignite.marshaller.MarshallerUtils; import org.apache.ignite.spi.IgniteSpiContext; import org.apache.ignite.spi.IgniteSpiException; import org.apache.ignite.spi.IgniteSpiOperationTimeoutHelper; @@ -430,7 +431,7 @@ class ClientImpl extends TcpDiscoveryImpl { try { sockWriter.sendMessage(new TcpDiscoveryCustomEventMessage(getLocalNodeId(), evt, - spi.marsh.marshal(evt))); + spi.marshaller().marshal(evt))); } catch (IgniteCheckedException e) { throw new IgniteSpiException("Failed to marshal custom event: " + evt, e); @@ -684,7 +685,7 @@ class ClientImpl extends TcpDiscoveryImpl { Map attrs = new HashMap<>(node.getAttributes()); attrs.put(IgniteNodeAttributes.ATTR_SECURITY_CREDENTIALS, - spi.marsh.marshal(attrs.get(IgniteNodeAttributes.ATTR_SECURITY_CREDENTIALS))); + spi.marshaller().marshal(attrs.get(IgniteNodeAttributes.ATTR_SECURITY_CREDENTIALS))); node.setAttributes(attrs); } @@ -885,7 +886,7 @@ class ClientImpl extends TcpDiscoveryImpl { TcpDiscoveryAbstractMessage msg; try { - msg = spi.marsh.unmarshal(in, U.resolveClassLoader(spi.ignite().configuration())); + msg = spi.marshaller().unmarshal(in, U.resolveClassLoader(spi.ignite().configuration())); } catch (IgniteCheckedException e) { if (log.isDebugEnabled()) @@ -1215,7 +1216,7 @@ class ClientImpl extends TcpDiscoveryImpl { List msgs = null; while (!isInterrupted()) { - TcpDiscoveryAbstractMessage msg = spi.marsh.unmarshal(in, + TcpDiscoveryAbstractMessage msg = spi.marshaller().unmarshal(in, U.resolveClassLoader(spi.ignite().configuration())); if (msg instanceof TcpDiscoveryClientReconnectMessage) { @@ -1976,7 +1977,7 @@ class ClientImpl extends TcpDiscoveryImpl { if (node != null && node.visible()) { try { - DiscoverySpiCustomMessage msgObj = msg.message(spi.marsh, + DiscoverySpiCustomMessage msgObj = msg.message(spi.marshaller(), U.resolveClassLoader(spi.ignite().configuration())); notifyDiscovery(EVT_DISCOVERY_CUSTOM_EVT, topVer, node, allVisibleNodes(), msgObj); http://git-wip-us.apache.org/repos/asf/ignite/blob/59527c56/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ServerImpl.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ServerImpl.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ServerImpl.java index 6db1e87..135a737 100644 --- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ServerImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ServerImpl.java @@ -743,7 +743,8 @@ class ServerImpl extends TcpDiscoveryImpl { /** {@inheritDoc} */ @Override public void sendCustomEvent(DiscoverySpiCustomMessage evt) { try { - msgWorker.addMessage(new TcpDiscoveryCustomEventMessage(getLocalNodeId(), evt, spi.marsh.marshal(evt))); + msgWorker.addMessage(new TcpDiscoveryCustomEventMessage(getLocalNodeId(), evt, + spi.marshaller().marshal(evt))); } catch (IgniteCheckedException e) { throw new IgniteSpiException("Failed to marshal custom event: " + evt, e); @@ -826,7 +827,7 @@ class ServerImpl extends TcpDiscoveryImpl { Map attrs = new HashMap<>(locNode.attributes()); - attrs.put(IgniteNodeAttributes.ATTR_SECURITY_SUBJECT, spi.marsh.marshal(subj)); + attrs.put(IgniteNodeAttributes.ATTR_SECURITY_SUBJECT, spi.marshaller().marshal(subj)); attrs.remove(IgniteNodeAttributes.ATTR_SECURITY_CREDENTIALS); locNode.setAttributes(attrs); @@ -1242,7 +1243,7 @@ class ServerImpl extends TcpDiscoveryImpl { Map attrs = new HashMap<>(node.getAttributes()); attrs.put(IgniteNodeAttributes.ATTR_SECURITY_CREDENTIALS, - spi.marsh.marshal(attrs.get(IgniteNodeAttributes.ATTR_SECURITY_CREDENTIALS))); + spi.marshaller().marshal(attrs.get(IgniteNodeAttributes.ATTR_SECURITY_CREDENTIALS))); node.setAttributes(attrs); } @@ -1265,7 +1266,7 @@ class ServerImpl extends TcpDiscoveryImpl { if (credBytes == null) return null; - return spi.marsh.unmarshal(credBytes, null); + return spi.marshaller().unmarshal(credBytes, null); } catch (IgniteCheckedException e) { throw new IgniteSpiException("Failed to unmarshal node security credentials: " + node.id(), e); @@ -2379,7 +2380,7 @@ class ServerImpl extends TcpDiscoveryImpl { for (ClientMessageWorker clientMsgWorker : clientMsgWorkers.values()) { if (msgBytes == null) { try { - msgBytes = spi.marsh.marshal(msg); + msgBytes = spi.marshaller().marshal(msg); } catch (IgniteCheckedException e) { U.error(log, "Failed to marshal message: " + msg, e); @@ -2398,7 +2399,7 @@ class ServerImpl extends TcpDiscoveryImpl { if (clientMsgWorker.clientNodeId.equals(node.id())) { try { - msg0 = spi.marsh.unmarshal(msgBytes, + msg0 = spi.marshaller().unmarshal(msgBytes, U.resolveClassLoader(spi.ignite().configuration())); prepareNodeAddedMessage(msg0, clientMsgWorker.clientNodeId, null, null, null); @@ -3156,7 +3157,7 @@ class ServerImpl extends TcpDiscoveryImpl { // Stick in authentication subject to node (use security-safe attributes for copy). Map attrs = new HashMap<>(node.getAttributes()); - attrs.put(IgniteNodeAttributes.ATTR_SECURITY_SUBJECT, spi.marsh.marshal(subj)); + attrs.put(IgniteNodeAttributes.ATTR_SECURITY_SUBJECT, spi.marshaller().marshal(subj)); node.setAttributes(attrs); } @@ -3804,7 +3805,7 @@ class ServerImpl extends TcpDiscoveryImpl { else { SecurityContext subj = spi.nodeAuth.authenticateNode(node, cred); - SecurityContext coordSubj = spi.marsh.unmarshal( + SecurityContext coordSubj = spi.marshaller().unmarshal( node.attribute(IgniteNodeAttributes.ATTR_SECURITY_SUBJECT), U.resolveClassLoader(spi.ignite().configuration())); @@ -4859,7 +4860,7 @@ class ServerImpl extends TcpDiscoveryImpl { DiscoverySpiCustomMessage msgObj = null; try { - msgObj = msg.message(spi.marsh, U.resolveClassLoader(spi.ignite().configuration())); + msgObj = msg.message(spi.marshaller(), U.resolveClassLoader(spi.ignite().configuration())); } catch (Throwable e) { U.error(log, "Failed to unmarshal discovery custom message.", e); @@ -4871,7 +4872,7 @@ class ServerImpl extends TcpDiscoveryImpl { if (nextMsg != null) { try { TcpDiscoveryCustomEventMessage ackMsg = new TcpDiscoveryCustomEventMessage( - getLocalNodeId(), nextMsg, spi.marsh.marshal(nextMsg)); + getLocalNodeId(), nextMsg, spi.marshaller().marshal(nextMsg)); ackMsg.topologyVersion(msg.topologyVersion()); @@ -5005,7 +5006,7 @@ class ServerImpl extends TcpDiscoveryImpl { if (node != null) { try { - DiscoverySpiCustomMessage msgObj = msg.message(spi.marsh, + DiscoverySpiCustomMessage msgObj = msg.message(spi.marshaller(), U.resolveClassLoader(spi.ignite().configuration())); lsnr.onDiscovery(DiscoveryCustomEvent.EVT_DISCOVERY_CUSTOM_EVT, @@ -5016,7 +5017,7 @@ class ServerImpl extends TcpDiscoveryImpl { msgObj); if (msgObj.isMutable()) - msg.message(msgObj, spi.marsh.marshal(msgObj)); + msg.message(msgObj, spi.marshaller().marshal(msgObj)); } catch (Throwable e) { U.error(log, "Failed to unmarshal discovery custom message.", e); @@ -5454,7 +5455,7 @@ class ServerImpl extends TcpDiscoveryImpl { while (!isInterrupted()) { try { - TcpDiscoveryAbstractMessage msg = spi.marsh.unmarshal(in, + TcpDiscoveryAbstractMessage msg = spi.marshaller().unmarshal(in, U.resolveClassLoader(spi.ignite().configuration())); msg.senderNodeId(nodeId); @@ -5945,7 +5946,7 @@ class ServerImpl extends TcpDiscoveryImpl { byte[] msgBytes = msgT.get2(); if (msgBytes == null) - msgBytes = spi.marsh.marshal(msg); + msgBytes = spi.marshaller().marshal(msg); if (msg instanceof TcpDiscoveryClientAckResponse) { if (clientVer == null) { http://git-wip-us.apache.org/repos/asf/ignite/blob/59527c56/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java index 3d6df89..426eb8e 100644 --- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java +++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java @@ -64,6 +64,7 @@ import org.apache.ignite.lang.IgniteInClosure; import org.apache.ignite.lang.IgniteProductVersion; import org.apache.ignite.lang.IgniteUuid; import org.apache.ignite.marshaller.Marshaller; +import org.apache.ignite.marshaller.MarshallerUtils; import org.apache.ignite.marshaller.jdk.JdkMarshaller; import org.apache.ignite.resources.IgniteInstanceResource; import org.apache.ignite.resources.LoggerResource; @@ -342,7 +343,7 @@ public class TcpDiscoverySpi extends IgniteSpiAdapter implements DiscoverySpi, T protected volatile long gridStartTime; /** Marshaller. */ - protected final Marshaller marsh = new JdkMarshaller(); + private final Marshaller marsh = new JdkMarshaller(); /** Statistics. */ protected final TcpDiscoveryStatistics stats = new TcpDiscoveryStatistics(); @@ -1379,7 +1380,7 @@ public class TcpDiscoverySpi extends IgniteSpiAdapter implements DiscoverySpi, T IgniteCheckedException err = null; try { - marsh.marshal(msg, out); + marshaller().marshal(msg, out); } catch (IgniteCheckedException e) { err = e; @@ -1463,7 +1464,7 @@ public class TcpDiscoverySpi extends IgniteSpiAdapter implements DiscoverySpi, T try { sock.setSoTimeout((int)timeout); - T res = marsh.unmarshal(in == null ? sock.getInputStream() : in, + T res = marshaller().unmarshal(in == null ? sock.getInputStream() : in, U.resolveClassLoader(ignite.configuration())); return res; @@ -1681,7 +1682,7 @@ public class TcpDiscoverySpi extends IgniteSpiAdapter implements DiscoverySpi, T for (Map.Entry entry : data.entrySet()) { try { - byte[] bytes = marsh.marshal(entry.getValue()); + byte[] bytes = marshaller().marshal(entry.getValue()); data0.put(entry.getKey(), bytes); } @@ -1712,7 +1713,7 @@ public class TcpDiscoverySpi extends IgniteSpiAdapter implements DiscoverySpi, T for (Map.Entry entry : data.entrySet()) { try { - Serializable compData = marsh.unmarshal(entry.getValue(), clsLdr); + Serializable compData = marshaller().unmarshal(entry.getValue(), clsLdr); data0.put(entry.getKey(), compData); } @@ -1989,6 +1990,15 @@ public class TcpDiscoverySpi extends IgniteSpiAdapter implements DiscoverySpi, T impl.brakeConnection(); } + /** + * @return Marshaller. + */ + protected Marshaller marshaller() { + MarshallerUtils.setNodeName(marsh, gridName); + + return marsh; + } + /** {@inheritDoc} */ @Override public String toString() { return S.toString(TcpDiscoverySpi.class, this); http://git-wip-us.apache.org/repos/asf/ignite/blob/59527c56/modules/core/src/main/java/org/apache/ignite/stream/socket/SocketStreamer.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/stream/socket/SocketStreamer.java b/modules/core/src/main/java/org/apache/ignite/stream/socket/SocketStreamer.java index 21204c7..a5b89e4 100644 --- a/modules/core/src/main/java/org/apache/ignite/stream/socket/SocketStreamer.java +++ b/modules/core/src/main/java/org/apache/ignite/stream/socket/SocketStreamer.java @@ -35,7 +35,8 @@ import org.apache.ignite.internal.util.nio.GridNioServerListenerAdapter; import org.apache.ignite.internal.util.nio.GridNioSession; import org.apache.ignite.internal.util.typedef.F; import org.apache.ignite.internal.util.typedef.internal.A; -import org.apache.ignite.marshaller.jdk.JdkMarshaller; +import org.apache.ignite.marshaller.Marshaller; +import org.apache.ignite.marshaller.MarshallerUtils; import org.apache.ignite.stream.StreamAdapter; import org.apache.ignite.stream.StreamTupleExtractor; import org.jetbrains.annotations.Nullable; @@ -173,7 +174,7 @@ public class SocketStreamer extends StreamAdapter { new GridDelimitedParser(delim, directMode); if (converter == null) - converter = new DefaultConverter<>(); + converter = new DefaultConverter<>(getIgnite().name()); GridNioFilter codec = new GridNioCodecFilter(parser, log, directMode); @@ -216,12 +217,21 @@ public class SocketStreamer extends StreamAdapter { */ private static class DefaultConverter implements SocketMessageConverter { /** Marshaller. */ - private static final JdkMarshaller MARSH = new JdkMarshaller(); + private final Marshaller marsh; + + /** + * Constructor. + * + * @param gridName Grid name. + */ + private DefaultConverter(@Nullable String gridName) { + marsh = MarshallerUtils.jdkMarshaller(gridName); + } /** {@inheritDoc} */ @Override public T convert(byte[] msg) { try { - return MARSH.unmarshal(msg, null); + return marsh.unmarshal(msg, null); } catch (IgniteCheckedException e) { throw new IgniteException(e); http://git-wip-us.apache.org/repos/asf/ignite/blob/59527c56/modules/core/src/test/java/org/apache/ignite/internal/ClusterGroupSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/ClusterGroupSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/ClusterGroupSelfTest.java index 18eb3b7..9c74bd8 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/ClusterGroupSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/ClusterGroupSelfTest.java @@ -211,7 +211,7 @@ public class ClusterGroupSelfTest extends ClusterGroupAbstractTest { * @throws Exception If failed. */ public void testAgeClusterGroupSerialization() throws Exception { - Marshaller marshaller = getConfiguration().getMarshaller(); + Marshaller marshaller = ignite.configuration().getMarshaller(); ClusterGroup grp = ignite.cluster().forYoungest(); ClusterNode node = grp.node(); http://git-wip-us.apache.org/repos/asf/ignite/blob/59527c56/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridLocalIgniteSerializationTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridLocalIgniteSerializationTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridLocalIgniteSerializationTest.java new file mode 100644 index 0000000..9737d12 --- /dev/null +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridLocalIgniteSerializationTest.java @@ -0,0 +1,378 @@ +/* + * 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.internal.processors.cache; + +import org.apache.ignite.Ignite; +import org.apache.ignite.IgniteCache; +import org.apache.ignite.Ignition; +import org.apache.ignite.binary.BinaryObjectException; +import org.apache.ignite.binary.BinaryReader; +import org.apache.ignite.binary.BinaryWriter; +import org.apache.ignite.binary.Binarylizable; +import org.apache.ignite.configuration.IgniteConfiguration; +import org.apache.ignite.internal.binary.BinaryMarshaller; +import org.apache.ignite.internal.util.typedef.internal.U; +import org.apache.ignite.marshaller.AbstractNodeNameAwareMarshaller; +import org.apache.ignite.testframework.GridTestUtils; +import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest; + +import java.io.Externalizable; +import java.io.IOException; +import java.io.ObjectInput; +import java.io.ObjectInputStream; +import java.io.ObjectOutput; +import java.io.ObjectOutputStream; +import java.io.Serializable; +import java.util.concurrent.Callable; + +/** + * Test for local Ignite instance processing during serialization/deserialization. + */ +public class GridLocalIgniteSerializationTest extends GridCommonAbstractTest { + /** */ + private static final String CACHE_NAME = "cache_name"; + + /** {@inheritDoc} */ + @Override protected IgniteConfiguration getConfiguration(final String gridName) throws Exception { + final IgniteConfiguration cfg = super.getConfiguration(gridName); + + if (gridName != null && gridName.startsWith("binary")) + cfg.setMarshaller(new BinaryMarshaller()); + + return cfg; + } + + /** + * Test that calling {@link Ignition#localIgnite()} + * is safe for binary marshaller. + * + * @throws Exception If failed. + */ + public void testPutGetSimple() throws Exception { + checkPutGet(new SimpleTestObject("one"), null); + } + + /** + * @throws Exception If failed. + */ + public void testPutGetSerializable() throws Exception { + checkPutGet(new SerializableTestObject("test"), null); + } + + /** + * @throws Exception If failed. + */ + public void testPutGetExternalizable() throws Exception { + checkPutGet(new ExternalizableTestObject("test"), null); + } + + /** + * @throws Exception If failed. + */ + public void testPutGetBinarylizable() throws Exception { + checkPutGet(new BinarylizableTestObject("test"), "binaryIgnite"); + } + + /** + * @throws Exception If failed. + */ + private void checkPutGet(final TestObject obj, final String gridName) throws Exception { + + + // Run async to emulate user thread. + GridTestUtils.runAsync(new Callable() { + @Override public Object call() throws Exception { + try (final Ignite ignite = startGrid(gridName)) { + if (ignite.configuration().getMarshaller() instanceof AbstractNodeNameAwareMarshaller) { + final IgniteCache cache = ignite.getOrCreateCache(CACHE_NAME); + + assertNull(obj.ignite()); + + cache.put(1, obj); + + assertNotNull(obj.ignite()); + + final TestObject loadedObj = cache.get(1); + + assertNotNull(loadedObj.ignite()); + + assertEquals(obj, loadedObj); + } + } + + return null; + } + }).get(); + } + + /** + * + */ + private interface TestObject { + /** + * @return Ignite instance. + */ + Ignite ignite(); + } + + /** + * Test object. + */ + private static class SimpleTestObject implements TestObject { + /** */ + private final String val; + + /** */ + private transient Ignite ignite; + + /** */ + private SimpleTestObject(final String val) { + this.val = val; + } + + /** + * @return Object. + */ + @SuppressWarnings("unused") + private Object readResolve() { + ignite = Ignition.localIgnite(); + + return this; + } + + /** + * @return Object. + */ + @SuppressWarnings("unused") + private Object writeReplace() { + ignite = Ignition.localIgnite(); + + return this; + } + + /** */ + @Override public boolean equals(final Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + final SimpleTestObject simpleTestObj = (SimpleTestObject) o; + + return val != null ? val.equals(simpleTestObj.val) : simpleTestObj.val == null; + + } + + /** */ + @Override public int hashCode() { + return val != null ? val.hashCode() : 0; + } + + /** {@inheritDoc} */ + @Override public Ignite ignite() { + return ignite; + } + } + + /** + * + */ + private static class SerializableTestObject implements Serializable, TestObject { + /** */ + private static final long serialVersionUID = 0L; + + /** */ + private String val; + + /** */ + private transient Ignite ignite; + + /** + * + */ + public SerializableTestObject() { + } + + /** + * @param val Value + */ + public SerializableTestObject(final String val) { + this.val = val; + } + + /** + * @param out Object output. + * @throws IOException If fail. + */ + private void writeObject(ObjectOutputStream out) throws IOException { + U.writeString(out, val); + + ignite = Ignition.localIgnite(); + } + + /** + * @param in Object input. + * @throws IOException If fail. + */ + private void readObject(ObjectInputStream in) throws IOException { + val = U.readString(in); + + ignite = Ignition.localIgnite(); + } + + /** {@inheritDoc} */ + @Override public boolean equals(final Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + final SerializableTestObject that = (SerializableTestObject) o; + + return val != null ? val.equals(that.val) : that.val == null; + + } + + /** {@inheritDoc} */ + @Override public int hashCode() { + return val != null ? val.hashCode() : 0; + } + + /** {@inheritDoc} */ + @Override public Ignite ignite() { + return ignite; + } + } + + /** + * + */ + private static class ExternalizableTestObject implements Externalizable, TestObject { + /** */ + private static final long serialVersionUID = 0L; + + /** */ + private String val; + + /** */ + private transient Ignite ignite; + + /** + * + */ + public ExternalizableTestObject() { + } + + /** + * @param val Value. + */ + public ExternalizableTestObject(final String val) { + this.val = val; + } + + /** {@inheritDoc} */ + @Override public void writeExternal(final ObjectOutput out) throws IOException { + U.writeString(out, val); + + ignite = Ignition.localIgnite(); + } + + /** {@inheritDoc} */ + @Override public void readExternal(final ObjectInput in) throws IOException, ClassNotFoundException { + val = U.readString(in); + + ignite = Ignition.localIgnite(); + } + + /** {@inheritDoc} */ + @Override public boolean equals(final Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + final ExternalizableTestObject that = (ExternalizableTestObject) o; + + return val != null ? val.equals(that.val) : that.val == null; + + } + + /** {@inheritDoc} */ + @Override public int hashCode() { + return val != null ? val.hashCode() : 0; + } + + /** {@inheritDoc} */ + @Override public Ignite ignite() { + return ignite; + } + } + + /** + * + */ + private static class BinarylizableTestObject implements Binarylizable, TestObject { + /** */ + private String val; + + /** */ + private transient Ignite ignite; + + /** + * + */ + public BinarylizableTestObject() { + } + + /** + * @param val Value. + */ + public BinarylizableTestObject(final String val) { + this.val = val; + } + + /** {@inheritDoc} */ + @Override public void writeBinary(final BinaryWriter writer) throws BinaryObjectException { + writer.rawWriter().writeString(val); + + ignite = Ignition.localIgnite(); + } + + /** {@inheritDoc} */ + @Override public void readBinary(final BinaryReader reader) throws BinaryObjectException { + val = reader.rawReader().readString(); + + ignite = Ignition.localIgnite(); + } + + /** {@inheritDoc} */ + @Override public boolean equals(final Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + final BinarylizableTestObject that = (BinarylizableTestObject) o; + + return val != null ? val.equals(that.val) : that.val == null; + + } + + /** {@inheritDoc} */ + @Override public int hashCode() { + return val != null ? val.hashCode() : 0; + } + + /** {@inheritDoc} */ + @Override public Ignite ignite() { + return ignite; + } + } +} http://git-wip-us.apache.org/repos/asf/ignite/blob/59527c56/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySelfTest.java b/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySelfTest.java index d5ea46c..035c6fe 100644 --- a/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySelfTest.java @@ -2061,7 +2061,7 @@ public class TcpDiscoverySelfTest extends GridCommonAbstractTest { if (msg instanceof TcpDiscoveryCustomEventMessage) { try { DiscoveryCustomMessage custMsg = GridTestUtils.getFieldValue( - ((TcpDiscoveryCustomEventMessage)msg).message(marsh, U.gridClassLoader()), "delegate"); + ((TcpDiscoveryCustomEventMessage)msg).message(marshaller(), U.gridClassLoader()), "delegate"); if (custMsg instanceof StartRoutineAckDiscoveryMessage) { log.info("Skip message send and stop node: " + msg); http://git-wip-us.apache.org/repos/asf/ignite/blob/59527c56/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBasicTestSuite.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBasicTestSuite.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBasicTestSuite.java index 6bb2c11..62c2eb3 100644 --- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBasicTestSuite.java +++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBasicTestSuite.java @@ -35,6 +35,7 @@ import org.apache.ignite.internal.GridStopWithCancelSelfTest; import org.apache.ignite.internal.IgniteSlowClientDetectionSelfTest; import org.apache.ignite.internal.MarshallerContextLockingSelfTest; import org.apache.ignite.internal.processors.affinity.GridAffinityProcessorRendezvousSelfTest; +import org.apache.ignite.internal.processors.cache.GridLocalIgniteSerializationTest; import org.apache.ignite.internal.processors.cache.GridProjectionForCachesOnDaemonNodeSelfTest; import org.apache.ignite.internal.processors.cache.IgniteDaemonNodeMarshallerCacheTest; import org.apache.ignite.internal.processors.cache.IgniteMarshallerCacheConcurrentReadWriteTest; @@ -125,6 +126,7 @@ public class IgniteBasicTestSuite extends TestSuite { GridTestUtils.addTestIfNeeded(suite, IgniteDaemonNodeMarshallerCacheTest.class, ignoredTests); suite.addTestSuite(IgniteMarshallerCacheConcurrentReadWriteTest.class); suite.addTestSuite(GridNodeMetricsLogSelfTest.class); + suite.addTestSuite(GridLocalIgniteSerializationTest.class); suite.addTestSuite(IgniteExceptionInNioWorkerSelfTest.class);