You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by jb...@apache.org on 2012/01/28 05:28:10 UTC
[2/5] git commit: synchronize BiMap of bootstrapping tokens patch by
Peter Schuller and jbellis for CASSANDRA-3417
synchronize BiMap of bootstrapping tokens
patch by Peter Schuller and jbellis for CASSANDRA-3417
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/b10d5bd7
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/b10d5bd7
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/b10d5bd7
Branch: refs/heads/cassandra-1.0
Commit: b10d5bd705fbbf07c567f61b2d6f68a4c8d22b0b
Parents: 89ed0b6
Author: Jonathan Ellis <jb...@apache.org>
Authored: Fri Jan 27 22:21:57 2012 -0600
Committer: Jonathan Ellis <jb...@apache.org>
Committed: Fri Jan 27 22:21:57 2012 -0600
----------------------------------------------------------------------
CHANGES.txt | 2 +-
.../apache/cassandra/locator/TokenMetadata.java | 41 ++++++++++----
.../apache/cassandra/service/StorageService.java | 15 +++--
3 files changed, 39 insertions(+), 19 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/b10d5bd7/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 7faf97f..db24da4 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -8,6 +8,7 @@
* (cqlsh) add DESCRIBE COLUMNFAMILIES (CASSANDRA-3586)
* (cqlsh) format blobs correctly and use colors to improve output
readability (CASSANDRA-3726)
+ * synchronize BiMap of bootstrapping tokens (CASSANDRA-3417)
1.0.7
@@ -156,7 +157,6 @@ Merged from 0.8:
* cleanup usage of StorageService.setMode() (CASANDRA-3388)
* Add timing information to cassandra-cli GET/SET/LIST queries (CASSANDRA-3326)
* Only create one CompressionMetadata object per sstable (CASSANDRA-3427)
- * synchronize BiMap of bootstrapping tokens (CASSANDRA-3417)
* Avoid large array allocation for compressed chunk offsets (CASSANDRA-3432)
* fix DecimalType bytebuffer marshalling (CASSANDRA-3421)
* fix bug that caused first column in per row indexes to be ignored
http://git-wip-us.apache.org/repos/asf/cassandra/blob/b10d5bd7/src/java/org/apache/cassandra/locator/TokenMetadata.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/locator/TokenMetadata.java b/src/java/org/apache/cassandra/locator/TokenMetadata.java
index b648656..ebb094b 100644
--- a/src/java/org/apache/cassandra/locator/TokenMetadata.java
+++ b/src/java/org/apache/cassandra/locator/TokenMetadata.java
@@ -109,9 +109,12 @@ public class TokenMetadata
{
int n = 0;
Range sourceRange = getPrimaryRangeFor(getToken(source));
- for (Token token : bootstrapTokens.keySet())
- if (sourceRange.contains(token))
- n++;
+ synchronized (bootstrapTokens)
+ {
+ for (Token token : bootstrapTokens.keySet())
+ if (sourceRange.contains(token))
+ n++;
+ }
return n;
}
@@ -606,14 +609,17 @@ public class TokenMetadata
}
}
- if (!bootstrapTokens.isEmpty())
+ synchronized (bootstrapTokens)
{
- sb.append("Bootstrapping Tokens:" );
- sb.append(System.getProperty("line.separator"));
- for (Map.Entry<Token, InetAddress> entry : bootstrapTokens.entrySet())
+ if (!bootstrapTokens.isEmpty())
{
- sb.append(entry.getValue() + ":" + entry.getKey());
+ sb.append("Bootstrapping Tokens:" );
sb.append(System.getProperty("line.separator"));
+ for (Map.Entry<Token, InetAddress> entry : bootstrapTokens.entrySet())
+ {
+ sb.append(entry.getValue() + ":" + entry.getKey());
+ sb.append(System.getProperty("line.separator"));
+ }
}
}
@@ -711,9 +717,20 @@ public class TokenMetadata
*/
public Map<Token, InetAddress> getTokenToEndpointMap()
{
- Map<Token, InetAddress> map = new HashMap<Token, InetAddress>(tokenToEndpointMap.size() + bootstrapTokens.size());
- map.putAll(tokenToEndpointMap);
- map.putAll(bootstrapTokens);
- return map;
+ lock.readLock().lock();
+ try
+ {
+ Map<Token, InetAddress> map = new HashMap<Token, InetAddress>(tokenToEndpointMap.size() + bootstrapTokens.size());
+ map.putAll(tokenToEndpointMap);
+ synchronized (bootstrapTokens)
+ {
+ map.putAll(bootstrapTokens);
+ }
+ return map;
+ }
+ finally
+ {
+ lock.readLock().unlock();
+ }
}
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/b10d5bd7/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 abe8877..9f60e58 100644
--- a/src/java/org/apache/cassandra/service/StorageService.java
+++ b/src/java/org/apache/cassandra/service/StorageService.java
@@ -1252,14 +1252,17 @@ public class StorageService implements IEndpointStateChangeSubscriber, StorageSe
// For each of the bootstrapping nodes, simply add and remove them one by one to
// allLeftMetadata and check in between what their ranges would be.
- for (Map.Entry<Token, InetAddress> entry : bootstrapTokens.entrySet())
+ synchronized (bootstrapTokens)
{
- InetAddress endpoint = entry.getValue();
+ for (Map.Entry<Token, InetAddress> entry : bootstrapTokens.entrySet())
+ {
+ InetAddress endpoint = entry.getValue();
- allLeftMetadata.updateNormalToken(entry.getKey(), endpoint);
- for (Range range : strategy.getAddressRanges(allLeftMetadata).get(endpoint))
- pendingRanges.put(range, endpoint);
- allLeftMetadata.removeEndpoint(endpoint);
+ allLeftMetadata.updateNormalToken(entry.getKey(), endpoint);
+ for (Range range : strategy.getAddressRanges(allLeftMetadata).get(endpoint))
+ pendingRanges.put(range, endpoint);
+ allLeftMetadata.removeEndpoint(endpoint);
+ }
}
// At this stage pendingRanges has been updated according to leaving and bootstrapping nodes.