Ignore fat clients when checking for endpoint collision Patch by brandonwilliams, reviewed by tjake for CASSANDRA-7939
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/3ece6f23 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/3ece6f23 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/3ece6f23 Branch: refs/heads/trunk Commit: 3ece6f2399fa15c97d889c5d43b4a7457825e8e1 Parents: 5f18658 Author: Brandon Williams <brandonwilli...@apache.org> Authored: Mon Sep 29 09:52:09 2014 -0500 Committer: Brandon Williams <brandonwilli...@apache.org> Committed: Mon Sep 29 09:52:09 2014 -0500 ---------------------------------------------------------------------- CHANGES.txt | 1 + .../apache/cassandra/service/StorageService.java | 16 +++++++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/3ece6f23/CHANGES.txt ---------------------------------------------------------------------- diff --git a/CHANGES.txt b/CHANGES.txt index fca7ccb..354cb5d 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 2.1.1 + * Ignore fat clients when checking for endpoint collision (CASSANDRA-7939) * Make sstablerepairedset take a list of files (CASSANDRA-7995) * (cqlsh) Tab completeion for indexes on map keys (CASSANDRA-7972) * (cqlsh) Fix UDT field selection in select clause (CASSANDRA-7891) http://git-wip-us.apache.org/repos/asf/cassandra/blob/3ece6f23/src/java/org/apache/cassandra/service/StorageService.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/service/StorageService.java b/src/java/org/apache/cassandra/service/StorageService.java index a005c44..d2cb1ab 100644 --- a/src/java/org/apache/cassandra/service/StorageService.java +++ b/src/java/org/apache/cassandra/service/StorageService.java @@ -453,12 +453,26 @@ public class StorageService extends NotificationBroadcasterSupport implements IE MessagingService.instance().listen(FBUtilities.getLocalAddress()); Gossiper.instance.doShadowRound(); EndpointState epState = Gossiper.instance.getEndpointStateForEndpoint(FBUtilities.getBroadcastAddress()); - if (epState != null && !Gossiper.instance.isDeadState(epState)) + if (epState != null && !Gossiper.instance.isDeadState(epState) && !Gossiper.instance.isFatClient(FBUtilities.getBroadcastAddress())) { throw new RuntimeException(String.format("A node with address %s already exists, cancelling join. " + "Use cassandra.replace_address if you want to replace this node.", FBUtilities.getBroadcastAddress())); } + if (RangeStreamer.useStrictConsistency) + { + for (Map.Entry<InetAddress, EndpointState> entry : Gossiper.instance.getEndpointStates()) + { + + if (entry.getValue().getApplicationState(ApplicationState.STATUS) == null) + continue; + String[] pieces = entry.getValue().getApplicationState(ApplicationState.STATUS).value.split(VersionedValue.DELIMITER_STR, -1); + assert (pieces.length > 0); + String state = pieces[0]; + if (state.equals(VersionedValue.STATUS_BOOTSTRAPPING) || state.equals(VersionedValue.STATUS_LEAVING) || state.equals(VersionedValue.STATUS_MOVING)) + throw new UnsupportedOperationException("Other bootstrapping/leaving/moving nodes detected, cannot bootstrap while cassandra.consistent.rangemovement is true"); + } + } Gossiper.instance.resetEndpointStateMap(); }