Browse Source

Add an assert to detect double decrementing of ingest metrics (#81450)

Joe Gallo 3 years ago
parent
commit
9d793e05e2

+ 2 - 1
server/src/main/java/org/elasticsearch/ingest/IngestMetric.java

@@ -52,7 +52,8 @@ class IngestMetric {
      * @param ingestTimeInNanos The time it took to perform the action.
      */
     void postIngest(long ingestTimeInNanos) {
-        ingestCurrent.decrementAndGet();
+        long current = ingestCurrent.decrementAndGet();
+        assert current >= 0 : "ingest metric current count double-decremented";
         this.ingestTimeInNanos.inc(ingestTimeInNanos);
         ingestCount.inc();
     }

+ 14 - 0
server/src/test/java/org/elasticsearch/ingest/IngestMetricTests.java

@@ -31,4 +31,18 @@ public class IngestMetricTests extends ESTestCase {
         assertThat(1L, equalTo(metric.createStats().getIngestTimeInMillis()));
     }
 
+    public void testPostIngestDoubleDecrement() {
+        IngestMetric metric = new IngestMetric();
+
+        metric.preIngest();
+        assertThat(1L, equalTo(metric.createStats().getIngestCurrent()));
+
+        metric.postIngest(500000L);
+        assertThat(0L, equalTo(metric.createStats().getIngestCurrent()));
+
+        // the second postIngest triggers an assertion error
+        expectThrows(AssertionError.class, () -> metric.postIngest(500000L));
+        assertThat(-1L, equalTo(metric.createStats().getIngestCurrent()));
+    }
+
 }