Fix inconsistent state after forced removetoken. Patch by Sam Overton, reviewed by brandonwilliams for CASSANDRA-3876
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/63da8815 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/63da8815 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/63da8815 Branch: refs/heads/trunk Commit: 63da8815aa93a84919c9bf359d5277324025b6fd Parents: 2187530 Author: Brandon Williams <[email protected]> Authored: Wed Feb 8 08:17:05 2012 -0600 Committer: Brandon Williams <[email protected]> Committed: Wed Feb 8 08:19:36 2012 -0600 ---------------------------------------------------------------------- .../apache/cassandra/service/StorageService.java | 6 ++++-- 1 files changed, 4 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/63da8815/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 9f60e58..1f7a18d 100644 --- a/src/java/org/apache/cassandra/service/StorageService.java +++ b/src/java/org/apache/cassandra/service/StorageService.java @@ -2342,10 +2342,12 @@ public class StorageService implements IEndpointStateChangeSubscriber, StorageSe logger_.warn("Removal not confirmed for for " + StringUtils.join(this.replicatingNodes, ",")); for (InetAddress endpoint : tokenMetadata_.getLeavingEndpoints()) { - Gossiper.instance.advertiseTokenRemoved(endpoint, tokenMetadata_.getToken(endpoint)); - tokenMetadata_.removeEndpoint(endpoint); + Token token = tokenMetadata_.getToken(endpoint); + Gossiper.instance.advertiseTokenRemoved(endpoint, token); + excise(token, endpoint); } replicatingNodes.clear(); + removingNode = null; } else {
