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())