This is an automated email from the ASF dual-hosted git repository.

clohfink pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/cassandra.git


The following commit(s) were added to refs/heads/trunk by this push:
     new e973344  Emit a metric for mutations that are too large
e973344 is described below

commit e973344305ed2cd5821ccf51cfeb1481010ef18b
Author: Lee Tang <[email protected]>
AuthorDate: Wed Sep 23 22:34:33 2020 -0500

    Emit a metric for mutations that are too large
    
    Patch by Lee Tang; Reviewed by Chris Lohfink, Jordan West for 
CASSANDRA-16116
---
 doc/source/operating/metrics.rst                              |  1 +
 src/java/org/apache/cassandra/db/Mutation.java                |  2 ++
 src/java/org/apache/cassandra/db/commitlog/CommitLog.java     |  2 +-
 src/java/org/apache/cassandra/metrics/CommitLogMetrics.java   |  4 ++++
 .../unit/org/apache/cassandra/db/commitlog/CommitLogTest.java | 11 ++++++++++-
 5 files changed, 18 insertions(+), 2 deletions(-)

diff --git a/doc/source/operating/metrics.rst b/doc/source/operating/metrics.rst
index 3c9cc7d..2cabfd5 100644
--- a/doc/source/operating/metrics.rst
+++ b/doc/source/operating/metrics.rst
@@ -514,6 +514,7 @@ PendingTasks               Gauge<Long>    Number of commit 
log messages written
 TotalCommitLogSize         Gauge<Long>    Current size, in bytes, used by all 
the commit log segments.
 WaitingOnSegmentAllocation Timer          Time spent waiting for a 
CommitLogSegment to be allocated - under normal conditions this should be zero.
 WaitingOnCommit            Timer          The time spent waiting on CL fsync; 
for Periodic this is only occurs when the sync is lagging its sync interval.
+OverSizedMutations         Meter          Throughput for mutations that exceed 
limit.
 ========================== ============== ===========
 
 Storage Metrics
diff --git a/src/java/org/apache/cassandra/db/Mutation.java 
b/src/java/org/apache/cassandra/db/Mutation.java
index 16d20db..0b64620 100644
--- a/src/java/org/apache/cassandra/db/Mutation.java
+++ b/src/java/org/apache/cassandra/db/Mutation.java
@@ -28,6 +28,7 @@ import com.google.common.collect.ImmutableMap;
 import org.apache.commons.lang3.StringUtils;
 
 import org.apache.cassandra.config.DatabaseDescriptor;
+import org.apache.cassandra.db.commitlog.CommitLog;
 import org.apache.cassandra.db.partitions.PartitionUpdate;
 import org.apache.cassandra.db.rows.DeserializationHelper;
 import org.apache.cassandra.io.IVersionedSerializer;
@@ -127,6 +128,7 @@ public class Mutation implements IMutation
         long totalSize = serializedSize(version) + overhead;
         if(totalSize > MAX_MUTATION_SIZE)
         {
+            CommitLog.instance.metrics.oversizedMutations.mark();
             throw new MutationExceededMaxSizeException(this, version, 
totalSize);
         }
     }
diff --git a/src/java/org/apache/cassandra/db/commitlog/CommitLog.java 
b/src/java/org/apache/cassandra/db/commitlog/CommitLog.java
index e7f8743..14b1a3a 100644
--- a/src/java/org/apache/cassandra/db/commitlog/CommitLog.java
+++ b/src/java/org/apache/cassandra/db/commitlog/CommitLog.java
@@ -67,7 +67,7 @@ public class CommitLog implements CommitLogMBean
     final public AbstractCommitLogSegmentManager segmentManager;
 
     public final CommitLogArchiver archiver;
-    final CommitLogMetrics metrics;
+    public final CommitLogMetrics metrics;
     final AbstractCommitLogService executor;
 
     volatile Configuration configuration;
diff --git a/src/java/org/apache/cassandra/metrics/CommitLogMetrics.java 
b/src/java/org/apache/cassandra/metrics/CommitLogMetrics.java
index 08c1c8e..a3302bc 100644
--- a/src/java/org/apache/cassandra/metrics/CommitLogMetrics.java
+++ b/src/java/org/apache/cassandra/metrics/CommitLogMetrics.java
@@ -18,6 +18,7 @@
 package org.apache.cassandra.metrics;
 
 import com.codahale.metrics.Gauge;
+import com.codahale.metrics.Meter;
 import com.codahale.metrics.Timer;
 import org.apache.cassandra.db.commitlog.AbstractCommitLogService;
 import org.apache.cassandra.db.commitlog.AbstractCommitLogSegmentManager;
@@ -41,11 +42,14 @@ public class CommitLogMetrics
     public final Timer waitingOnSegmentAllocation;
     /** The time spent waiting on CL sync; for Periodic this is only occurs 
when the sync is lagging its sync interval */
     public final Timer waitingOnCommit;
+    /** Number and rate of oversized mutations */
+    public final Meter oversizedMutations;
 
     public CommitLogMetrics()
     {
         waitingOnSegmentAllocation = 
Metrics.timer(factory.createMetricName("WaitingOnSegmentAllocation"));
         waitingOnCommit = 
Metrics.timer(factory.createMetricName("WaitingOnCommit"));
+        oversizedMutations = 
Metrics.meter(factory.createMetricName("OverSizedMutations"));
     }
 
     public void attach(final AbstractCommitLogService service, final 
AbstractCommitLogSegmentManager segmentManager)
diff --git a/test/unit/org/apache/cassandra/db/commitlog/CommitLogTest.java 
b/test/unit/org/apache/cassandra/db/commitlog/CommitLogTest.java
index 0e7f30d..d10b16b 100644
--- a/test/unit/org/apache/cassandra/db/commitlog/CommitLogTest.java
+++ b/test/unit/org/apache/cassandra/db/commitlog/CommitLogTest.java
@@ -460,7 +460,16 @@ public abstract class CommitLogTest
                       .clustering("bytes")
                       .add("val", ByteBuffer.allocate(1 + 
getMaxRecordDataSize()))
                       .build();
-        CommitLog.instance.add(rm);
+        long cnt = CommitLog.instance.metrics.oversizedMutations.getCount();
+        try
+        {
+            CommitLog.instance.add(rm);
+        }
+        catch (MutationExceededMaxSizeException e)
+        {
+            Assert.assertEquals(cnt + 1, 
CommitLog.instance.metrics.oversizedMutations.getCount());
+            throw e;
+        }
         throw new AssertionError("mutation larger than limit was accepted");
     }
     @Test


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to