You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by jb...@apache.org on 2015/05/12 17:57:06 UTC

[3/6] cassandra git commit: Fix ReconnectableSnitch reconnecting to peers during upgrade

Fix ReconnectableSnitch reconnecting to peers during upgrade


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

Branch: refs/heads/trunk
Commit: a7cae3255cc7a8014804c7642eaefc6f35099a3e
Parents: 15235ee
Author: Blake Eggleston <bd...@gmail.com>
Authored: Tue May 12 10:55:43 2015 -0500
Committer: Jonathan Ellis <jb...@apache.org>
Committed: Tue May 12 10:56:04 2015 -0500

----------------------------------------------------------------------
 CHANGES.txt                                           |  1 +
 .../cassandra/locator/ReconnectableSnitchHelper.java  |  1 -
 .../apache/cassandra/net/IncomingTcpConnection.java   | 14 ++++----------
 3 files changed, 5 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/a7cae325/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index d3715c4..685b945 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
 2.0.15:
+ * Fix ReconnectableSnitch reconnecting to peers during upgrade (CASSANDRA-6702)
  * Include keyspace and table name in error log for collections over the size
    limit (CASSANDRA-9286)
  * Avoid potential overlap in LCS with single-partition sstables (CASSANDRA-9322)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/a7cae325/src/java/org/apache/cassandra/locator/ReconnectableSnitchHelper.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/locator/ReconnectableSnitchHelper.java b/src/java/org/apache/cassandra/locator/ReconnectableSnitchHelper.java
index e5dbdeb..3277af7 100644
--- a/src/java/org/apache/cassandra/locator/ReconnectableSnitchHelper.java
+++ b/src/java/org/apache/cassandra/locator/ReconnectableSnitchHelper.java
@@ -60,7 +60,6 @@ public class ReconnectableSnitchHelper implements IEndpointStateChangeSubscriber
     private void reconnect(InetAddress publicAddress, InetAddress localAddress)
     {
         if (snitch.getDatacenter(publicAddress).equals(localDc)
-                && MessagingService.instance().getVersion(publicAddress) == MessagingService.current_version
                 && !MessagingService.instance().getConnectionPool(publicAddress).endPoint().equals(localAddress))
         {
             MessagingService.instance().getConnectionPool(publicAddress).reset(localAddress);

http://git-wip-us.apache.org/repos/asf/cassandra/blob/a7cae325/src/java/org/apache/cassandra/net/IncomingTcpConnection.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/net/IncomingTcpConnection.java b/src/java/org/apache/cassandra/net/IncomingTcpConnection.java
index b61e82e..4817c75 100644
--- a/src/java/org/apache/cassandra/net/IncomingTcpConnection.java
+++ b/src/java/org/apache/cassandra/net/IncomingTcpConnection.java
@@ -119,11 +119,14 @@ public class IncomingTcpConnection extends Thread implements Closeable
     {
         // handshake (true) endpoint versions
         DataOutputStream out = new DataOutputStream(socket.getOutputStream());
+        // if this version is < the MS version the other node is trying
+        // to connect with, the other node will disconnect
         out.writeInt(MessagingService.current_version);
         out.flush();
         DataInputStream in = new DataInputStream(socket.getInputStream());
         int maxVersion = in.readInt();
-
+        // outbound side will reconnect if necessary to upgrade version
+        assert version <= MessagingService.current_version;
         from = CompactEndpointSerializationHelper.deserialize(in);
         // record the (true) version of the endpoint
         MessagingService.instance().setVersion(from, maxVersion);
@@ -139,15 +142,6 @@ public class IncomingTcpConnection extends Thread implements Closeable
             in = new DataInputStream(new BufferedInputStream(socket.getInputStream(), 4096));
         }
 
-        if (version > MessagingService.current_version)
-        {
-            // save the endpoint so gossip will reconnect to it
-            Gossiper.instance.addSavedEndpoint(from);
-            logger.info("Received messages from newer protocol version {}. Ignoring", version);
-            return;
-        }
-        // outbound side will reconnect if necessary to upgrade version
-
         while (true)
         {
             MessagingService.validateMagic(in.readInt());