You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by ma...@apache.org on 2016/03/17 12:53:13 UTC
cassandra git commit: Store repair options in parent_repair_history
Repository: cassandra
Updated Branches:
refs/heads/trunk e739f6057 -> b210bd234
Store repair options in parent_repair_history
Patch by marcuse; reviewed by Stefania Alborghetti for CASSANDRA-11244
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/b210bd23
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/b210bd23
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/b210bd23
Branch: refs/heads/trunk
Commit: b210bd2344b93ea6f7f95cecc1e5514ecff547df
Parents: e739f60
Author: Marcus Eriksson <ma...@apache.org>
Authored: Thu Mar 17 10:41:08 2016 +0100
Committer: Marcus Eriksson <ma...@apache.org>
Committed: Thu Mar 17 12:52:47 2016 +0100
----------------------------------------------------------------------
CHANGES.txt | 1 +
.../apache/cassandra/repair/RepairRunnable.java | 2 +-
.../repair/SystemDistributedKeyspace.java | 38 +++++++++++++++++---
.../cassandra/repair/messages/RepairOption.java | 19 +++++++++-
4 files changed, 53 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/b210bd23/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 0779083..311c1fa 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
3.6
+ * Store repair options in parent_repair_history (CASSANDRA-11244)
* Print current leveling in sstableofflinerelevel (CASSANDRA-9588)
* Remove hard-coded SSL cipher suites and protocols (CASSANDRA-10508)
* Improve concurrency in CompactionStrategyManager (CASSANDRA-10099)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/b210bd23/src/java/org/apache/cassandra/repair/RepairRunnable.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/repair/RepairRunnable.java b/src/java/org/apache/cassandra/repair/RepairRunnable.java
index eb25457..2f54cf8 100644
--- a/src/java/org/apache/cassandra/repair/RepairRunnable.java
+++ b/src/java/org/apache/cassandra/repair/RepairRunnable.java
@@ -189,7 +189,7 @@ public class RepairRunnable extends WrappedRunnable implements ProgressEventNoti
}
final UUID parentSession = UUIDGen.getTimeUUID();
- SystemDistributedKeyspace.startParentRepair(parentSession, keyspace, cfnames, options.getRanges());
+ SystemDistributedKeyspace.startParentRepair(parentSession, keyspace, cfnames, options);
long repairedAt;
try
{
http://git-wip-us.apache.org/repos/asf/cassandra/blob/b210bd23/src/java/org/apache/cassandra/repair/SystemDistributedKeyspace.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/repair/SystemDistributedKeyspace.java b/src/java/org/apache/cassandra/repair/SystemDistributedKeyspace.java
index 9cf6c3e..2a479b4 100644
--- a/src/java/org/apache/cassandra/repair/SystemDistributedKeyspace.java
+++ b/src/java/org/apache/cassandra/repair/SystemDistributedKeyspace.java
@@ -24,6 +24,7 @@ import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
+import java.util.Map;
import java.util.Set;
import java.util.UUID;
@@ -38,6 +39,7 @@ import org.apache.cassandra.cql3.QueryProcessor;
import org.apache.cassandra.db.ConsistencyLevel;
import org.apache.cassandra.dht.Range;
import org.apache.cassandra.dht.Token;
+import org.apache.cassandra.repair.messages.RepairOption;
import org.apache.cassandra.schema.KeyspaceMetadata;
import org.apache.cassandra.schema.KeyspaceParams;
import org.apache.cassandra.schema.Tables;
@@ -90,6 +92,7 @@ public final class SystemDistributedKeyspace
+ "exception_stacktrace text,"
+ "requested_ranges set<text>,"
+ "successful_ranges set<text>,"
+ + "options map<text, text>,"
+ "PRIMARY KEY (parent_id))");
private static CFMetaData compile(String name, String description, String schema)
@@ -103,15 +106,40 @@ public final class SystemDistributedKeyspace
return KeyspaceMetadata.create(NAME, KeyspaceParams.simple(3), Tables.of(RepairHistory, ParentRepairHistory));
}
- public static void startParentRepair(UUID parent_id, String keyspaceName, String[] cfnames, Collection<Range<Token>> ranges)
+ public static void startParentRepair(UUID parent_id, String keyspaceName, String[] cfnames, RepairOption options)
{
-
- String query = "INSERT INTO %s.%s (parent_id, keyspace_name, columnfamily_names, requested_ranges, started_at)"+
- " VALUES (%s, '%s', { '%s' }, { '%s' }, toTimestamp(now()))";
- String fmtQry = String.format(query, NAME, PARENT_REPAIR_HISTORY, parent_id.toString(), keyspaceName, Joiner.on("','").join(cfnames), Joiner.on("','").join(ranges));
+ Collection<Range<Token>> ranges = options.getRanges();
+ String query = "INSERT INTO %s.%s (parent_id, keyspace_name, columnfamily_names, requested_ranges, started_at, options)"+
+ " VALUES (%s, '%s', { '%s' }, { '%s' }, toTimestamp(now()), { %s })";
+ String fmtQry = String.format(query,
+ NAME,
+ PARENT_REPAIR_HISTORY,
+ parent_id.toString(),
+ keyspaceName,
+ Joiner.on("','").join(cfnames),
+ Joiner.on("','").join(ranges),
+ toCQLMap(options.asMap(), RepairOption.RANGES_KEY, RepairOption.COLUMNFAMILIES_KEY));
processSilent(fmtQry);
}
+ private static String toCQLMap(Map<String, String> options, String ... ignore)
+ {
+ Set<String> toIgnore = Sets.newHashSet(ignore);
+ StringBuilder map = new StringBuilder();
+ boolean first = true;
+ for (Map.Entry<String, String> entry : options.entrySet())
+ {
+ if (!toIgnore.contains(entry.getKey()))
+ {
+ if (!first)
+ map.append(',');
+ first = false;
+ map.append(String.format("'%s': '%s'", entry.getKey(), entry.getValue()));
+ }
+ }
+ return map.toString();
+ }
+
public static void failParentRepair(UUID parent_id, Throwable t)
{
String query = "UPDATE %s.%s SET finished_at = toTimestamp(now()), exception_message=?, exception_stacktrace=? WHERE parent_id=%s";
http://git-wip-us.apache.org/repos/asf/cassandra/blob/b210bd23/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..843efde 100644
--- a/src/java/org/apache/cassandra/repair/messages/RepairOption.java
+++ b/src/java/org/apache/cassandra/repair/messages/RepairOption.java
@@ -19,6 +19,7 @@ package org.apache.cassandra.repair.messages;
import java.util.*;
+import com.google.common.base.Joiner;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -28,7 +29,6 @@ import org.apache.cassandra.dht.IPartitioner;
import org.apache.cassandra.dht.Range;
import org.apache.cassandra.dht.Token;
import org.apache.cassandra.repair.RepairParallelism;
-import org.apache.cassandra.tools.nodetool.Repair;
import org.apache.cassandra.utils.FBUtilities;
/**
@@ -45,6 +45,7 @@ public class RepairOption
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";
// we don't want to push nodes too much for repair
public static final int MAX_JOB_THREADS = 4;
@@ -317,4 +318,20 @@ public class RepairOption
", # of ranges: " + ranges.size() +
')';
}
+
+ 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));
+ return options;
+ }
}