Check all INTERNAL_IP states for seed match. Patch by Brandon Williams, reviewed by Jason Brown for CASSANDRA-6523
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/47edb3c0 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/47edb3c0 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/47edb3c0 Branch: refs/heads/cassandra-2.1 Commit: 47edb3c061bf269ab79ae5a782197cc3040dad89 Parents: ce98b2d Author: Brandon Williams <brandonwilli...@apache.org> Authored: Mon Jun 9 14:04:35 2014 -0500 Committer: Brandon Williams <brandonwilli...@apache.org> Committed: Mon Jun 9 14:04:35 2014 -0500 ---------------------------------------------------------------------- CHANGES.txt | 1 + .../gms/GossipDigestAckVerbHandler.java | 1 - .../gms/GossipDigestSynVerbHandler.java | 1 - src/java/org/apache/cassandra/gms/Gossiper.java | 25 ++++++++++++-------- 4 files changed, 16 insertions(+), 12 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/47edb3c0/CHANGES.txt ---------------------------------------------------------------------- diff --git a/CHANGES.txt b/CHANGES.txt index 11ded69..a50825f 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 1.2.17 + * Check internal addresses for seeds (CASSANDRA-6523) * Fix potential / by 0 in HHOM page size calculation (CASSANDRA-7354) * Fix handling of empty counter replication mutations (CASSANDRA-7144) * Use LOCAL_ONE for non-superuser auth queries (CASSANDRA-7328) http://git-wip-us.apache.org/repos/asf/cassandra/blob/47edb3c0/src/java/org/apache/cassandra/gms/GossipDigestAckVerbHandler.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/gms/GossipDigestAckVerbHandler.java b/src/java/org/apache/cassandra/gms/GossipDigestAckVerbHandler.java index b2af3a2..ebfdd7e 100644 --- a/src/java/org/apache/cassandra/gms/GossipDigestAckVerbHandler.java +++ b/src/java/org/apache/cassandra/gms/GossipDigestAckVerbHandler.java @@ -58,7 +58,6 @@ public class GossipDigestAckVerbHandler implements IVerbHandler<GossipDigestAck> Gossiper.instance.applyStateLocally(epStateMap); } - Gossiper.instance.checkSeedContact(from); if (Gossiper.instance.isInShadowRound()) { if (logger.isDebugEnabled()) http://git-wip-us.apache.org/repos/asf/cassandra/blob/47edb3c0/src/java/org/apache/cassandra/gms/GossipDigestSynVerbHandler.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/gms/GossipDigestSynVerbHandler.java b/src/java/org/apache/cassandra/gms/GossipDigestSynVerbHandler.java index 476cb72..f6de521 100644 --- a/src/java/org/apache/cassandra/gms/GossipDigestSynVerbHandler.java +++ b/src/java/org/apache/cassandra/gms/GossipDigestSynVerbHandler.java @@ -82,7 +82,6 @@ public class GossipDigestSynVerbHandler implements IVerbHandler<GossipDigestSyn> GossipDigestAck.serializer); if (logger.isTraceEnabled()) logger.trace("Sending a GossipDigestAckMessage to {}", from); - Gossiper.instance.checkSeedContact(from); MessagingService.instance().sendOneWay(gDigestAckMessage, from); } http://git-wip-us.apache.org/repos/asf/cassandra/blob/47edb3c0/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 5d2780e..caadb3e 100644 --- a/src/java/org/apache/cassandra/gms/Gossiper.java +++ b/src/java/org/apache/cassandra/gms/Gossiper.java @@ -104,9 +104,6 @@ public class Gossiper implements IFailureDetectionEventListener, GossiperMBean private final Map<InetAddress, Long> expireTimeEndpointMap = new ConcurrentHashMap<InetAddress, Long>(); - // have we ever in our lifetime reached a seed? - private boolean seedContacted = false; - private boolean inShadowRound = false; private class GossipTask implements Runnable @@ -189,15 +186,23 @@ public class Gossiper implements IFailureDetectionEventListener, GossiperMBean } } - protected void checkSeedContact(InetAddress ep) - { - if (!seedContacted && seeds.contains(ep)) - seedContacted = true; - } - public boolean seenAnySeed() { - return seedContacted; + for (Map.Entry<InetAddress, EndpointState> entry : endpointStateMap.entrySet()) + { + if (seeds.contains(entry.getKey())) + return true; + try + { + if (entry.getValue().getApplicationStateMap().keySet().contains(ApplicationState.INTERNAL_IP) && seeds.contains(InetAddress.getByName(entry.getValue().getApplicationState(ApplicationState.INTERNAL_IP).value))) + return true; + } + catch (UnknownHostException e) + { + throw new RuntimeException(e); + } + } + return false; } /**