Repository: cassandra Updated Branches: refs/heads/cassandra-3.0 5115c106d -> 85ac06c64 refs/heads/cassandra-3.X 0ac1079a4 -> af60ca9b7 refs/heads/trunk c819cb856 -> 49b0805c2
Fix exceptions with new vnode allocation Patch by Dikang Gu; reviewed by Branimir Lambov for CASSANDRA-12715 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/85ac06c6 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/85ac06c6 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/85ac06c6 Branch: refs/heads/cassandra-3.0 Commit: 85ac06c640ad82c1a776f591a752cc8691062018 Parents: 5115c10 Author: Dikang Gu <[email protected]> Authored: Mon Sep 26 17:40:00 2016 -0700 Committer: Aleksey Yeschenko <[email protected]> Committed: Tue Oct 4 14:36:35 2016 +0100 ---------------------------------------------------------------------- CHANGES.txt | 1 + .../apache/cassandra/dht/tokenallocator/TokenAllocation.java | 6 +++--- test/unit/org/apache/cassandra/dht/BootStrapperTest.java | 6 +++--- 3 files changed, 7 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/85ac06c6/CHANGES.txt ---------------------------------------------------------------------- diff --git a/CHANGES.txt b/CHANGES.txt index 21eec4b..d38bf3e 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 3.0.10 + * Fix exceptions with new vnode allocation (CASSANDRA-12715) * Unify drain and shutdown processes (CASSANDRA-12509) * Fix NPE in ComponentOfSlice.isEQ() (CASSANDRA-12706) * Fix failure in LogTransactionTest (CASSANDRA-12632) http://git-wip-us.apache.org/repos/asf/cassandra/blob/85ac06c6/src/java/org/apache/cassandra/dht/tokenallocator/TokenAllocation.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/dht/tokenallocator/TokenAllocation.java b/src/java/org/apache/cassandra/dht/tokenallocator/TokenAllocation.java index e715ff6..971a120 100644 --- a/src/java/org/apache/cassandra/dht/tokenallocator/TokenAllocation.java +++ b/src/java/org/apache/cassandra/dht/tokenallocator/TokenAllocation.java @@ -51,15 +51,15 @@ public class TokenAllocation final InetAddress endpoint, int numTokens) { - StrategyAdapter strategy = getStrategy(tokenMetadata, rs, endpoint); + TokenMetadata tokenMetadataCopy = tokenMetadata.cloneOnlyTokenMap(); + StrategyAdapter strategy = getStrategy(tokenMetadataCopy, rs, endpoint); Collection<Token> tokens = create(tokenMetadata, strategy).addUnit(endpoint, numTokens); tokens = adjustForCrossDatacenterClashes(tokenMetadata, strategy, tokens); if (logger.isWarnEnabled()) { logger.warn("Selected tokens {}", tokens); - SummaryStatistics os = replicatedOwnershipStats(tokenMetadata, rs, endpoint); - TokenMetadata tokenMetadataCopy = tokenMetadata.cloneOnlyTokenMap(); + SummaryStatistics os = replicatedOwnershipStats(tokenMetadataCopy, rs, endpoint); tokenMetadataCopy.updateNormalTokens(tokens, endpoint); SummaryStatistics ns = replicatedOwnershipStats(tokenMetadataCopy, rs, endpoint); logger.warn("Replicated node load in datacentre before allocation " + statToString(os)); http://git-wip-us.apache.org/repos/asf/cassandra/blob/85ac06c6/test/unit/org/apache/cassandra/dht/BootStrapperTest.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/dht/BootStrapperTest.java b/test/unit/org/apache/cassandra/dht/BootStrapperTest.java index 8974791..3fbe106 100644 --- a/test/unit/org/apache/cassandra/dht/BootStrapperTest.java +++ b/test/unit/org/apache/cassandra/dht/BootStrapperTest.java @@ -178,7 +178,7 @@ public class BootStrapperTest String ks = "BootStrapperTestNTSKeyspace" + rackCount + replicas; String dc = "1"; SchemaLoader.createKeyspace(ks, KeyspaceParams.nts(dc, replicas, "15", 15), SchemaLoader.standardCFMD(ks, "Standard1")); - TokenMetadata tm = new TokenMetadata(); + TokenMetadata tm = StorageService.instance.getTokenMetadata(); tm.clearUnsafe(); for (int i = 0; i < rackCount; ++i) generateFakeEndpoints(tm, 10, vn, dc, Integer.toString(i)); @@ -222,11 +222,11 @@ public class BootStrapperTest private void allocateTokensForNode(int vn, String ks, TokenMetadata tm, InetAddress addr) { - SummaryStatistics os = TokenAllocation.replicatedOwnershipStats(tm, Keyspace.open(ks).getReplicationStrategy(), addr); + SummaryStatistics os = TokenAllocation.replicatedOwnershipStats(tm.cloneOnlyTokenMap(), Keyspace.open(ks).getReplicationStrategy(), addr); Collection<Token> tokens = BootStrapper.allocateTokens(tm, addr, ks, vn); assertEquals(vn, tokens.size()); tm.updateNormalTokens(tokens, addr); - SummaryStatistics ns = TokenAllocation.replicatedOwnershipStats(tm, Keyspace.open(ks).getReplicationStrategy(), addr); + SummaryStatistics ns = TokenAllocation.replicatedOwnershipStats(tm.cloneOnlyTokenMap(), Keyspace.open(ks).getReplicationStrategy(), addr); verifyImprovement(os, ns); }
