# IGNITE-709 Bug fix: client with wrong Ignite version got "Join timeout" 
instead of correct exception


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

Branch: refs/heads/ignite-23
Commit: ecf34cae4157c28a5979120072cd3c1f6a213be7
Parents: a48dd26
Author: sevdokimov <sevdoki...@gridgain.com>
Authored: Tue May 19 20:07:32 2015 +0300
Committer: sevdokimov <sevdoki...@gridgain.com>
Committed: Tue May 19 20:07:32 2015 +0300

----------------------------------------------------------------------
 .../discovery/tcp/TcpClientDiscoverySpi.java    |  6 +-
 .../spi/discovery/tcp/TcpDiscoverySpi.java      | 23 +++--
 .../internal/GridReleaseTypeSelfTest.java       | 92 ++++++++++++++------
 3 files changed, 78 insertions(+), 43 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/ecf34cae/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpClientDiscoverySpi.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpClientDiscoverySpi.java
 
b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpClientDiscoverySpi.java
index 9a0a460..7097e1b 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpClientDiscoverySpi.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpClientDiscoverySpi.java
@@ -1499,7 +1499,11 @@ public class TcpClientDiscoverySpi extends 
TcpDiscoverySpiAdapter implements Tcp
          * Router want to ping this client.
          */
         private void processPingRequest() {
-            sockWriter.sendMessage(new 
TcpDiscoveryPingResponse(getLocalNodeId()));
+            TcpDiscoveryPingResponse res = new 
TcpDiscoveryPingResponse(getLocalNodeId());
+
+            res.client(true);
+
+            sockWriter.sendMessage(res);
         }
 
         /**

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/ecf34cae/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 1a8e626..f80f00f 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
@@ -2654,9 +2654,6 @@ public class TcpDiscoverySpi extends 
TcpDiscoverySpiAdapter implements TcpDiscov
             else if (msg instanceof TcpDiscoveryClientPingRequest)
                 processClientPingRequest((TcpDiscoveryClientPingRequest)msg);
 
-            else if (msg instanceof TcpDiscoveryPingResponse)
-                processPingResponse((TcpDiscoveryPingResponse)msg);
-
             else
                 assert false : "Unknown message type: " + 
msg.getClass().getSimpleName();
 
@@ -4516,16 +4513,6 @@ public class TcpDiscoverySpi extends 
TcpDiscoverySpiAdapter implements TcpDiscov
         /**
          * @param msg Message.
          */
-        private void processPingResponse(final TcpDiscoveryPingResponse msg) {
-            ClientMessageWorker clientWorker = 
clientMsgWorkers.get(msg.creatorNodeId());
-
-            if (clientWorker != null)
-                clientWorker.pingResult(true);
-        }
-
-        /**
-         * @param msg Message.
-         */
         private void processCustomMessage(TcpDiscoveryCustomEventMessage msg) {
             if (isLocalNodeCoordinator()) {
                 boolean sndNext;
@@ -5065,6 +5052,16 @@ public class TcpDiscoverySpi extends 
TcpDiscoverySpiAdapter implements TcpDiscov
 
                             continue;
                         }
+                        if (msg instanceof TcpDiscoveryPingResponse) {
+                            assert msg.client() : msg;
+
+                            ClientMessageWorker clientWorker = 
clientMsgWorkers.get(msg.creatorNodeId());
+
+                            if (clientWorker != null)
+                                clientWorker.pingResult(true);
+
+                            continue;
+                        }
 
                         msgWorker.addMessage(msg);
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/ecf34cae/modules/core/src/test/java/org/apache/ignite/internal/GridReleaseTypeSelfTest.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/GridReleaseTypeSelfTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/GridReleaseTypeSelfTest.java
index 284aa0c..4733ae5 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/GridReleaseTypeSelfTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/GridReleaseTypeSelfTest.java
@@ -27,7 +27,6 @@ import org.apache.ignite.testframework.junits.common.*;
 
 import java.io.*;
 import java.util.*;
-import java.util.concurrent.atomic.*;
 
 /**
  * Test grids starting with non compatible release types.
@@ -36,32 +35,36 @@ public class GridReleaseTypeSelfTest extends 
GridCommonAbstractTest {
     /** IP finder. */
     private static final TcpDiscoveryIpFinder IP_FINDER = new 
TcpDiscoveryVmIpFinder(true);
 
-    /** Counter. */
-    private static final AtomicInteger cnt = new AtomicInteger();
-
     /** */
-    private String firstNodeVer;
+    private String nodeVer;
 
     /** */
-    private String secondNodeVer;
+    private boolean clientMode;
 
     /** {@inheritDoc} */
     @Override protected IgniteConfiguration getConfiguration(String gridName) 
throws Exception {
         IgniteConfiguration cfg = super.getConfiguration(gridName);
 
-        final int idx = cnt.getAndIncrement();
+        TcpDiscoverySpiAdapter discoSpi;
 
-        // Override node attributes in discovery spi.
-        TcpDiscoverySpi discoSpi = new TcpDiscoverySpi() {
-            @Override public void setNodeAttributes(Map<String, Object> attrs, 
IgniteProductVersion ver) {
-                super.setNodeAttributes(attrs, ver);
+        if (clientMode) {
+            discoSpi = new TcpClientDiscoverySpi() {
+                @Override public void setNodeAttributes(Map<String, Object> 
attrs, IgniteProductVersion ver) {
+                    super.setNodeAttributes(attrs, ver);
 
-                if (idx % 2 == 0)
-                    attrs.put(IgniteNodeAttributes.ATTR_BUILD_VER, 
firstNodeVer);
-                else
-                    attrs.put(IgniteNodeAttributes.ATTR_BUILD_VER, 
secondNodeVer);
-            }
-        };
+                    attrs.put(IgniteNodeAttributes.ATTR_BUILD_VER, nodeVer);
+                }
+            };
+        }
+        else {
+            discoSpi = new TcpDiscoverySpi() {
+                @Override public void setNodeAttributes(Map<String, Object> 
attrs, IgniteProductVersion ver) {
+                    super.setNodeAttributes(attrs, ver);
+
+                    attrs.put(IgniteNodeAttributes.ATTR_BUILD_VER, nodeVer);
+                }
+            };
+        }
 
         discoSpi.setIpFinder(IP_FINDER);
 
@@ -70,15 +73,27 @@ public class GridReleaseTypeSelfTest extends 
GridCommonAbstractTest {
         return cfg;
     }
 
+    /** {@inheritDoc} */
+    @Override protected void afterTest() throws Exception {
+        clientMode = false;
+
+        stopAllGrids();
+    }
+
     /**
      * @throws Exception If failed.
      */
     public void testOsEditionDoesNotSupportRollingUpdates() throws Exception {
-        firstNodeVer = "1.0.0";
-        secondNodeVer = "1.0.1";
+        nodeVer = "1.0.0";
+
+        startGrid(0);
 
         try {
-            startGrids(2);
+            nodeVer = "1.0.1";
+
+            startGrid(1);
+
+            fail("Exception has not been thrown.");
         }
         catch (IgniteCheckedException e) {
             StringWriter errors = new StringWriter();
@@ -87,17 +102,36 @@ public class GridReleaseTypeSelfTest extends 
GridCommonAbstractTest {
 
             String stackTrace = errors.toString();
 
-            assertTrue(
-                "Caught exception does not contain specified string.",
-                stackTrace.contains("Local node and remote node have different 
version numbers")
-            );
-
-            return;
+            if (!stackTrace.contains("Local node and remote node have 
different version numbers"))
+                throw e;
         }
-        finally {
-            stopAllGrids();
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testOsEditionDoesNotSupportRollingUpdatesClientMode() throws 
Exception {
+        nodeVer = "1.0.0";
+
+        startGrid(0);
+
+        try {
+            nodeVer = "1.0.1";
+            clientMode = true;
+
+            startGrid(1);
+
+            fail("Exception has not been thrown.");
         }
+        catch (IgniteCheckedException e) {
+            StringWriter errors = new StringWriter();
+
+            e.printStackTrace(new PrintWriter(errors));
 
-        fail("Exception has not been thrown.");
+            String stackTrace = errors.toString();
+
+            if (!stackTrace.contains("Local node and remote node have 
different version numbers"))
+                throw e;
+        }
     }
 }

Reply via email to