# IGNITE-141 - Marshallers refactoring

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

Branch: refs/heads/ignite-141
Commit: 39c7f542dac62efc3922167671295b3f49b9bc5e
Parents: 8c0875f
Author: Valentin Kulichenko <vkuliche...@gridgain.com>
Authored: Tue Mar 3 12:28:45 2015 -0800
Committer: Valentin Kulichenko <vkuliche...@gridgain.com>
Committed: Tue Mar 3 12:28:45 2015 -0800

----------------------------------------------------------------------
 .../ignite/internal/GridKernalContextImpl.java  |  2 +-
 .../ignite/internal/MarshallerContextImpl.java  | 58 ++++----------------
 .../deployment/GridDeploymentLocalStore.java    |  1 -
 .../GridDeploymentPerLoaderStore.java           |  1 -
 .../GridDeploymentPerVersionStore.java          |  1 -
 .../internal/util/nio/GridNioSelfTest.java      | 18 ++++--
 .../marshaller/MarshallerContextTestImpl.java   | 17 ++++--
 7 files changed, 37 insertions(+), 61 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/39c7f542/modules/core/src/main/java/org/apache/ignite/internal/GridKernalContextImpl.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/GridKernalContextImpl.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/GridKernalContextImpl.java
index 2b83df3..8544c60 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/GridKernalContextImpl.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/GridKernalContextImpl.java
@@ -360,7 +360,7 @@ public class GridKernalContextImpl implements 
GridKernalContext, Externalizable
         this.igfsExecSvc = igfsExecSvc;
         this.restExecSvc = restExecSvc;
 
-        marshCtx = new MarshallerContextImpl(log);
+        marshCtx = new MarshallerContextImpl();
 
         try {
             spring = SPRING.create(false);

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/39c7f542/modules/core/src/main/java/org/apache/ignite/internal/MarshallerContextImpl.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/MarshallerContextImpl.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/MarshallerContextImpl.java
index 408e70d..f06896d 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/MarshallerContextImpl.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/MarshallerContextImpl.java
@@ -19,14 +19,11 @@ package org.apache.ignite.internal;
 
 import org.apache.ignite.*;
 import org.apache.ignite.internal.processors.cache.*;
-import org.apache.ignite.internal.util.typedef.*;
 import org.apache.ignite.internal.util.typedef.internal.*;
-import org.apache.ignite.lang.*;
 import org.apache.ignite.marshaller.*;
 import org.jdk8.backport.*;
 
 import java.io.*;
-import java.util.*;
 import java.util.concurrent.*;
 
 /**
@@ -37,7 +34,7 @@ public class MarshallerContextImpl implements 
MarshallerContext {
     private static final String CLS_NAMES_FILE = 
"org/apache/ignite/internal/classnames.properties";
 
     /** */
-    private final ConcurrentMap<Integer, IgniteBiTuple<Class, Boolean>> 
clsById = new ConcurrentHashMap8<>();
+    private final ConcurrentMap<Integer, String> clsNameById = new 
ConcurrentHashMap8<>();
 
     /** */
     private final CountDownLatch latch = new CountDownLatch(1);
@@ -46,9 +43,9 @@ public class MarshallerContextImpl implements 
MarshallerContext {
     private volatile GridCacheAdapter<Integer, String> cache;
 
     /**
-     * @param log Logger.
+     * Constructor.
      */
-    MarshallerContextImpl(IgniteLogger log) {
+    MarshallerContextImpl() {
         try {
             ClassLoader ldr = getClass().getClassLoader();
 
@@ -56,17 +53,8 @@ public class MarshallerContextImpl implements 
MarshallerContext {
 
             String clsName;
 
-            while ((clsName = rdr.readLine()) != null) {
-                try {
-                    Class cls = U.forName(clsName, ldr);
-
-                    clsById.put(cls.getName().hashCode(), F.t(cls, true));
-                }
-                catch (ClassNotFoundException | NoClassDefFoundError ignored) {
-                    if (log.isDebugEnabled())
-                        log.debug("Class defined in classnames.properties 
doesn't exist (ignoring): " + clsName);
-                }
-            }
+            while ((clsName = rdr.readLine()) != null)
+                clsNameById.put(clsName.hashCode(), clsName);
         }
         catch (IOException e) {
             throw new IllegalStateException("Failed to initialize marshaller 
context.", e);
@@ -84,29 +72,9 @@ public class MarshallerContextImpl implements 
MarshallerContext {
         latch.countDown();
     }
 
-    /**
-     * @param ldr Undeployed class loader.
-     */
-    public void onUndeployed(ClassLoader ldr) {
-        for (Map.Entry<Integer, IgniteBiTuple<Class, Boolean>> e : 
clsById.entrySet()) {
-            if (!e.getValue().get2() && 
ldr.equals(e.getValue().get1().getClassLoader()))
-                clsById.remove(e.getKey());
-        }
-    }
-
-    /**
-     * Clears cached classes.
-     */
-    public void clear() {
-        for (Map.Entry<Integer, IgniteBiTuple<Class, Boolean>> e : 
clsById.entrySet()) {
-            if (!e.getValue().get2())
-                clsById.remove(e.getKey());
-        }
-    }
-
     /** {@inheritDoc} */
     @Override public void registerClass(int id, Class cls) {
-        if (clsById.putIfAbsent(id, F.t(cls, false)) == null) {
+        if (clsNameById.putIfAbsent(id, cls.getName()) == null) {
             try {
                 if (cache == null)
                     U.awaitQuiet(latch);
@@ -126,14 +94,12 @@ public class MarshallerContextImpl implements 
MarshallerContext {
 
     /** {@inheritDoc} */
     @Override public Class className(int id, ClassLoader ldr) throws 
ClassNotFoundException {
-        IgniteBiTuple<Class, Boolean> t = clsById.get(id);
+        String clsName = clsNameById.get(id);
 
-        if (t == null) {
+        if (clsName == null) {
             if (cache == null)
                 U.awaitQuiet(latch);
 
-            String clsName;
-
             try {
                 clsName = cache.get(id);
             }
@@ -143,14 +109,12 @@ public class MarshallerContextImpl implements 
MarshallerContext {
 
             assert clsName != null : id;
 
-            Class cls = U.forName(clsName, ldr);
-
-            IgniteBiTuple<Class, Boolean> old = clsById.putIfAbsent(id, t = 
F.t(cls, false));
+            String old = clsNameById.putIfAbsent(id, clsName);
 
             if (old != null)
-                t = old;
+                clsName = old;
         }
 
-        return t.get1();
+        return U.forName(clsName, ldr);
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/39c7f542/modules/core/src/main/java/org/apache/ignite/internal/managers/deployment/GridDeploymentLocalStore.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/managers/deployment/GridDeploymentLocalStore.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/managers/deployment/GridDeploymentLocalStore.java
index 7657137..195621c 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/managers/deployment/GridDeploymentLocalStore.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/managers/deployment/GridDeploymentLocalStore.java
@@ -522,7 +522,6 @@ class GridDeploymentLocalStore extends 
GridDeploymentStoreAdapter {
             if (dep.obsolete()) {
                 // Resource cleanup.
                 ctx.resource().onUndeployed(dep);
-                ctx.marshallerContext().onUndeployed(ldr);
 
                 // Clear optimized marshaller's cache. If another marshaller 
is used, this is no-op.
                 OptimizedMarshaller.onUndeploy(ldr);

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/39c7f542/modules/core/src/main/java/org/apache/ignite/internal/managers/deployment/GridDeploymentPerLoaderStore.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/managers/deployment/GridDeploymentPerLoaderStore.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/managers/deployment/GridDeploymentPerLoaderStore.java
index 0d09489..7a98cbc 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/managers/deployment/GridDeploymentPerLoaderStore.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/managers/deployment/GridDeploymentPerLoaderStore.java
@@ -495,7 +495,6 @@ public class GridDeploymentPerLoaderStore extends 
GridDeploymentStoreAdapter {
 
                 ctx.cache().onUndeployed(ldr);
                 ctx.stream().onUndeployed(ldr);
-                ctx.marshallerContext().onUndeployed(ldr);
 
                 // Clear optimized marshaller's cache. If another marshaller 
is used, this is no-op.
                 OptimizedMarshaller.onUndeploy(ldr);

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/39c7f542/modules/core/src/main/java/org/apache/ignite/internal/managers/deployment/GridDeploymentPerVersionStore.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/managers/deployment/GridDeploymentPerVersionStore.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/managers/deployment/GridDeploymentPerVersionStore.java
index 6eb41aa..dc72248 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/managers/deployment/GridDeploymentPerVersionStore.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/managers/deployment/GridDeploymentPerVersionStore.java
@@ -1258,7 +1258,6 @@ public class GridDeploymentPerVersionStore extends 
GridDeploymentStoreAdapter {
 
                 ctx.cache().onUndeployed(ldr);
                 ctx.stream().onUndeployed(ldr);
-                ctx.marshallerContext().onUndeployed(ldr);
 
                 // Clear optimized marshaller's cache. If another marshaller 
is used, this is no-op.
                 OptimizedMarshaller.onUndeploy(ldr);

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/39c7f542/modules/core/src/test/java/org/apache/ignite/internal/util/nio/GridNioSelfTest.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/util/nio/GridNioSelfTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/util/nio/GridNioSelfTest.java
index 83729fc..e3baeb0 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/util/nio/GridNioSelfTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/util/nio/GridNioSelfTest.java
@@ -23,6 +23,7 @@ import org.apache.ignite.internal.util.*;
 import org.apache.ignite.internal.util.tostring.*;
 import org.apache.ignite.internal.util.typedef.*;
 import org.apache.ignite.internal.util.typedef.internal.*;
+import org.apache.ignite.marshaller.*;
 import org.apache.ignite.testframework.junits.common.*;
 import org.jetbrains.annotations.*;
 
@@ -63,14 +64,19 @@ public class GridNioSelfTest extends GridCommonAbstractTest 
{
     /** Count of statistics segments. */
     private static final int STATISTICS_SEGMENTS_CNT = 10;
 
-    /** {@inheritDoc} */
-    @Override protected void afterTestsStopped() throws Exception {
-        getTestResources().stopThreads();
-    }
+    /** Marshaller. */
+    private static volatile Marshaller marsh;
 
     /** {@inheritDoc} */
     @Override protected void beforeTestsStarted() throws Exception {
         getTestResources().startThreads(true);
+
+        marsh = getTestResources().getMarshaller();
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void afterTestsStopped() throws Exception {
+        getTestResources().stopThreads();
     }
 
     /**
@@ -1115,7 +1121,7 @@ public class GridNioSelfTest extends 
GridCommonAbstractTest {
      * @throws IgniteCheckedException If failed.
      */
     private <T extends Serializable> byte[] serializeMessage(T msg) throws 
IgniteCheckedException {
-        return getTestResources().getMarshaller().marshal(msg);
+        return marsh.marshal(msg);
     }
 
     /**
@@ -1128,7 +1134,7 @@ public class GridNioSelfTest extends 
GridCommonAbstractTest {
      */
     @SuppressWarnings({"RedundantTypeArguments"})
     private <T> T deserializeMessage(byte[] data) throws 
IgniteCheckedException {
-        return getTestResources().getMarshaller().<T>unmarshal(data, 
getClass().getClassLoader());
+        return marsh.<T>unmarshal(data, getClass().getClassLoader());
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/39c7f542/modules/core/src/test/java/org/apache/ignite/marshaller/MarshallerContextTestImpl.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/test/java/org/apache/ignite/marshaller/MarshallerContextTestImpl.java
 
b/modules/core/src/test/java/org/apache/ignite/marshaller/MarshallerContextTestImpl.java
index 095ee3f..594a022 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/marshaller/MarshallerContextTestImpl.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/marshaller/MarshallerContextTestImpl.java
@@ -18,9 +18,10 @@
 package org.apache.ignite.marshaller;
 
 import org.apache.ignite.internal.util.typedef.internal.*;
+import org.jdk8.backport.*;
 
 import java.io.*;
-import java.util.*;
+import java.util.concurrent.*;
 
 /**
  * Test marshaller context.
@@ -30,7 +31,7 @@ public class MarshallerContextTestImpl implements 
MarshallerContext {
     private static final String CLS_NAMES_FILE = 
"org/apache/ignite/internal/classnames.properties";
 
     /** */
-    private final Map<Integer, Class> map = new HashMap<>();
+    private final ConcurrentMap<Integer, Class> map = new 
ConcurrentHashMap8<>();
 
     /**
      */
@@ -60,11 +61,19 @@ public class MarshallerContextTestImpl implements 
MarshallerContext {
 
     /** {@inheritDoc} */
     @Override public void registerClass(int id, Class cls) {
-        map.put(id, cls);
+        Class old = map.putIfAbsent(id, cls);
+
+        if (old != null && !cls.getName().equals(old.getName()))
+            throw new IllegalStateException("Collision [id=" + id + ", cls1=" 
+ cls.getName() +
+                ", cls2=" + old.getName() + ']');
     }
 
     /** {@inheritDoc} */
     @Override public Class className(int id, ClassLoader ldr) throws 
ClassNotFoundException {
-        return map.get(id);
+        Class cls = map.get(id);
+
+        assert cls != null;
+
+        return cls;
     }
 }

Reply via email to