You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ak...@apache.org on 2016/09/16 05:49:19 UTC
[05/50] [abbrv] ignite git commit: IGNITE-2649: Ensured correct local
Ignite instance processing during serialization and deserialization.
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 <vo...@gridgain.com>
Authored: Fri Sep 9 12:27:55 2016 +0300
Committer: vozerov-gridgain <vo...@gridgain.com>
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<String, Object> 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}.
* <p/>
* @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> T unmarshal(byte[] bytes, @Nullable ClassLoader clsLdr) throws IgniteCheckedException {
+ @Override protected <T> T unmarshal0(byte[] bytes, @Nullable ClassLoader clsLdr) throws IgniteCheckedException {
return impl.deserialize(bytes, clsLdr);
}
/** {@inheritDoc} */
- @Override public <T> T unmarshal(InputStream in, @Nullable ClassLoader clsLdr) throws IgniteCheckedException {
+ @Override protected <T> 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<K, V> extends ConcurrentHashMap8<K, V> 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<K, V> implements IgniteInternalCache<K, V
try {
IgniteBiTuple<String, String> 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<K, V> implements Externalizable {
try {
IgniteBiTuple<String, String> t = stash.get();
- IgniteKernal grid = IgnitionEx.gridx(t.get1());
+ IgniteKernal grid = IgnitionEx.localIgnite();
GridCacheAdapter<K, V> 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<CacheStore, ThreadLocal> 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<String> LOC_IGNITE_NAME = new ThreadLocal<String>() {
+ @Override protected String initialValue() {
+ return LOC_IGNITE_NAME_EMPTY;
+ }
+ };
+
/**
* Initializes enterprise check.
*/
@@ -9612,4 +9622,52 @@ public abstract class IgniteUtils {
public static <T extends Comparable<? super T>> 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> 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> 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> 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 <T> 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> T unmarshal0(InputStream in, @Nullable ClassLoader clsLdr) throws IgniteCheckedException;
+
+ /**
+ * Unmarshals object from byte array using given class loader.
+ *
+ * @param <T> 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> 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;
* <br>
* For information about Spring framework visit <a href="http://www.springframework.org/">www.springframework.org</a>
*/
-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> T unmarshal(InputStream in, @Nullable ClassLoader clsLdr) throws IgniteCheckedException {
+ @Override protected <T> 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> 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
* <br>
* For information about Spring framework visit <a href="http://www.springframework.org/">www.springframework.org</a>
*/
-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> T unmarshal(InputStream in, @Nullable ClassLoader clsLdr) throws IgniteCheckedException {
+ @Override protected <T> 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> T unmarshal(byte[] arr, @Nullable ClassLoader clsLdr) throws IgniteCheckedException {
+ @Override protected <T> 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<String, Object> 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<TcpDiscoveryAbstractMessage> 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<String, Object> 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<String, Object> 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<String, Object> 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.<byte[]>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<Integer, Serializable> 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<Integer, byte[]> 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<T, K, V> extends StreamAdapter<T, K, V> {
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<T, K, V> extends StreamAdapter<T, K, V> {
*/
private static class DefaultConverter<T> implements SocketMessageConverter<T> {
/** 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<Object>() {
+ @Override public Object call() throws Exception {
+ try (final Ignite ignite = startGrid(gridName)) {
+ if (ignite.configuration().getMarshaller() instanceof AbstractNodeNameAwareMarshaller) {
+ final IgniteCache<Integer, TestObject> 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);