Updated Branches: refs/heads/trunk d41b9e70c -> 06939dda2
Replace countPendingHints with HintsCreated metric patch by Tyler Hobbs; reviewed by jbellis for CASSANDRA-5746 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/06939dda Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/06939dda Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/06939dda Branch: refs/heads/trunk Commit: 06939dda2cb307fe5489c9b7ca83ebc259f6cee2 Parents: d41b9e7 Author: Jonathan Ellis <jbel...@apache.org> Authored: Thu Jul 18 13:26:11 2013 -0700 Committer: Jonathan Ellis <jbel...@apache.org> Committed: Thu Jul 18 13:26:51 2013 -0700 ---------------------------------------------------------------------- CHANGES.txt | 2 ++ NEWS.txt | 1 + .../cassandra/db/HintedHandOffManager.java | 21 +++--------------- .../cassandra/db/HintedHandOffManagerMBean.java | 8 ------- .../cassandra/metrics/HintedHandoffMetrics.java | 23 +++++++++++++------- .../apache/cassandra/service/StorageProxy.java | 2 +- .../apache/cassandra/db/HintedHandOffTest.java | 2 +- 7 files changed, 23 insertions(+), 36 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/06939dda/CHANGES.txt ---------------------------------------------------------------------- diff --git a/CHANGES.txt b/CHANGES.txt index 605df96..9a1a28b 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 2.0.0-beta2 + * Replace countPendingHints with Hints Created metric (CASSANDRA-5746) * Allow nodetool with no args, and with help to run without a server (CASSANDRA-5734) * Cleanup AbstractType/TypeSerializer classes (CASSANDRA-5744) * Remove unimplemented cli option schema-mwt (CASSANDRA-5754) @@ -7,6 +8,7 @@ * cqlsh: add missing table options to DESCRIBE output (CASSANDRA-5749) * Fix assertion error during repair (CASSANDRA-5757) + 2.0.0-beta1 * Removed on-heap row cache (CASSANDRA-5348) * use nanotime consistently for node-local timeouts (CASSANDRA-5581) http://git-wip-us.apache.org/repos/asf/cassandra/blob/06939dda/NEWS.txt ---------------------------------------------------------------------- diff --git a/NEWS.txt b/NEWS.txt index 4418945..dc3d51a 100644 --- a/NEWS.txt +++ b/NEWS.txt @@ -59,6 +59,7 @@ Operations https://issues.apache.org/jira/browse/CASSANDRA-3919 for details. - CAS uses gc_grace_seconds to determine how long to keep unused paxos state around for, or a minimum of three hours. + - A new hints created metric is tracked per target, replacing countPendingHints Features -------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/06939dda/src/java/org/apache/cassandra/db/HintedHandOffManager.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/HintedHandOffManager.java b/src/java/org/apache/cassandra/db/HintedHandOffManager.java index 9f21451..6b69354 100644 --- a/src/java/org/apache/cassandra/db/HintedHandOffManager.java +++ b/src/java/org/apache/cassandra/db/HintedHandOffManager.java @@ -119,9 +119,11 @@ public class HintedHandOffManager implements HintedHandOffManagerMBean * Returns a mutation representing a Hint to be sent to <code>targetId</code> * as soon as it becomes available again. */ - public static RowMutation hintFor(RowMutation mutation, int ttl, UUID targetId) + public RowMutation hintFor(RowMutation mutation, int ttl, UUID targetId) { assert ttl > 0; + metrics.incrCreatedHints(StorageService.instance.getTokenMetadata().getEndpointForHostId(targetId)); + UUID hintId = UUIDGen.getTimeUUID(); // serialize the hint with id and version as a composite column name ByteBuffer name = comparator.decompose(hintId, MessagingService.current_version); @@ -547,23 +549,6 @@ public class HintedHandOffManager implements HintedHandOffManagerMBean return result; } - public Map<String, Integer> countPendingHints() - { - Token.TokenFactory tokenFactory = StorageService.getPartitioner().getTokenFactory(); - - Map<String, Integer> result = new HashMap<String, Integer>(); - for (Row row : getHintsSlice(Integer.MAX_VALUE)) - { - if (row.cf == null) // ignore removed rows - continue; - - int count = row.cf.getColumnCount(); - if (count > 0) - result.put(tokenFactory.toString(row.key.token), count); - } - return result; - } - private List<Row> getHintsSlice(int columnCount) { // Get count # of columns... http://git-wip-us.apache.org/repos/asf/cassandra/blob/06939dda/src/java/org/apache/cassandra/db/HintedHandOffManagerMBean.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/HintedHandOffManagerMBean.java b/src/java/org/apache/cassandra/db/HintedHandOffManagerMBean.java index 690a3eb..142272f 100644 --- a/src/java/org/apache/cassandra/db/HintedHandOffManagerMBean.java +++ b/src/java/org/apache/cassandra/db/HintedHandOffManagerMBean.java @@ -35,14 +35,6 @@ public interface HintedHandOffManagerMBean */ public List<String> listEndpointsPendingHints(); - /** - * List all the endpoints that this node has hints for, and - * count the number of hints for each such endpoint. - * - * @return map of endpoint -> hint count - */ - public Map<String, Integer> countPendingHints(); - /** force hint delivery to an endpoint **/ public void scheduleHintDelivery(String host) throws UnknownHostException; http://git-wip-us.apache.org/repos/asf/cassandra/blob/06939dda/src/java/org/apache/cassandra/metrics/HintedHandoffMetrics.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/metrics/HintedHandoffMetrics.java b/src/java/org/apache/cassandra/metrics/HintedHandoffMetrics.java index 1585342..ae1cbf3 100644 --- a/src/java/org/apache/cassandra/metrics/HintedHandoffMetrics.java +++ b/src/java/org/apache/cassandra/metrics/HintedHandoffMetrics.java @@ -53,16 +53,23 @@ public class HintedHandoffMetrics } }); - public void incrPastWindow(InetAddress address) + /** Total number of hints that have been created, This is not a cache. */ + private final LoadingCache<InetAddress, Counter> createdHintCounts = CacheBuilder.newBuilder().build(new CacheLoader<InetAddress, Counter>() { - try - { - notStored.get(address).mark(); - } - catch (ExecutionException e) + public Counter load(InetAddress address) { - throw new RuntimeException(e); // this cannot happen + return Metrics.newCounter(new MetricName(GROUP_NAME, TYPE_NAME, "Hints_created-" + address.getHostAddress())); } + }); + + public void incrCreatedHints(InetAddress address) + { + createdHintCounts.getUnchecked(address).inc(); + } + + public void incrPastWindow(InetAddress address) + { + notStored.getUnchecked(address).mark(); } public void log() @@ -84,7 +91,7 @@ public class HintedHandoffMetrics public DifferencingCounter(InetAddress address) { - this.meter = Metrics.newCounter(new MetricName(GROUP_NAME, TYPE_NAME, "Hints_not_stored-" + address.toString())); + this.meter = Metrics.newCounter(new MetricName(GROUP_NAME, TYPE_NAME, "Hints_not_stored-" + address.getHostAddress())); } public long diffrence() http://git-wip-us.apache.org/repos/asf/cassandra/blob/06939dda/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 3b5b69e..241d038 100644 --- a/src/java/org/apache/cassandra/service/StorageProxy.java +++ b/src/java/org/apache/cassandra/service/StorageProxy.java @@ -875,7 +875,7 @@ public class StorageProxy implements StorageProxyMBean assert ttl > 0; UUID hostId = StorageService.instance.getTokenMetadata().getHostId(target); assert hostId != null : "Missing host ID for " + target.getHostAddress(); - HintedHandOffManager.hintFor(mutation, ttl, hostId).apply(); + HintedHandOffManager.instance.hintFor(mutation, ttl, hostId).apply(); totalHints.incrementAndGet(); } http://git-wip-us.apache.org/repos/asf/cassandra/blob/06939dda/test/unit/org/apache/cassandra/db/HintedHandOffTest.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/db/HintedHandOffTest.java b/test/unit/org/apache/cassandra/db/HintedHandOffTest.java index 8bbf5a9..2f55770 100644 --- a/test/unit/org/apache/cassandra/db/HintedHandOffTest.java +++ b/test/unit/org/apache/cassandra/db/HintedHandOffTest.java @@ -65,7 +65,7 @@ public class HintedHandOffTest extends SchemaLoader RowMutation rm = new RowMutation(KEYSPACE4, ByteBufferUtil.bytes(1)); rm.add(STANDARD1_CF, ByteBufferUtil.bytes(String.valueOf(COLUMN1)), ByteBufferUtil.EMPTY_BYTE_BUFFER, System.currentTimeMillis()); - HintedHandOffManager.hintFor(rm, HintedHandOffManager.calculateHintTTL(rm), UUID.randomUUID()).apply(); + HintedHandOffManager.instance.hintFor(rm, HintedHandOffManager.calculateHintTTL(rm), UUID.randomUUID()).apply(); // flush data to disk hintStore.forceBlockingFlush();