From 8174354552ef2215c40517206bfb48408a9f8284 Mon Sep 17 00:00:00 2001 From: "jinbiao.sun" Date: Fri, 21 Oct 2022 14:47:13 +0800 Subject: [PATCH 1/3] HADOOP-18502. MutableStat should return 0 when there is no change --- .../hadoop/metrics2/lib/MutableStat.java | 10 ++++----- .../metrics2/lib/TestMutableMetrics.java | 21 +++++++++++++++++++ 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/metrics2/lib/MutableStat.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/metrics2/lib/MutableStat.java index f2e072545ad28..b130aa6ada398 100644 --- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/metrics2/lib/MutableStat.java +++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/metrics2/lib/MutableStat.java @@ -140,14 +140,14 @@ public synchronized void snapshot(MetricsRecordBuilder builder, boolean all) { if (all || changed()) { numSamples += intervalStat.numSamples(); builder.addCounter(numInfo, numSamples) - .addGauge(avgInfo, lastStat().mean()); + .addGauge(avgInfo, intervalStat.mean()); if (extended) { - builder.addGauge(stdevInfo, lastStat().stddev()) - .addGauge(iMinInfo, lastStat().min()) - .addGauge(iMaxInfo, lastStat().max()) + builder.addGauge(stdevInfo, intervalStat.stddev()) + .addGauge(iMinInfo, intervalStat.min()) + .addGauge(iMaxInfo, intervalStat.max()) .addGauge(minInfo, minMax.min()) .addGauge(maxInfo, minMax.max()) - .addGauge(iNumInfo, lastStat().numSamples()); + .addGauge(iNumInfo, intervalStat.numSamples()); } if (changed()) { if (numSamples > 0) { diff --git a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/metrics2/lib/TestMutableMetrics.java b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/metrics2/lib/TestMutableMetrics.java index 10c8057c69e04..608f89807a739 100644 --- a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/metrics2/lib/TestMutableMetrics.java +++ b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/metrics2/lib/TestMutableMetrics.java @@ -290,6 +290,27 @@ private static void snapshotMutableRatesWithAggregation( } } + /** + * MutableStat should output 0 instead of the previous state when there is no change + */ + @Test public void testMutableWithoutChanged() { + MetricsRecordBuilder builderWithChange = mockMetricsRecordBuilder(); + MetricsRecordBuilder builderWithoutChange = mockMetricsRecordBuilder(); + MetricsRegistry registry = new MetricsRegistry("test"); + MutableStat stat = registry.newStat("Test", "Test", "Ops", "Val", false); + + stat.add(1000, 1000); + stat.add(1000, 2000); + registry.snapshot(builderWithChange, true); + + assertGauge("TestINumOps", 2000L, builderWithChange); + assertGauge("TestAvgVal", 1.5, builderWithChange); + + registry.snapshot(builderWithoutChange, true); + assertGauge("TestINumOps", 0L, builderWithoutChange); + assertGauge("TestAvgVal", 0.0, builderWithoutChange); + } + @Test public void testDuplicateMetrics() { MutableRatesWithAggregation rates = new MutableRatesWithAggregation(); From 2383399caa1a12ec0b73a7b767fe51d87ce45b47 Mon Sep 17 00:00:00 2001 From: "jinbiao.sun" Date: Wed, 2 Nov 2022 23:55:25 +0800 Subject: [PATCH 2/3] HADOOP-18502. Fix unit test fail --- .../org/apache/hadoop/metrics2/lib/TestMutableMetrics.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/metrics2/lib/TestMutableMetrics.java b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/metrics2/lib/TestMutableMetrics.java index 608f89807a739..e5fde1b1e2acd 100644 --- a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/metrics2/lib/TestMutableMetrics.java +++ b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/metrics2/lib/TestMutableMetrics.java @@ -303,11 +303,10 @@ private static void snapshotMutableRatesWithAggregation( stat.add(1000, 2000); registry.snapshot(builderWithChange, true); - assertGauge("TestINumOps", 2000L, builderWithChange); + assertCounter("TestNumOps", 2000L, builderWithChange); assertGauge("TestAvgVal", 1.5, builderWithChange); registry.snapshot(builderWithoutChange, true); - assertGauge("TestINumOps", 0L, builderWithoutChange); assertGauge("TestAvgVal", 0.0, builderWithoutChange); } From 62b5511f7394e70ebde80f0e7002b6802662459a Mon Sep 17 00:00:00 2001 From: "jinbiao.sun" Date: Thu, 3 Nov 2022 23:17:45 +0800 Subject: [PATCH 3/3] HADOOP-18502. Add UT for TestINumOps --- .../org/apache/hadoop/metrics2/lib/TestMutableMetrics.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/metrics2/lib/TestMutableMetrics.java b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/metrics2/lib/TestMutableMetrics.java index e5fde1b1e2acd..0938aa92a90d1 100644 --- a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/metrics2/lib/TestMutableMetrics.java +++ b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/metrics2/lib/TestMutableMetrics.java @@ -291,22 +291,23 @@ private static void snapshotMutableRatesWithAggregation( } /** - * MutableStat should output 0 instead of the previous state when there is no change + * MutableStat should output 0 instead of the previous state when there is no change. */ @Test public void testMutableWithoutChanged() { MetricsRecordBuilder builderWithChange = mockMetricsRecordBuilder(); MetricsRecordBuilder builderWithoutChange = mockMetricsRecordBuilder(); MetricsRegistry registry = new MetricsRegistry("test"); - MutableStat stat = registry.newStat("Test", "Test", "Ops", "Val", false); - + MutableStat stat = registry.newStat("Test", "Test", "Ops", "Val", true); stat.add(1000, 1000); stat.add(1000, 2000); registry.snapshot(builderWithChange, true); assertCounter("TestNumOps", 2000L, builderWithChange); + assertGauge("TestINumOps", 2000L, builderWithChange); assertGauge("TestAvgVal", 1.5, builderWithChange); registry.snapshot(builderWithoutChange, true); + assertGauge("TestINumOps", 0L, builderWithoutChange); assertGauge("TestAvgVal", 0.0, builderWithoutChange); }