Record CAS contention for write timeouts in prepare phase Patch by Christopher Batey; Reviewed by Edward Capriolo for CASSANDRA-12626
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/3bf043e4 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/3bf043e4 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/3bf043e4 Branch: refs/heads/trunk Commit: 3bf043e4e4790b0d6ef5cfe12ff80f813945a302 Parents: 747a62f Author: Christopher Batey <christopher.ba...@gmail.com> Authored: Sat Sep 10 18:35:37 2016 +0100 Committer: Jeff Jirsa <jeff.ji...@crowdstrike.com> Committed: Tue Oct 18 17:27:42 2016 -0700 ---------------------------------------------------------------------- CHANGES.txt | 1 + src/java/org/apache/cassandra/service/StorageProxy.java | 11 +++++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/3bf043e4/CHANGES.txt ---------------------------------------------------------------------- diff --git a/CHANGES.txt b/CHANGES.txt index a5b0add..dc98ca7 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -84,6 +84,7 @@ * Remove pre-startup check for open JMX port (CASSANDRA-12074) * Remove compaction Severity from DynamicEndpointSnitch (CASSANDRA-11738) * Restore resumable hints delivery (CASSANDRA-11960) + * Properly report LWT contention (CASSANDRA-12626) Merged from 3.0: * Improve avg aggregate functions (CASSANDRA-12417) * Preserve quoted reserved keyword column names in MV creation (CASSANDRA-11803) http://git-wip-us.apache.org/repos/asf/cassandra/blob/3bf043e4/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 5ad19e0..529e4e3 100644 --- a/src/java/org/apache/cassandra/service/StorageProxy.java +++ b/src/java/org/apache/cassandra/service/StorageProxy.java @@ -321,14 +321,19 @@ public class StorageProxy implements StorageProxyMBean } finally { - if(contentions > 0) - casWriteMetrics.contention.update(contentions); + recordCasContention(contentions); final long latency = System.nanoTime() - startTimeForMetrics; casWriteMetrics.addNano(latency); writeMetricsMap.get(consistencyForPaxos).addNano(latency); } } + private static void recordCasContention(int contentions) + { + if(contentions > 0) + casWriteMetrics.contention.update(contentions); + } + private static Predicate<InetAddress> sameDCPredicateFor(final String dc) { final IEndpointSnitch snitch = DatabaseDescriptor.getEndpointSnitch(); @@ -439,6 +444,7 @@ public class StorageProxy implements StorageProxyMBean } catch (WriteTimeoutException e) { + recordCasContention(contentions); // We're still doing preparation for the paxos rounds, so we want to use the CAS (see CASSANDRA-8672) throw new WriteTimeoutException(WriteType.CAS, e.consistency, e.received, e.blockFor); } @@ -473,6 +479,7 @@ public class StorageProxy implements StorageProxyMBean return Pair.create(ballot, contentions); } + recordCasContention(contentions); throw new WriteTimeoutException(WriteType.CAS, consistencyForPaxos, 0, consistencyForPaxos.blockFor(Keyspace.open(metadata.ksName))); }