You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by al...@apache.org on 2016/08/30 15:55:57 UTC
[3/6] cassandra git commit: Enable repair -pr and -local together
(fix regression of CASSANDRA-7450)
Enable repair -pr and -local together (fix regression of CASSANDRA-7450)
Patch by J�r�me Mainaud; Reviewed by Paulo Motta for CASSANDRA-12522
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/6eff0829
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/6eff0829
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/6eff0829
Branch: refs/heads/trunk
Commit: 6eff0829d2b3fe8fcac6622971b66792a4e82fef
Parents: acd46ab
Author: J�r�me Mainaud <je...@mainaud.com>
Authored: Fri Aug 26 20:51:40 2016 -0300
Committer: Aleksey Yeschenko <al...@apache.org>
Committed: Tue Aug 30 16:46:01 2016 +0100
----------------------------------------------------------------------
CHANGES.txt | 1 +
.../cassandra/repair/messages/RepairOption.java | 6 +++++-
.../cassandra/service/StorageService.java | 2 +-
.../repair/messages/RepairOptionTest.java | 20 ++++++++++++++++++++
4 files changed, 27 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/6eff0829/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 74c44f8..0f7cf0e 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
2.2.8
+ * Enable repair -pr and -local together (fix regression of CASSANDRA-7450) (CASSANDRA-12522)
* Fail repair on non-existing table (CASSANDRA-12279)
* cqlsh copy: fix missing counter values (CASSANDRA-12476)
* Move migration tasks to non-periodic queue, assure flush executor shutdown after non-periodic executor (CASSANDRA-12251)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/6eff0829/src/java/org/apache/cassandra/repair/messages/RepairOption.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/repair/messages/RepairOption.java b/src/java/org/apache/cassandra/repair/messages/RepairOption.java
index d50a2ed..44a1e57 100644
--- a/src/java/org/apache/cassandra/repair/messages/RepairOption.java
+++ b/src/java/org/apache/cassandra/repair/messages/RepairOption.java
@@ -208,7 +208,7 @@ public class RepairOption
{
throw new IllegalArgumentException("Too many job threads. Max is " + MAX_JOB_THREADS);
}
- if (primaryRange && (!dataCenters.isEmpty() || !hosts.isEmpty()))
+ if (primaryRange && ((!dataCenters.isEmpty() && !option.isInLocalDCOnly()) || !hosts.isEmpty()))
{
throw new IllegalArgumentException("You need to run primary range repair on all nodes in the cluster.");
}
@@ -303,6 +303,10 @@ public class RepairOption
return isSubrangeRepair;
}
+ public boolean isInLocalDCOnly() {
+ return dataCenters.size() == 1 && dataCenters.contains(DatabaseDescriptor.getLocalDataCenter());
+ }
+
@Override
public String toString()
{
http://git-wip-us.apache.org/repos/asf/cassandra/blob/6eff0829/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 e8ab54e..48a291b 100644
--- a/src/java/org/apache/cassandra/service/StorageService.java
+++ b/src/java/org/apache/cassandra/service/StorageService.java
@@ -2801,7 +2801,7 @@ public class StorageService extends NotificationBroadcasterSupport implements IE
if (option.getDataCenters().isEmpty() && option.getHosts().isEmpty())
option.getRanges().addAll(getPrimaryRanges(keyspace));
// except dataCenters only contain local DC (i.e. -local)
- else if (option.getDataCenters().size() == 1 && option.getDataCenters().contains(DatabaseDescriptor.getLocalDataCenter()))
+ else if (option.isInLocalDCOnly())
option.getRanges().addAll(getPrimaryRangesWithinDC(keyspace));
else
throw new IllegalArgumentException("You need to run primary range repair on all nodes in the cluster.");
http://git-wip-us.apache.org/repos/asf/cassandra/blob/6eff0829/test/unit/org/apache/cassandra/repair/messages/RepairOptionTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/repair/messages/RepairOptionTest.java b/test/unit/org/apache/cassandra/repair/messages/RepairOptionTest.java
index cc6f46a..a0eea4e 100644
--- a/test/unit/org/apache/cassandra/repair/messages/RepairOptionTest.java
+++ b/test/unit/org/apache/cassandra/repair/messages/RepairOptionTest.java
@@ -97,6 +97,26 @@ public class RepairOptionTest
}
@Test
+ public void testPrWithLocalParseOptions()
+ {
+ DatabaseDescriptor.forceStaticInitialization();
+
+ Map<String, String> options = new HashMap<>();
+ options.put(RepairOption.PARALLELISM_KEY, "parallel");
+ options.put(RepairOption.PRIMARY_RANGE_KEY, "true");
+ options.put(RepairOption.INCREMENTAL_KEY, "false");
+ options.put(RepairOption.COLUMNFAMILIES_KEY, "cf1,cf2,cf3");
+ options.put(RepairOption.DATACENTERS_KEY, "datacenter1");
+
+ RepairOption option = RepairOption.parse(options, Murmur3Partitioner.instance);
+ assertTrue(option.isPrimaryRange());
+
+ Set<String> expectedDCs = new HashSet<>(3);
+ expectedDCs.add("datacenter1");
+ assertEquals(expectedDCs, option.getDataCenters());
+ }
+
+ @Test
public void testIncrementalRepairWithSubrangesIsNotGlobal() throws Exception
{
RepairOption ro = RepairOption.parse(ImmutableMap.of(RepairOption.INCREMENTAL_KEY, "true", RepairOption.RANGES_KEY, "42:42"),