1.2 nodes show 2.0 nodes as up when upgrading.
Patch by brandonwilliams, reviewed by Tyler Hobbs for CASSANDRA-6554


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

Branch: refs/heads/trunk
Commit: 4be62009490e2d736c803ea11753f9437ed2db3f
Parents: de19f96
Author: Brandon Williams <brandonwilli...@apache.org>
Authored: Thu Jan 9 16:59:05 2014 -0600
Committer: Brandon Williams <brandonwilli...@apache.org>
Committed: Thu Jan 9 16:59:05 2014 -0600

----------------------------------------------------------------------
 src/java/org/apache/cassandra/gms/Gossiper.java | 37 +++++++++++++-------
 1 file changed, 24 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/4be62009/src/java/org/apache/cassandra/gms/Gossiper.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/gms/Gossiper.java 
b/src/java/org/apache/cassandra/gms/Gossiper.java
index a8e91ea..7517768 100644
--- a/src/java/org/apache/cassandra/gms/Gossiper.java
+++ b/src/java/org/apache/cassandra/gms/Gossiper.java
@@ -811,6 +811,12 @@ public class Gossiper implements 
IFailureDetectionEventListener, GossiperMBean
 
     private void markAlive(final InetAddress addr, final EndpointState 
localState)
     {
+        if (MessagingService.instance().getVersion(addr) < 
MessagingService.VERSION_20)
+        {
+            realMarkAlive(addr, localState);
+            return;
+        }
+
         MessageOut<EchoMessage> echoMessage = new 
MessageOut<EchoMessage>(MessagingService.Verb.ECHO, new EchoMessage(), 
EchoMessage.serializer);
         logger.trace("Sending a EchoMessage to {}", addr);
         IAsyncCallback echoHandler = new IAsyncCallback()
@@ -822,24 +828,29 @@ public class Gossiper implements 
IFailureDetectionEventListener, GossiperMBean
 
             public void response(MessageIn msg)
             {
-                if (logger.isTraceEnabled())
-                    logger.trace("marking as alive {}", addr);
-                localState.markAlive();
-                localState.updateTimestamp(); // prevents doStatusCheck from 
racing us and evicting if it was down > aVeryLongTime
-                liveEndpoints.add(addr);
-                unreachableEndpoints.remove(addr);
-                expireTimeEndpointMap.remove(addr);
-                logger.debug("removing expire time for endpoint : " + addr);
-                logger.info("InetAddress {} is now UP", addr);
-                for (IEndpointStateChangeSubscriber subscriber : subscribers)
-                    subscriber.onAlive(addr, localState);
-                if (logger.isTraceEnabled())
-                    logger.trace("Notified " + subscribers);
+                realMarkAlive(addr, localState);
             }
         };
         MessagingService.instance().sendRR(echoMessage, addr, echoHandler);
     }
 
+    private void realMarkAlive(final InetAddress addr, final EndpointState 
localState)
+    {
+        if (logger.isTraceEnabled())
+                logger.trace("marking as alive {}", addr);
+        localState.markAlive();
+        localState.updateTimestamp(); // prevents doStatusCheck from racing us 
and evicting if it was down > aVeryLongTime
+        liveEndpoints.add(addr);
+        unreachableEndpoints.remove(addr);
+        expireTimeEndpointMap.remove(addr);
+        logger.debug("removing expire time for endpoint : " + addr);
+        logger.info("InetAddress {} is now UP", addr);
+        for (IEndpointStateChangeSubscriber subscriber : subscribers)
+            subscriber.onAlive(addr, localState);
+        if (logger.isTraceEnabled())
+                logger.trace("Notified " + subscribers);
+    }
+
     private void markDead(InetAddress addr, EndpointState localState)
     {
         if (logger.isTraceEnabled())

Reply via email to