sprint-2 - Marshaller fix

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

Branch: refs/heads/ignite-437-sqltests
Commit: 756f3e6e448366de300b63b476a3f7a566101585
Parents: 23ea878
Author: Valentin Kulichenko <vkuliche...@gridgain.com>
Authored: Thu Mar 26 21:30:39 2015 -0700
Committer: Valentin Kulichenko <vkuliche...@gridgain.com>
Committed: Thu Mar 26 21:30:39 2015 -0700

----------------------------------------------------------------------
 .../internal/MarshallerContextAdapter.java      |  5 +-
 .../ignite/internal/MarshallerContextImpl.java  | 62 +++++++++-----------
 .../ignite/marshaller/MarshallerContext.java    |  5 +-
 .../optimized/OptimizedMarshallerUtils.java     |  2 +-
 4 files changed, 35 insertions(+), 39 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/756f3e6e/modules/core/src/main/java/org/apache/ignite/internal/MarshallerContextAdapter.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/MarshallerContextAdapter.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/MarshallerContextAdapter.java
index 5bd625b..08f2137 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/MarshallerContextAdapter.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/MarshallerContextAdapter.java
@@ -17,6 +17,7 @@
 
 package org.apache.ignite.internal;
 
+import org.apache.ignite.*;
 import org.apache.ignite.internal.util.typedef.internal.*;
 import org.apache.ignite.marshaller.*;
 import org.jsr166.*;
@@ -80,7 +81,7 @@ public abstract class MarshallerContextAdapter implements 
MarshallerContext {
     }
 
     /** {@inheritDoc} */
-    @Override public boolean registerClass(int id, Class cls) {
+    @Override public boolean registerClass(int id, Class cls) throws 
IgniteCheckedException {
         boolean registered = true;
 
         if (!map.containsKey(id)) {
@@ -118,7 +119,7 @@ public abstract class MarshallerContextAdapter implements 
MarshallerContext {
      * @param clsName Class name.
      * @return Whether class name was registered.
      */
-    protected abstract boolean registerClassName(int id, String clsName);
+    protected abstract boolean registerClassName(int id, String clsName) 
throws IgniteCheckedException;
 
     /**
      * Gets class name by type ID.

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/756f3e6e/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 4947dad..fa2ae16 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
@@ -27,9 +27,6 @@ import java.util.concurrent.*;
  * Marshaller context implementation.
  */
 public class MarshallerContextImpl extends MarshallerContextAdapter {
-    /** Class names cache update retries count. */
-    private static final int CACHE_UPDATE_RETRIES_CNT = 5;
-
     /** */
     private final CountDownLatch latch = new CountDownLatch(1);
 
@@ -39,6 +36,9 @@ public class MarshallerContextImpl extends 
MarshallerContextAdapter {
     /** */
     private volatile GridCacheAdapter<Integer, String> cache;
 
+    /** Non-volatile on purpose. */
+    private int failedCnt;
+
     /**
      * @param ctx Kernal context.
      */
@@ -53,44 +53,36 @@ public class MarshallerContextImpl extends 
MarshallerContextAdapter {
     }
 
     /** {@inheritDoc} */
-    @Override protected boolean registerClassName(int id, String clsName) {
+    @Override protected boolean registerClassName(int id, String clsName) 
throws IgniteCheckedException {
+        GridCacheAdapter<Integer, String> cache0 = cache;
+
+        if (cache0 == null)
+            return false;
+
+        String old;
+
         try {
-            GridCacheAdapter<Integer, String> cache0 = cache;
+            old = cache0.tryPutIfAbsent(id, clsName);
 
-            if (cache0 == null)
-                return false;
+            if (old != null && !old.equals(clsName)) {
+                U.warn(log, "Type ID collision occurred in marshaller (this 
can cause performance degradation). " +
+                    "Use marshaller configuration to resolve it [id=" + id + 
", clsName1=" + clsName +
+                    "clsName2=" + old + ']');
 
-            for (int i = 0; i < CACHE_UPDATE_RETRIES_CNT; i++) {
-                try {
-                    String old;
-
-                    try {
-                        old = cache0.tryPutIfAbsent(id, clsName);
-                    }
-                    catch (GridCacheTryPutFailedException ignored) {
-                        return false;
-                    }
-
-                    if (old != null && !old.equals(clsName))
-                        throw new IgniteException("Type ID collision occurred 
in OptimizedMarshaller. Use " +
-                            "OptimizedMarshallerIdMapper to resolve it [id=" + 
id + ", clsName1=" + clsName +
-                            "clsName2=" + old + ']');
-
-                    break;
-                }
-                catch (IgniteCheckedException e) {
-                    if (i == CACHE_UPDATE_RETRIES_CNT - 1)
-                        throw e;
-                    else
-                        U.error(log, "Failed to update marshaller cache, will 
retry: " + e);
-                }
+                return false;
             }
+
+            failedCnt = 0;
+
+            return true;
         }
-        catch (IgniteCheckedException e) {
-            throw U.convertException(e);
-        }
+        catch (CachePartialUpdateCheckedException | 
GridCacheTryPutFailedException e) {
+            if (failedCnt++ >= 10)
+                U.warn(log, e, "Marshaller failed to register class for more 
than 10 times " +
+                    "(this can cause performance degradation).");
 
-        return true;
+            return false;
+        }
     }
 
     /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/756f3e6e/modules/core/src/main/java/org/apache/ignite/marshaller/MarshallerContext.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/marshaller/MarshallerContext.java
 
b/modules/core/src/main/java/org/apache/ignite/marshaller/MarshallerContext.java
index 9b81626..393a35b 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/marshaller/MarshallerContext.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/marshaller/MarshallerContext.java
@@ -17,6 +17,8 @@
 
 package org.apache.ignite.marshaller;
 
+import org.apache.ignite.*;
+
 /**
  * Marshaller context.
  */
@@ -27,8 +29,9 @@ public interface MarshallerContext {
      * @param id Type ID.
      * @param cls Class.
      * @return Whether class was registered.
+     * @throws IgniteCheckedException In case of error.
      */
-    public boolean registerClass(int id, Class cls);
+    public boolean registerClass(int id, Class cls) throws 
IgniteCheckedException;
 
     /**
      * Gets class for provided type ID.

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/756f3e6e/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerUtils.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerUtils.java
 
b/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerUtils.java
index 7f68fbd..d5caa9d 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerUtils.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerUtils.java
@@ -191,7 +191,7 @@ class OptimizedMarshallerUtils {
             try {
                 registered = ctx.registerClass(typeId, cls);
             }
-            catch (Exception e) {
+            catch (IgniteCheckedException e) {
                 throw new IOException("Failed to register class: " + 
cls.getName(), e);
             }
 

Reply via email to