You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by br...@apache.org on 2013/06/06 05:16:55 UTC
[1/3] git commit: Revert "More detailed read repair metrics."
Updated Branches:
refs/heads/trunk b4b30cf87 -> 4c0be33ea
Revert "More detailed read repair metrics."
This reverts commit b4b30cf87cbf3f7957c64f625f0f90d24b43b49c.
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/1c038f50
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/1c038f50
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/1c038f50
Branch: refs/heads/trunk
Commit: 1c038f50446e4ee0da23bb86a032e591e1899265
Parents: b4b30cf
Author: Brandon Williams <br...@apache.org>
Authored: Wed Jun 5 22:10:32 2013 -0500
Committer: Brandon Williams <br...@apache.org>
Committed: Wed Jun 5 22:10:32 2013 -0500
----------------------------------------------------------------------
.../cassandra/service/AbstractReadExecutor.java | 11 +----------
.../org/apache/cassandra/service/StorageProxy.java | 5 +----
.../cassandra/service/StorageProxyMBean.java | 2 +-
3 files changed, 3 insertions(+), 15 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/1c038f50/src/java/org/apache/cassandra/service/AbstractReadExecutor.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/service/AbstractReadExecutor.java b/src/java/org/apache/cassandra/service/AbstractReadExecutor.java
index f944507..1c7c6f9 100644
--- a/src/java/org/apache/cassandra/service/AbstractReadExecutor.java
+++ b/src/java/org/apache/cassandra/service/AbstractReadExecutor.java
@@ -25,7 +25,6 @@ import org.apache.cassandra.concurrent.Stage;
import org.apache.cassandra.concurrent.StageManager;
import org.apache.cassandra.config.CFMetaData;
import org.apache.cassandra.config.Schema;
-import org.apache.cassandra.config.ReadRepairDecision;
import org.apache.cassandra.db.ColumnFamilyStore;
import org.apache.cassandra.db.ConsistencyLevel;
import org.apache.cassandra.db.ReadCommand;
@@ -34,7 +33,6 @@ import org.apache.cassandra.db.Row;
import org.apache.cassandra.db.Table;
import org.apache.cassandra.exceptions.ReadTimeoutException;
import org.apache.cassandra.exceptions.UnavailableException;
-import org.apache.cassandra.metrics.ReadRepairMetrics;
import org.apache.cassandra.net.MessageOut;
import org.apache.cassandra.net.MessagingService;
import org.apache.cassandra.service.StorageProxy.LocalReadRunnable;
@@ -127,14 +125,7 @@ public abstract class AbstractReadExecutor
Table table = Table.open(command.table);
List<InetAddress> allReplicas = StorageProxy.getLiveSortedEndpoints(table, command.key);
CFMetaData metaData = Schema.instance.getCFMetaData(command.table, command.cfName);
-
- ReadRepairDecision rrDecision = metaData.newReadRepairDecision();
-
- if (rrDecision != ReadRepairDecision.NONE) {
- ReadRepairMetrics.attempted.mark();
- }
-
- List<InetAddress> queryTargets = consistency_level.filterForQuery(table, allReplicas, rrDecision);
+ List<InetAddress> queryTargets = consistency_level.filterForQuery(table, allReplicas, metaData.newReadRepairDecision());
if (StorageService.instance.isClientMode())
{
http://git-wip-us.apache.org/repos/asf/cassandra/blob/1c038f50/src/java/org/apache/cassandra/service/StorageProxy.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/service/StorageProxy.java b/src/java/org/apache/cassandra/service/StorageProxy.java
index 62e4d86..852e8ca 100644
--- a/src/java/org/apache/cassandra/service/StorageProxy.java
+++ b/src/java/org/apache/cassandra/service/StorageProxy.java
@@ -1247,6 +1247,7 @@ public class StorageProxy implements StorageProxyMBean
logger.trace("Digest mismatch: {}", ex);
ReadRepairMetrics.repairedBlocking.mark();
+
// Do a full data read to resolve the correct response (and repair node that need be)
RowDataResolver resolver = new RowDataResolver(exec.command.table, exec.command.key, exec.command.filter());
ReadCallback<ReadResponse, Row> repairHandler = exec.handler.withNewResolver(resolver);
@@ -1990,10 +1991,6 @@ public class StorageProxy implements StorageProxyMBean
public Long getTruncateRpcTimeout() { return DatabaseDescriptor.getTruncateRpcTimeout(); }
public void setTruncateRpcTimeout(Long timeoutInMillis) { DatabaseDescriptor.setTruncateRpcTimeout(timeoutInMillis); }
public void reloadTriggerClass() { TriggerExecutor.instance.reloadClasses(); }
-<<<<<<< HEAD
-=======
-
->>>>>>> More detailed read repair metrics.
public long getReadRepairAttempted() {
return ReadRepairMetrics.attempted.count();
http://git-wip-us.apache.org/repos/asf/cassandra/blob/1c038f50/src/java/org/apache/cassandra/service/StorageProxyMBean.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/service/StorageProxyMBean.java b/src/java/org/apache/cassandra/service/StorageProxyMBean.java
index 32fa1be..3cb4f17 100644
--- a/src/java/org/apache/cassandra/service/StorageProxyMBean.java
+++ b/src/java/org/apache/cassandra/service/StorageProxyMBean.java
@@ -92,7 +92,7 @@ public interface StorageProxyMBean
public void setTruncateRpcTimeout(Long timeoutInMillis);
public void reloadTriggerClass();
-
+
public long getReadRepairAttempted();
public long getReadRepairRepairedBlocking();
public long getReadRepairRepairedBackground();
[2/3] git commit: Revert "More detailed read repair metrics."
Posted by br...@apache.org.
Revert "More detailed read repair metrics."
This reverts commit 6193fefbf7d92c0b909dccf5a2519b9266983091.
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/a5c04842
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/a5c04842
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/a5c04842
Branch: refs/heads/trunk
Commit: a5c04842ab68643e76926ff21da640b116339dc8
Parents: 1c038f5
Author: Brandon Williams <br...@apache.org>
Authored: Wed Jun 5 22:10:53 2013 -0500
Committer: Brandon Williams <br...@apache.org>
Committed: Wed Jun 5 22:10:53 2013 -0500
----------------------------------------------------------------------
CHANGES.txt | 1 -
.../cassandra/metrics/ReadRepairMetrics.java | 25 -----
.../org/apache/cassandra/service/ReadCallback.java | 5 +-
.../org/apache/cassandra/service/StorageProxy.java | 72 ---------------
.../cassandra/service/StorageProxyMBean.java | 6 -
src/java/org/apache/cassandra/tools/NodeCmd.java | 2 -
src/java/org/apache/cassandra/tools/NodeProbe.java | 15 ---
7 files changed, 1 insertions(+), 125 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/a5c04842/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 4b84bdf..04122b9 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -78,7 +78,6 @@
* cqlsh: fix COPY FROM with ReversedType (CASSANDRA-5610)
* Allow creating CUSTOM indexes on collections (CASSANDRA-5615)
* Evaluate now() function at execution time (CASSANDRA-5616)
- * Expose detailed read repair metrics (CASSANDRA-5618)
Merged from 1.1:
* Remove buggy thrift max message length option (CASSANDRA-5529)
* Fix NPE in Pig's widerow mode (CASSANDRA-5488)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/a5c04842/src/java/org/apache/cassandra/metrics/ReadRepairMetrics.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/metrics/ReadRepairMetrics.java b/src/java/org/apache/cassandra/metrics/ReadRepairMetrics.java
deleted file mode 100644
index 3f48fee..0000000
--- a/src/java/org/apache/cassandra/metrics/ReadRepairMetrics.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package org.apache.cassandra.metrics;
-
-import java.util.concurrent.TimeUnit;
-
-import com.yammer.metrics.Metrics;
-import com.yammer.metrics.core.Counter;
-import com.yammer.metrics.core.Gauge;
-import com.yammer.metrics.core.Meter;
-import com.yammer.metrics.core.MetricName;
-import com.yammer.metrics.util.RatioGauge;
-
-/**
- * Metrics related to Read Repair.
- */
-public class ReadRepairMetrics {
- public static final String GROUP_NAME = "org.apache.cassandra.metrics";
- public static final String TYPE_NAME = "ReadRepair";
-
- public static final Meter repairedBlocking =
- Metrics.newMeter(new MetricName(GROUP_NAME, TYPE_NAME, "RepairedBlocking"), "RepairedBlocking", TimeUnit.SECONDS);
- public static final Meter repairedBackground =
- Metrics.newMeter(new MetricName(GROUP_NAME, TYPE_NAME, "RepairedBackground"), "RepairedBackground", TimeUnit.SECONDS);
- public static final Meter attempted =
- Metrics.newMeter(new MetricName(GROUP_NAME, TYPE_NAME, "Attempted"), "Attempted", TimeUnit.SECONDS);
-}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/a5c04842/src/java/org/apache/cassandra/service/ReadCallback.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/service/ReadCallback.java b/src/java/org/apache/cassandra/service/ReadCallback.java
index fe7f4d7..79e15b1 100644
--- a/src/java/org/apache/cassandra/service/ReadCallback.java
+++ b/src/java/org/apache/cassandra/service/ReadCallback.java
@@ -34,7 +34,6 @@ import org.apache.cassandra.db.ReadCommand;
import org.apache.cassandra.db.Table;
import org.apache.cassandra.exceptions.ReadTimeoutException;
import org.apache.cassandra.exceptions.UnavailableException;
-import org.apache.cassandra.metrics.ReadRepairMetrics;
import org.apache.cassandra.net.IAsyncCallback;
import org.apache.cassandra.net.MessageIn;
import org.apache.cassandra.net.MessageOut;
@@ -182,9 +181,7 @@ public class ReadCallback<TMessage, TResolved> implements IAsyncCallback<TMessag
if (logger.isDebugEnabled())
logger.debug("Digest mismatch:", e);
-
- ReadRepairMetrics.repairedBackground.mark();
-
+
ReadCommand readCommand = (ReadCommand) command;
final RowDataResolver repairResolver = new RowDataResolver(readCommand.table, readCommand.key, readCommand.filter());
AsyncRepairCallback repairHandler = new AsyncRepairCallback(repairResolver, endpoints.size());
http://git-wip-us.apache.org/repos/asf/cassandra/blob/a5c04842/src/java/org/apache/cassandra/service/StorageProxy.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/service/StorageProxy.java b/src/java/org/apache/cassandra/service/StorageProxy.java
index 852e8ca..3da923b 100644
--- a/src/java/org/apache/cassandra/service/StorageProxy.java
+++ b/src/java/org/apache/cassandra/service/StorageProxy.java
@@ -39,7 +39,6 @@ import org.apache.cassandra.concurrent.Stage;
import org.apache.cassandra.concurrent.StageManager;
import org.apache.cassandra.config.CFMetaData;
import org.apache.cassandra.config.DatabaseDescriptor;
-import org.apache.cassandra.config.ReadRepairDecision;
import org.apache.cassandra.config.Schema;
import org.apache.cassandra.db.*;
import org.apache.cassandra.db.Table;
@@ -60,7 +59,6 @@ import org.apache.cassandra.locator.AbstractReplicationStrategy;
import org.apache.cassandra.locator.IEndpointSnitch;
import org.apache.cassandra.locator.TokenMetadata;
import org.apache.cassandra.metrics.ClientRequestMetrics;
-import org.apache.cassandra.metrics.ReadRepairMetrics;
import org.apache.cassandra.net.*;
import org.apache.cassandra.service.paxos.*;
import org.apache.cassandra.tracing.Tracing;
@@ -1163,64 +1161,9 @@ public class StorageProxy implements StorageProxyMBean
assert !command.isDigestQuery();
logger.trace("Command/ConsistencyLevel is {}/{}", command, consistency_level);
-<<<<<<< HEAD
AbstractReadExecutor exec = AbstractReadExecutor.getReadExecutor(command, consistency_level);
exec.executeAsync();
readExecutors[i] = exec;
-=======
- List<InetAddress> endpoints = getLiveSortedEndpoints(table, command.key);
- CFMetaData cfm = Schema.instance.getCFMetaData(command.getKeyspace(), command.getColumnFamilyName());
-
- ReadRepairDecision rrDecision = cfm.newReadRepairDecision();
- endpoints = consistency_level.filterForQuery(table, endpoints, rrDecision);
-
- if (rrDecision != ReadRepairDecision.NONE) {
- ReadRepairMetrics.attempted.mark();
- }
-
- RowDigestResolver resolver = new RowDigestResolver(command.table, command.key);
- ReadCallback<ReadResponse, Row> handler = new ReadCallback(resolver, consistency_level, command, endpoints);
- handler.assureSufficientLiveNodes();
- assert !endpoints.isEmpty();
- readCallbacks[i] = handler;
-
- // The data-request message is sent to dataPoint, the node that will actually get the data for us
- InetAddress dataPoint = endpoints.get(0);
- if (dataPoint.equals(FBUtilities.getBroadcastAddress()) && OPTIMIZE_LOCAL_REQUESTS)
- {
- logger.trace("reading data locally");
- StageManager.getStage(Stage.READ).execute(new LocalReadRunnable(command, handler));
- }
- else
- {
- logger.trace("reading data from {}", dataPoint);
- MessagingService.instance().sendRR(command.createMessage(), dataPoint, handler);
- }
-
- if (endpoints.size() == 1)
- continue;
-
- // send the other endpoints a digest request
- ReadCommand digestCommand = command.copy();
- digestCommand.setDigestQuery(true);
- MessageOut message = null;
- for (InetAddress digestPoint : endpoints.subList(1, endpoints.size()))
- {
- if (digestPoint.equals(FBUtilities.getBroadcastAddress()) && OPTIMIZE_LOCAL_REQUESTS)
- {
- logger.trace("reading digest locally");
- StageManager.getStage(Stage.READ).execute(new LocalReadRunnable(digestCommand, handler));
- }
- else
- {
- logger.trace("reading digest from {}", digestPoint);
- // (We lazy-construct the digest Message object since it may not be necessary if we
- // are doing a local digest read, or no digest reads at all.)
- if (message == null)
- message = digestCommand.createMessage();
- MessagingService.instance().sendRR(message, digestPoint, handler);
- }
- }
}
for (AbstractReadExecutor exec: readExecutors)
@@ -1245,9 +1188,6 @@ public class StorageProxy implements StorageProxyMBean
catch (DigestMismatchException ex)
{
logger.trace("Digest mismatch: {}", ex);
-
- ReadRepairMetrics.repairedBlocking.mark();
-
// Do a full data read to resolve the correct response (and repair node that need be)
RowDataResolver resolver = new RowDataResolver(exec.command.table, exec.command.key, exec.command.filter());
ReadCallback<ReadResponse, Row> repairHandler = exec.handler.withNewResolver(resolver);
@@ -1991,16 +1931,4 @@ public class StorageProxy implements StorageProxyMBean
public Long getTruncateRpcTimeout() { return DatabaseDescriptor.getTruncateRpcTimeout(); }
public void setTruncateRpcTimeout(Long timeoutInMillis) { DatabaseDescriptor.setTruncateRpcTimeout(timeoutInMillis); }
public void reloadTriggerClass() { TriggerExecutor.instance.reloadClasses(); }
-
- public long getReadRepairAttempted() {
- return ReadRepairMetrics.attempted.count();
- }
-
- public long getReadRepairRepairedBlocking() {
- return ReadRepairMetrics.repairedBlocking.count();
- }
-
- public long getReadRepairRepairedBackground() {
- return ReadRepairMetrics.repairedBackground.count();
- }
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/a5c04842/src/java/org/apache/cassandra/service/StorageProxyMBean.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/service/StorageProxyMBean.java b/src/java/org/apache/cassandra/service/StorageProxyMBean.java
index 3cb4f17..f482fc7 100644
--- a/src/java/org/apache/cassandra/service/StorageProxyMBean.java
+++ b/src/java/org/apache/cassandra/service/StorageProxyMBean.java
@@ -17,8 +17,6 @@
*/
package org.apache.cassandra.service;
-import org.apache.cassandra.metrics.ReadRepairMetrics;
-
public interface StorageProxyMBean
{
/**
@@ -92,8 +90,4 @@ public interface StorageProxyMBean
public void setTruncateRpcTimeout(Long timeoutInMillis);
public void reloadTriggerClass();
-
- public long getReadRepairAttempted();
- public long getReadRepairRepairedBlocking();
- public long getReadRepairRepairedBackground();
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/a5c04842/src/java/org/apache/cassandra/tools/NodeCmd.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/tools/NodeCmd.java b/src/java/org/apache/cassandra/tools/NodeCmd.java
index 9f524fc..ca81857 100644
--- a/src/java/org/apache/cassandra/tools/NodeCmd.java
+++ b/src/java/org/apache/cassandra/tools/NodeCmd.java
@@ -665,8 +665,6 @@ public class NodeCmd
outs.printf(" Error retrieving file data for %s%n", host);
}
}
-
- outs.printf("Read Repair Statistics:%nAttempted: %d%nMismatch (Blocking): %d%nMismatch (Background): %d%n", probe.getReadRepairAttempted(), probe.getReadRepairRepairedBlocking(), probe.getReadRepairRepairedBackground());
MessagingServiceMBean ms = probe.msProxy;
outs.printf("%-25s", "Pool Name");
http://git-wip-us.apache.org/repos/asf/cassandra/blob/a5c04842/src/java/org/apache/cassandra/tools/NodeProbe.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/tools/NodeProbe.java b/src/java/org/apache/cassandra/tools/NodeProbe.java
index af94d14..31df3b9 100644
--- a/src/java/org/apache/cassandra/tools/NodeProbe.java
+++ b/src/java/org/apache/cassandra/tools/NodeProbe.java
@@ -828,21 +828,6 @@ public class NodeProbe
{
return failed;
}
-
- public long getReadRepairAttempted()
- {
- return spProxy.getReadRepairAttempted();
- }
-
- public long getReadRepairRepairedBlocking()
- {
- return spProxy.getReadRepairRepairedBlocking();
- }
-
- public long getReadRepairRepairedBackground()
- {
- return spProxy.getReadRepairRepairedBackground();
- }
}
class ColumnFamilyStoreMBeanIterator implements Iterator<Map.Entry<String, ColumnFamilyStoreMBean>>
[3/3] git commit: Fix broken rebase
Posted by br...@apache.org.
Fix broken rebase
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/4c0be33e
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/4c0be33e
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/4c0be33e
Branch: refs/heads/trunk
Commit: 4c0be33ea00d292557ce76ced241df84e6582c9e
Parents: a5c0484
Author: Brandon Williams <br...@apache.org>
Authored: Wed Jun 5 22:12:35 2013 -0500
Committer: Brandon Williams <br...@apache.org>
Committed: Wed Jun 5 22:12:35 2013 -0500
----------------------------------------------------------------------
.../cassandra/metrics/ReadRepairMetrics.java | 25 +++++++++++++++
.../cassandra/service/AbstractReadExecutor.java | 11 ++++++-
.../org/apache/cassandra/service/ReadCallback.java | 5 ++-
.../org/apache/cassandra/service/StorageProxy.java | 17 ++++++++++
.../cassandra/service/StorageProxyMBean.java | 4 ++
src/java/org/apache/cassandra/tools/NodeCmd.java | 2 +
src/java/org/apache/cassandra/tools/NodeProbe.java | 15 +++++++++
7 files changed, 77 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/4c0be33e/src/java/org/apache/cassandra/metrics/ReadRepairMetrics.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/metrics/ReadRepairMetrics.java b/src/java/org/apache/cassandra/metrics/ReadRepairMetrics.java
new file mode 100644
index 0000000..3f48fee
--- /dev/null
+++ b/src/java/org/apache/cassandra/metrics/ReadRepairMetrics.java
@@ -0,0 +1,25 @@
+package org.apache.cassandra.metrics;
+
+import java.util.concurrent.TimeUnit;
+
+import com.yammer.metrics.Metrics;
+import com.yammer.metrics.core.Counter;
+import com.yammer.metrics.core.Gauge;
+import com.yammer.metrics.core.Meter;
+import com.yammer.metrics.core.MetricName;
+import com.yammer.metrics.util.RatioGauge;
+
+/**
+ * Metrics related to Read Repair.
+ */
+public class ReadRepairMetrics {
+ public static final String GROUP_NAME = "org.apache.cassandra.metrics";
+ public static final String TYPE_NAME = "ReadRepair";
+
+ public static final Meter repairedBlocking =
+ Metrics.newMeter(new MetricName(GROUP_NAME, TYPE_NAME, "RepairedBlocking"), "RepairedBlocking", TimeUnit.SECONDS);
+ public static final Meter repairedBackground =
+ Metrics.newMeter(new MetricName(GROUP_NAME, TYPE_NAME, "RepairedBackground"), "RepairedBackground", TimeUnit.SECONDS);
+ public static final Meter attempted =
+ Metrics.newMeter(new MetricName(GROUP_NAME, TYPE_NAME, "Attempted"), "Attempted", TimeUnit.SECONDS);
+}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/4c0be33e/src/java/org/apache/cassandra/service/AbstractReadExecutor.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/service/AbstractReadExecutor.java b/src/java/org/apache/cassandra/service/AbstractReadExecutor.java
index 1c7c6f9..f944507 100644
--- a/src/java/org/apache/cassandra/service/AbstractReadExecutor.java
+++ b/src/java/org/apache/cassandra/service/AbstractReadExecutor.java
@@ -25,6 +25,7 @@ import org.apache.cassandra.concurrent.Stage;
import org.apache.cassandra.concurrent.StageManager;
import org.apache.cassandra.config.CFMetaData;
import org.apache.cassandra.config.Schema;
+import org.apache.cassandra.config.ReadRepairDecision;
import org.apache.cassandra.db.ColumnFamilyStore;
import org.apache.cassandra.db.ConsistencyLevel;
import org.apache.cassandra.db.ReadCommand;
@@ -33,6 +34,7 @@ import org.apache.cassandra.db.Row;
import org.apache.cassandra.db.Table;
import org.apache.cassandra.exceptions.ReadTimeoutException;
import org.apache.cassandra.exceptions.UnavailableException;
+import org.apache.cassandra.metrics.ReadRepairMetrics;
import org.apache.cassandra.net.MessageOut;
import org.apache.cassandra.net.MessagingService;
import org.apache.cassandra.service.StorageProxy.LocalReadRunnable;
@@ -125,7 +127,14 @@ public abstract class AbstractReadExecutor
Table table = Table.open(command.table);
List<InetAddress> allReplicas = StorageProxy.getLiveSortedEndpoints(table, command.key);
CFMetaData metaData = Schema.instance.getCFMetaData(command.table, command.cfName);
- List<InetAddress> queryTargets = consistency_level.filterForQuery(table, allReplicas, metaData.newReadRepairDecision());
+
+ ReadRepairDecision rrDecision = metaData.newReadRepairDecision();
+
+ if (rrDecision != ReadRepairDecision.NONE) {
+ ReadRepairMetrics.attempted.mark();
+ }
+
+ List<InetAddress> queryTargets = consistency_level.filterForQuery(table, allReplicas, rrDecision);
if (StorageService.instance.isClientMode())
{
http://git-wip-us.apache.org/repos/asf/cassandra/blob/4c0be33e/src/java/org/apache/cassandra/service/ReadCallback.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/service/ReadCallback.java b/src/java/org/apache/cassandra/service/ReadCallback.java
index 79e15b1..fe7f4d7 100644
--- a/src/java/org/apache/cassandra/service/ReadCallback.java
+++ b/src/java/org/apache/cassandra/service/ReadCallback.java
@@ -34,6 +34,7 @@ import org.apache.cassandra.db.ReadCommand;
import org.apache.cassandra.db.Table;
import org.apache.cassandra.exceptions.ReadTimeoutException;
import org.apache.cassandra.exceptions.UnavailableException;
+import org.apache.cassandra.metrics.ReadRepairMetrics;
import org.apache.cassandra.net.IAsyncCallback;
import org.apache.cassandra.net.MessageIn;
import org.apache.cassandra.net.MessageOut;
@@ -181,7 +182,9 @@ public class ReadCallback<TMessage, TResolved> implements IAsyncCallback<TMessag
if (logger.isDebugEnabled())
logger.debug("Digest mismatch:", e);
-
+
+ ReadRepairMetrics.repairedBackground.mark();
+
ReadCommand readCommand = (ReadCommand) command;
final RowDataResolver repairResolver = new RowDataResolver(readCommand.table, readCommand.key, readCommand.filter());
AsyncRepairCallback repairHandler = new AsyncRepairCallback(repairResolver, endpoints.size());
http://git-wip-us.apache.org/repos/asf/cassandra/blob/4c0be33e/src/java/org/apache/cassandra/service/StorageProxy.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/service/StorageProxy.java b/src/java/org/apache/cassandra/service/StorageProxy.java
index 3da923b..0203e4b 100644
--- a/src/java/org/apache/cassandra/service/StorageProxy.java
+++ b/src/java/org/apache/cassandra/service/StorageProxy.java
@@ -59,6 +59,7 @@ import org.apache.cassandra.locator.AbstractReplicationStrategy;
import org.apache.cassandra.locator.IEndpointSnitch;
import org.apache.cassandra.locator.TokenMetadata;
import org.apache.cassandra.metrics.ClientRequestMetrics;
+import org.apache.cassandra.metrics.ReadRepairMetrics;
import org.apache.cassandra.net.*;
import org.apache.cassandra.service.paxos.*;
import org.apache.cassandra.tracing.Tracing;
@@ -1188,6 +1189,9 @@ public class StorageProxy implements StorageProxyMBean
catch (DigestMismatchException ex)
{
logger.trace("Digest mismatch: {}", ex);
+
+ ReadRepairMetrics.repairedBlocking.mark();
+
// Do a full data read to resolve the correct response (and repair node that need be)
RowDataResolver resolver = new RowDataResolver(exec.command.table, exec.command.key, exec.command.filter());
ReadCallback<ReadResponse, Row> repairHandler = exec.handler.withNewResolver(resolver);
@@ -1931,4 +1935,17 @@ public class StorageProxy implements StorageProxyMBean
public Long getTruncateRpcTimeout() { return DatabaseDescriptor.getTruncateRpcTimeout(); }
public void setTruncateRpcTimeout(Long timeoutInMillis) { DatabaseDescriptor.setTruncateRpcTimeout(timeoutInMillis); }
public void reloadTriggerClass() { TriggerExecutor.instance.reloadClasses(); }
+
+
+ public long getReadRepairAttempted() {
+ return ReadRepairMetrics.attempted.count();
+ }
+
+ public long getReadRepairRepairedBlocking() {
+ return ReadRepairMetrics.repairedBlocking.count();
+ }
+
+ public long getReadRepairRepairedBackground() {
+ return ReadRepairMetrics.repairedBackground.count();
+ }
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/4c0be33e/src/java/org/apache/cassandra/service/StorageProxyMBean.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/service/StorageProxyMBean.java b/src/java/org/apache/cassandra/service/StorageProxyMBean.java
index f482fc7..05b9c78 100644
--- a/src/java/org/apache/cassandra/service/StorageProxyMBean.java
+++ b/src/java/org/apache/cassandra/service/StorageProxyMBean.java
@@ -90,4 +90,8 @@ public interface StorageProxyMBean
public void setTruncateRpcTimeout(Long timeoutInMillis);
public void reloadTriggerClass();
+
+ public long getReadRepairAttempted();
+ public long getReadRepairRepairedBlocking();
+ public long getReadRepairRepairedBackground();
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/4c0be33e/src/java/org/apache/cassandra/tools/NodeCmd.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/tools/NodeCmd.java b/src/java/org/apache/cassandra/tools/NodeCmd.java
index ca81857..9f524fc 100644
--- a/src/java/org/apache/cassandra/tools/NodeCmd.java
+++ b/src/java/org/apache/cassandra/tools/NodeCmd.java
@@ -665,6 +665,8 @@ public class NodeCmd
outs.printf(" Error retrieving file data for %s%n", host);
}
}
+
+ outs.printf("Read Repair Statistics:%nAttempted: %d%nMismatch (Blocking): %d%nMismatch (Background): %d%n", probe.getReadRepairAttempted(), probe.getReadRepairRepairedBlocking(), probe.getReadRepairRepairedBackground());
MessagingServiceMBean ms = probe.msProxy;
outs.printf("%-25s", "Pool Name");
http://git-wip-us.apache.org/repos/asf/cassandra/blob/4c0be33e/src/java/org/apache/cassandra/tools/NodeProbe.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/tools/NodeProbe.java b/src/java/org/apache/cassandra/tools/NodeProbe.java
index 31df3b9..af94d14 100644
--- a/src/java/org/apache/cassandra/tools/NodeProbe.java
+++ b/src/java/org/apache/cassandra/tools/NodeProbe.java
@@ -828,6 +828,21 @@ public class NodeProbe
{
return failed;
}
+
+ public long getReadRepairAttempted()
+ {
+ return spProxy.getReadRepairAttempted();
+ }
+
+ public long getReadRepairRepairedBlocking()
+ {
+ return spProxy.getReadRepairRepairedBlocking();
+ }
+
+ public long getReadRepairRepairedBackground()
+ {
+ return spProxy.getReadRepairRepairedBackground();
+ }
}
class ColumnFamilyStoreMBeanIterator implements Iterator<Map.Entry<String, ColumnFamilyStoreMBean>>