Skip to content

Commit 9d8029e

Browse files
committed
Add an assert to detect double decrementing of ingest metrics (#81450)
1 parent 6626cc9 commit 9d8029e

File tree

2 files changed

+16
-1
lines changed

2 files changed

+16
-1
lines changed

server/src/main/java/org/elasticsearch/ingest/IngestMetric.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,8 @@ void preIngest() {
5252
* @param ingestTimeInNanos The time it took to perform the action.
5353
*/
5454
void postIngest(long ingestTimeInNanos) {
55-
ingestCurrent.decrementAndGet();
55+
long current = ingestCurrent.decrementAndGet();
56+
assert current >= 0 : "ingest metric current count double-decremented";
5657
this.ingestTimeInNanos.inc(ingestTimeInNanos);
5758
ingestCount.inc();
5859
}

server/src/test/java/org/elasticsearch/ingest/IngestMetricTests.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,18 @@ public void testIngestTimeInNanos() {
3131
assertThat(1L, equalTo(metric.createStats().getIngestTimeInMillis()));
3232
}
3333

34+
public void testPostIngestDoubleDecrement() {
35+
IngestMetric metric = new IngestMetric();
36+
37+
metric.preIngest();
38+
assertThat(1L, equalTo(metric.createStats().getIngestCurrent()));
39+
40+
metric.postIngest(500000L);
41+
assertThat(0L, equalTo(metric.createStats().getIngestCurrent()));
42+
43+
// the second postIngest triggers an assertion error
44+
expectThrows(AssertionError.class, () -> metric.postIngest(500000L));
45+
assertThat(-1L, equalTo(metric.createStats().getIngestCurrent()));
46+
}
47+
3448
}

0 commit comments

Comments
 (0)