You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by db...@apache.org on 2012/09/27 14:09:42 UTC
git commit: Avoid ConcurrentModificationExceptions on relocateTokens
patch by dbrosius reviewed by jbellis for CASSANDRA-4727
Updated Branches:
refs/heads/trunk c7c396d2b -> 1078e6f51
Avoid ConcurrentModificationExceptions on relocateTokens
patch by dbrosius reviewed by jbellis for CASSANDRA-4727
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/1078e6f5
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/1078e6f5
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/1078e6f5
Branch: refs/heads/trunk
Commit: 1078e6f514bcfbcaadb2517099baab5f3d21d510
Parents: c7c396d
Author: Dave Brosius <db...@apache.org>
Authored: Thu Sep 27 08:07:43 2012 -0400
Committer: Dave Brosius <db...@apache.org>
Committed: Thu Sep 27 08:07:43 2012 -0400
----------------------------------------------------------------------
.../apache/cassandra/service/StorageService.java | 20 ++++++++------
1 files changed, 11 insertions(+), 9 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/1078e6f5/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 61d7619..e800d88 100644
--- a/src/java/org/apache/cassandra/service/StorageService.java
+++ b/src/java/org/apache/cassandra/service/StorageService.java
@@ -859,7 +859,7 @@ public class StorageService implements IEndpointStateChangeSubscriber, StorageSe
Gossiper.instance.addLocalApplicationState(ApplicationState.SEVERITY, updated);
return true;
}
-
+
public double getSeverity(InetAddress endpoint)
{
VersionedValue event;
@@ -1255,7 +1255,7 @@ public class StorageService implements IEndpointStateChangeSubscriber, StorageSe
}
}, RING_DELAY, TimeUnit.MILLISECONDS);
- // We used to own this token; This token will need to be removed from system.local
+ // We used to own this token; This token will need to be removed from system.local
if (currentOwner.equals(FBUtilities.getBroadcastAddress()))
localTokensToRemove.add(token);
@@ -1391,7 +1391,7 @@ public class StorageService implements IEndpointStateChangeSubscriber, StorageSe
/**
* Handle one or more ranges (tokens) moving from their respective endpoints, to another.
- *
+ *
* @param endpoint the destination of the move
* @param pieces STATE_RELOCATING,token,token,...
*/
@@ -1576,7 +1576,7 @@ public class StorageService implements IEndpointStateChangeSubscriber, StorageSe
for (InetAddress endpoint : bootstrapTokens.inverse().keySet())
{
Collection<Token> tokens = bootstrapTokens.inverse().get(endpoint);
-
+
allLeftMetadata.updateNormalTokens(tokens, endpoint);
for (Range<Token> range : strategy.getAddressRanges(allLeftMetadata).get(endpoint))
pendingRanges.put(range, endpoint);
@@ -2584,7 +2584,7 @@ public class StorageService implements IEndpointStateChangeSubscriber, StorageSe
logger.error("Invalid request to move(Token); This node has more than one token and cannot be moved thusly.");
throw new UnsupportedOperationException("This node has more than one token and cannot be moved thusly.");
}
-
+
List<String> tablesToProcess = Schema.instance.getNonSystemTables();
// checking if data is moving to this node
@@ -2761,11 +2761,13 @@ public class StorageService implements IEndpointStateChangeSubscriber, StorageSe
Collection<Token> localTokens = getTokenMetadata().getTokens(localAddress);
Set<Token> tokens = new HashSet<Token>(srcTokens);
- for (Token srcT : tokens)
+ Iterator<Token> it = tokens.iterator();
+ while (it.hasNext())
{
+ Token srcT = it.next();
if (localTokens.contains(srcT))
{
- tokens.remove(srcT);
+ it.remove();
logger.warn("cannot move {}; source and destination match", srcT);
}
}
@@ -3103,7 +3105,7 @@ public class StorageService implements IEndpointStateChangeSubscriber, StorageSe
* total ownership will be a multiple of the number of DC's and this value will then go up within each DC depending
* on the number of replicas within itself. For DC unaware replication strategies, ownership without replication
* will be 100%.
- *
+ *
* @throws ConfigurationException
*/
public LinkedHashMap<InetAddress, Float> effectiveOwnership(String keyspace) throws ConfigurationException
@@ -3114,7 +3116,7 @@ public class StorageService implements IEndpointStateChangeSubscriber, StorageSe
throw new ConfigurationException("Non System keyspaces doesnt have the same topology");
TokenMetadata metadata = tokenMetadata.cloneOnlyTokenMap();
-
+
if (keyspace == null)
keyspace = Schema.instance.getNonSystemTables().get(0);