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]