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]

Reply via email to