This is an automated email from the ASF dual-hosted git repository. dcapwell pushed a commit to branch cassandra-3.11 in repository https://gitbox.apache.org/repos/asf/cassandra.git
commit 0f46c90d1a72f1c31c00ea617697a5565e97f30c Merge: 0361d53 8a4c1d7 Author: David Capwell <[email protected]> AuthorDate: Thu Sep 24 21:16:53 2020 -0700 Merge branch 'cassandra-3.0' into cassandra-3.11 CHANGES.txt | 2 + .../apache/cassandra/repair/RepairRunnable.java | 29 ++++ .../cassandra/repair/messages/RepairOption.java | 13 +- .../apache/cassandra/service/StorageService.java | 4 +- .../apache/cassandra/tools/nodetool/Repair.java | 5 + .../distributed/test/RepairOperationalTest.java | 163 +++++++++++++++++++++ 6 files changed, 212 insertions(+), 4 deletions(-) diff --cc CHANGES.txt index b5b0cbc,5f326ce..189aec4 --- a/CHANGES.txt +++ b/CHANGES.txt @@@ -1,13 -1,9 +1,15 @@@ -3.0.23: +3.11.9 * Avoid failing compactions with very large partitions (CASSANDRA-15164) - * Use IF NOT EXISTS for index and UDT create statements in snapshot schema files (CASSANDRA-13935) + * Make sure LCS handles duplicate sstable added/removed notifications correctly (CASSANDRA-14103) ++Merged from 3.0: + * Add flag to ignore unreplicated keyspaces during repair (CASSANDRA-15160) -3.0.22: +3.11.8 + * Correctly interpret SASI's `max_compaction_flush_memory_in_mb` setting in megabytes not bytes (CASSANDRA-16071) + * Fix short read protection for GROUP BY queries (CASSANDRA-15459) + * Frozen RawTuple is not annotated with frozen in the toString method (CASSANDRA-15857) +Merged from 3.0: + * Use IF NOT EXISTS for index and UDT create statements in snapshot schema files (CASSANDRA-13935) * Fix gossip shutdown order (CASSANDRA-15816) * Remove broken 'defrag-on-read' optimization (CASSANDRA-15432) * Check for endpoint collision with hibernating nodes (CASSANDRA-14599) diff --cc src/java/org/apache/cassandra/repair/messages/RepairOption.java index 146ab64,5d56d3a..14fff97 --- a/src/java/org/apache/cassandra/repair/messages/RepairOption.java +++ b/src/java/org/apache/cassandra/repair/messages/RepairOption.java @@@ -45,8 -45,7 +45,9 @@@ public class RepairOptio public static final String DATACENTERS_KEY = "dataCenters"; public static final String HOSTS_KEY = "hosts"; public static final String TRACE_KEY = "trace"; + public static final String SUB_RANGE_REPAIR_KEY = "sub_range_repair"; + public static final String PULL_REPAIR_KEY = "pullRepair"; + public static final String IGNORE_UNREPLICATED_KS = "ignoreUnreplicatedKeyspaces"; // we don't want to push nodes too much for repair public static final int MAX_JOB_THREADS = 4; @@@ -137,7 -130,7 +138,8 @@@ boolean primaryRange = Boolean.parseBoolean(options.get(PRIMARY_RANGE_KEY)); boolean incremental = Boolean.parseBoolean(options.get(INCREMENTAL_KEY)); boolean trace = Boolean.parseBoolean(options.get(TRACE_KEY)); + boolean pullRepair = Boolean.parseBoolean(options.get(PULL_REPAIR_KEY)); + boolean ignoreUnreplicatedKeyspaces = Boolean.parseBoolean(options.get(IGNORE_UNREPLICATED_KS)); int jobThreads = 1; if (options.containsKey(JOB_THREADS_KEY)) @@@ -175,7 -168,7 +177,7 @@@ } } - RepairOption option = new RepairOption(parallelism, primaryRange, incremental, trace, jobThreads, ranges, !ranges.isEmpty(), pullRepair); - RepairOption option = new RepairOption(parallelism, primaryRange, incremental, trace, jobThreads, ranges, !ranges.isEmpty(), ignoreUnreplicatedKeyspaces); ++ RepairOption option = new RepairOption(parallelism, primaryRange, incremental, trace, jobThreads, ranges, !ranges.isEmpty(), pullRepair, ignoreUnreplicatedKeyspaces); // data centers String dataCentersStr = options.get(DATACENTERS_KEY); @@@ -250,16 -228,16 +252,17 @@@ private final boolean trace; private final int jobThreads; private final boolean isSubrangeRepair; + private final boolean pullRepair; + private final boolean ignoreUnreplicatedKeyspaces; private final Collection<String> columnFamilies = new HashSet<>(); private final Collection<String> dataCenters = new HashSet<>(); private final Collection<String> hosts = new HashSet<>(); private final Collection<Range<Token>> ranges = new HashSet<>(); - public RepairOption(RepairParallelism parallelism, boolean primaryRange, boolean incremental, boolean trace, int jobThreads, Collection<Range<Token>> ranges, boolean isSubrangeRepair, boolean pullRepair) - public RepairOption(RepairParallelism parallelism, boolean primaryRange, boolean incremental, boolean trace, int jobThreads, Collection<Range<Token>> ranges, boolean isSubrangeRepair, boolean ignoreUnreplicatedKeyspaces) ++ public RepairOption(RepairParallelism parallelism, boolean primaryRange, boolean incremental, boolean trace, int jobThreads, Collection<Range<Token>> ranges, boolean isSubrangeRepair, boolean pullRepair, boolean ignoreUnreplicatedKeyspaces) { - if (FBUtilities.isWindows() && + if (FBUtilities.isWindows && (DatabaseDescriptor.getDiskAccessMode() != Config.DiskAccessMode.standard || DatabaseDescriptor.getIndexAccessMode() != Config.DiskAccessMode.standard) && parallelism == RepairParallelism.SEQUENTIAL) { @@@ -275,7 -253,7 +278,8 @@@ this.jobThreads = jobThreads; this.ranges.addAll(ranges); this.isSubrangeRepair = isSubrangeRepair; + this.pullRepair = pullRepair; + this.ignoreUnreplicatedKeyspaces = ignoreUnreplicatedKeyspaces; } public RepairParallelism getParallelism() @@@ -354,24 -331,7 +362,25 @@@ ", dataCenters: " + dataCenters + ", hosts: " + hosts + ", # of ranges: " + ranges.size() + + ", pull repair: " + pullRepair + + ", ignore unreplicated keyspaces: "+ ignoreUnreplicatedKeyspaces + ')'; } + + public Map<String, String> asMap() + { + Map<String, String> options = new HashMap<>(); + options.put(PARALLELISM_KEY, parallelism.toString()); + options.put(PRIMARY_RANGE_KEY, Boolean.toString(primaryRange)); + options.put(INCREMENTAL_KEY, Boolean.toString(incremental)); + options.put(JOB_THREADS_KEY, Integer.toString(jobThreads)); + options.put(COLUMNFAMILIES_KEY, Joiner.on(",").join(columnFamilies)); + options.put(DATACENTERS_KEY, Joiner.on(",").join(dataCenters)); + options.put(HOSTS_KEY, Joiner.on(",").join(hosts)); + options.put(SUB_RANGE_REPAIR_KEY, Boolean.toString(isSubrangeRepair)); + options.put(TRACE_KEY, Boolean.toString(trace)); + options.put(RANGES_KEY, Joiner.on(",").join(ranges)); + options.put(PULL_REPAIR_KEY, Boolean.toString(pullRepair)); + return options; + } } diff --cc src/java/org/apache/cassandra/service/StorageService.java index ab30bfc,69e337e..70900bc --- a/src/java/org/apache/cassandra/service/StorageService.java +++ b/src/java/org/apache/cassandra/service/StorageService.java @@@ -3498,7 -3167,7 +3498,7 @@@ public class StorageService extends Not parallelism = RepairParallelism.PARALLEL; } -- RepairOption options = new RepairOption(parallelism, primaryRange, !fullRepair, false, 1, Collections.<Range<Token>>emptyList(), false, false); ++ RepairOption options = new RepairOption(parallelism, primaryRange, !fullRepair, false, 1, Collections.<Range<Token>>emptyList(), false, false, false); if (dataCenters != null) { options.getDataCenters().addAll(dataCenters); @@@ -3590,7 -3259,7 +3590,7 @@@ "The repair will occur but without anti-compaction."); Collection<Range<Token>> repairingRange = createRepairRangeFrom(beginToken, endToken); -- RepairOption options = new RepairOption(parallelism, false, !fullRepair, false, 1, repairingRange, true, false); ++ RepairOption options = new RepairOption(parallelism, false, !fullRepair, false, 1, repairingRange, true, false, false); if (dataCenters != null) { options.getDataCenters().addAll(dataCenters); diff --cc src/java/org/apache/cassandra/tools/nodetool/Repair.java index 350601a,928cae8..180748d --- a/src/java/org/apache/cassandra/tools/nodetool/Repair.java +++ b/src/java/org/apache/cassandra/tools/nodetool/Repair.java @@@ -81,9 -81,9 +81,12 @@@ public class Repair extends NodeToolCm @Option(title = "trace_repair", name = {"-tr", "--trace"}, description = "Use -tr to trace the repair. Traces are logged to system_traces.events.") private boolean trace = false; + @Option(title = "pull_repair", name = {"-pl", "--pull"}, description = "Use --pull to perform a one way repair where data is only streamed from a remote node to this node.") + private boolean pullRepair = false; + + @Option(title = "ignore_unreplicated_keyspaces", name = {"-iuk","--ignore-unreplicated-keyspaces"}, description = "Use --ignore-unreplicated-keyspaces to ignore keyspaces which are not replicated, otherwise the repair will fail") + private boolean ignoreUnreplicatedKeyspaces = false; + @Override public void execute(NodeProbe probe) { @@@ -111,7 -111,8 +114,9 @@@ options.put(RepairOption.JOB_THREADS_KEY, Integer.toString(numJobThreads)); options.put(RepairOption.TRACE_KEY, Boolean.toString(trace)); options.put(RepairOption.COLUMNFAMILIES_KEY, StringUtils.join(cfnames, ",")); + options.put(RepairOption.PULL_REPAIR_KEY, Boolean.toString(pullRepair)); + options.put(RepairOption.IGNORE_UNREPLICATED_KS, Boolean.toString(ignoreUnreplicatedKeyspaces)); + if (!startToken.isEmpty() || !endToken.isEmpty()) { options.put(RepairOption.RANGES_KEY, startToken + ":" + endToken); --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
