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 <[email protected]> Authored: Wed Jun 5 22:12:35 2013 -0500 Committer: Brandon Williams <[email protected]> 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>>
