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

smarthi pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-hudi.git


The following commit(s) were added to refs/heads/master by this push:
     new 77d5b92  [HUDI-668] Added additional unit-tests for HUDI metrics. 
(#1380)
77d5b92 is described below

commit 77d5b92d88d6583bdfc09e4c10ecfe7ddbb04806
Author: Prashant Wason <[email protected]>
AuthorDate: Mon Mar 9 20:15:42 2020 -0700

    [HUDI-668] Added additional unit-tests for HUDI metrics. (#1380)
---
 .../apache/hudi/metrics/TestHoodieJmxMetrics.java  |   5 +-
 .../org/apache/hudi/metrics/TestHoodieMetrics.java | 117 ++++++++++++++++++++-
 2 files changed, 119 insertions(+), 3 deletions(-)

diff --git 
a/hudi-client/src/test/java/org/apache/hudi/metrics/TestHoodieJmxMetrics.java 
b/hudi-client/src/test/java/org/apache/hudi/metrics/TestHoodieJmxMetrics.java
index c1e3d61..72b218b 100644
--- 
a/hudi-client/src/test/java/org/apache/hudi/metrics/TestHoodieJmxMetrics.java
+++ 
b/hudi-client/src/test/java/org/apache/hudi/metrics/TestHoodieJmxMetrics.java
@@ -21,6 +21,7 @@ package org.apache.hudi.metrics;
 import org.apache.hudi.config.HoodieMetricsConfig;
 import org.apache.hudi.config.HoodieWriteConfig;
 
+import org.junit.Before;
 import org.junit.Test;
 
 import static org.apache.hudi.metrics.Metrics.registerGauge;
@@ -31,9 +32,9 @@ import static org.mockito.Mockito.when;
 /**
  * Test for the Jmx metrics report.
  */
-public class TestHoodieJmxMetrics extends TestHoodieMetrics {
+public class TestHoodieJmxMetrics {
 
-  @Override
+  @Before
   public void start() {
     HoodieWriteConfig config = mock(HoodieWriteConfig.class);
     when(config.isMetricsOn()).thenReturn(true);
diff --git 
a/hudi-client/src/test/java/org/apache/hudi/metrics/TestHoodieMetrics.java 
b/hudi-client/src/test/java/org/apache/hudi/metrics/TestHoodieMetrics.java
old mode 100644
new mode 100755
index c71092d..d52bf8d
--- a/hudi-client/src/test/java/org/apache/hudi/metrics/TestHoodieMetrics.java
+++ b/hudi-client/src/test/java/org/apache/hudi/metrics/TestHoodieMetrics.java
@@ -18,24 +18,32 @@
 
 package org.apache.hudi.metrics;
 
+import org.apache.hudi.common.model.HoodieCommitMetadata;
 import org.apache.hudi.config.HoodieWriteConfig;
 
 import org.junit.Before;
 import org.junit.Test;
 
+import com.codahale.metrics.Timer;
+
+import java.util.Arrays;
+import java.util.Random;
+
 import static org.apache.hudi.metrics.Metrics.registerGauge;
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
 public class TestHoodieMetrics {
+  private HoodieMetrics metrics;
 
   @Before
   public void start() {
     HoodieWriteConfig config = mock(HoodieWriteConfig.class);
     when(config.isMetricsOn()).thenReturn(true);
     
when(config.getMetricsReporterType()).thenReturn(MetricsReporterType.INMEMORY);
-    new HoodieMetrics(config, "raw_table");
+    metrics = new HoodieMetrics(config, "raw_table");
   }
 
   @Test
@@ -43,4 +51,111 @@ public class TestHoodieMetrics {
     registerGauge("metric1", 123L);
     assertEquals("123", 
Metrics.getInstance().getRegistry().getGauges().get("metric1").getValue().toString());
   }
+
+  @Test
+  public void testTimerCtx() throws InterruptedException {
+    Random rand = new Random();
+
+    // Index metrics
+    Timer.Context timer = metrics.getIndexCtx();
+    Thread.sleep(5); // Ensure timer duration is > 0
+    metrics.updateIndexMetrics("some_action", 
metrics.getDurationInMs(timer.stop()));
+    String metricName = metrics.getMetricsName("index", 
"some_action.duration");
+    long msec = 
(Long)Metrics.getInstance().getRegistry().getGauges().get(metricName).getValue();
+    assertTrue(msec > 0);
+
+    // Rollback metrics
+    timer = metrics.getRollbackCtx();
+    Thread.sleep(5); // Ensure timer duration is > 0
+    long numFilesDeleted = 1 + rand.nextInt();
+    metrics.updateRollbackMetrics(metrics.getDurationInMs(timer.stop()), 
numFilesDeleted);
+    metricName = metrics.getMetricsName("rollback", "duration");
+    msec = 
(Long)Metrics.getInstance().getRegistry().getGauges().get(metricName).getValue();
+    assertTrue(msec > 0);
+    metricName = metrics.getMetricsName("rollback", "numFilesDeleted");
+    
assertEquals((long)Metrics.getInstance().getRegistry().getGauges().get(metricName).getValue(),
 numFilesDeleted);
+
+    // Clean metrics
+    timer = metrics.getRollbackCtx();
+    Thread.sleep(5); // Ensure timer duration is > 0
+    numFilesDeleted = 1 + rand.nextInt();
+    metrics.updateCleanMetrics(metrics.getDurationInMs(timer.stop()), 
(int)numFilesDeleted);
+    metricName = metrics.getMetricsName("clean", "duration");
+    msec = 
(Long)Metrics.getInstance().getRegistry().getGauges().get(metricName).getValue();
+    assertTrue(msec > 0);
+    metricName = metrics.getMetricsName("clean", "numFilesDeleted");
+    
assertEquals((long)Metrics.getInstance().getRegistry().getGauges().get(metricName).getValue(),
 numFilesDeleted);
+
+    // Finalize metrics
+    timer = metrics.getFinalizeCtx();
+    Thread.sleep(5); // Ensure timer duration is > 0
+    long numFilesFinalized = 1 + rand.nextInt();
+    metrics.updateFinalizeWriteMetrics(metrics.getDurationInMs(timer.stop()), 
(int)numFilesFinalized);
+    metricName = metrics.getMetricsName("finalize", "duration");
+    msec = 
(Long)Metrics.getInstance().getRegistry().getGauges().get(metricName).getValue();
+    assertTrue(msec > 0);
+    metricName = metrics.getMetricsName("finalize", "numFilesFinalized");
+    
assertEquals((long)Metrics.getInstance().getRegistry().getGauges().get(metricName).getValue(),
 numFilesFinalized);
+
+    // Commit / deltacommit / compaction metrics
+    Arrays.asList("commit", "deltacommit", 
"compaction").stream().forEach(action -> {
+      Timer.Context commitTimer = action.equals("commit") ? 
metrics.getCommitCtx() :
+          action.equals("deltacommit") ? metrics.getDeltaCommitCtx() : 
metrics.getCompactionCtx();
+
+      try {
+        // Ensure timer duration is > 0
+        Thread.sleep(5);
+      } catch (InterruptedException e) {
+        e.printStackTrace();
+      }
+      long randomValue = 1 + rand.nextInt();
+      HoodieCommitMetadata metadata = mock(HoodieCommitMetadata.class);
+      when(metadata.fetchTotalPartitionsWritten()).thenReturn(randomValue + 1);
+      when(metadata.fetchTotalFilesInsert()).thenReturn(randomValue + 2);
+      when(metadata.fetchTotalFilesUpdated()).thenReturn(randomValue + 3);
+      when(metadata.fetchTotalRecordsWritten()).thenReturn(randomValue + 4);
+      when(metadata.fetchTotalUpdateRecordsWritten()).thenReturn(randomValue + 
5);
+      when(metadata.fetchTotalInsertRecordsWritten()).thenReturn(randomValue + 
6);
+      when(metadata.fetchTotalBytesWritten()).thenReturn(randomValue + 7);
+      when(metadata.getTotalScanTime()).thenReturn(randomValue + 8);
+      when(metadata.getTotalCreateTime()).thenReturn(randomValue + 9);
+      when(metadata.getTotalUpsertTime()).thenReturn(randomValue + 10);
+      when(metadata.getTotalCompactedRecordsUpdated()).thenReturn(randomValue 
+ 11);
+      when(metadata.getTotalLogFilesCompacted()).thenReturn(randomValue + 12);
+      when(metadata.getTotalLogFilesSize()).thenReturn(randomValue + 13);
+      metrics.updateCommitMetrics(randomValue + 14, commitTimer.stop(), 
metadata, action);
+
+      String metricname = metrics.getMetricsName(action, "duration");
+      long duration = 
(Long)Metrics.getInstance().getRegistry().getGauges().get(metricname).getValue();
+      assertTrue(duration > 0);
+      metricname = metrics.getMetricsName(action, "totalPartitionsWritten");
+      
assertEquals((long)Metrics.getInstance().getRegistry().getGauges().get(metricname).getValue(),
 metadata.fetchTotalPartitionsWritten());
+      metricname = metrics.getMetricsName(action, "totalFilesInsert");
+      
assertEquals((long)Metrics.getInstance().getRegistry().getGauges().get(metricname).getValue(),
 metadata.fetchTotalFilesInsert());
+      metricname = metrics.getMetricsName(action, "totalFilesUpdate");
+      
assertEquals((long)Metrics.getInstance().getRegistry().getGauges().get(metricname).getValue(),
 metadata.fetchTotalFilesUpdated());
+      metricname = metrics.getMetricsName(action, "totalRecordsWritten");
+      
assertEquals((long)Metrics.getInstance().getRegistry().getGauges().get(metricname).getValue(),
 metadata.fetchTotalRecordsWritten());
+      metricname = metrics.getMetricsName(action, "totalUpdateRecordsWritten");
+      
assertEquals((long)Metrics.getInstance().getRegistry().getGauges().get(metricname).getValue(),
 metadata.fetchTotalUpdateRecordsWritten());
+      metricname = metrics.getMetricsName(action, "totalInsertRecordsWritten");
+      
assertEquals((long)Metrics.getInstance().getRegistry().getGauges().get(metricname).getValue(),
 metadata.fetchTotalInsertRecordsWritten());
+      metricname = metrics.getMetricsName(action, "totalBytesWritten");
+      
assertEquals((long)Metrics.getInstance().getRegistry().getGauges().get(metricname).getValue(),
 metadata.fetchTotalBytesWritten());
+      metricname = metrics.getMetricsName(action, "commitTime");
+      
assertEquals((long)Metrics.getInstance().getRegistry().getGauges().get(metricname).getValue(),
 randomValue + 14);
+      metricname = metrics.getMetricsName(action, "totalScanTime");
+      
assertEquals(Metrics.getInstance().getRegistry().getGauges().get(metricname).getValue(),
 metadata.getTotalScanTime());
+      metricname = metrics.getMetricsName(action, "totalCreateTime");
+      
assertEquals(Metrics.getInstance().getRegistry().getGauges().get(metricname).getValue(),
 metadata.getTotalCreateTime());
+      metricname = metrics.getMetricsName(action, "totalUpsertTime");
+      
assertEquals(Metrics.getInstance().getRegistry().getGauges().get(metricname).getValue(),
 metadata.getTotalUpsertTime());
+      metricname = metrics.getMetricsName(action, 
"totalCompactedRecordsUpdated");
+      
assertEquals(Metrics.getInstance().getRegistry().getGauges().get(metricname).getValue(),
 metadata.getTotalCompactedRecordsUpdated());
+      metricname = metrics.getMetricsName(action, "totalLogFilesCompacted");
+      
assertEquals(Metrics.getInstance().getRegistry().getGauges().get(metricname).getValue(),
 metadata.getTotalLogFilesCompacted());
+      metricname = metrics.getMetricsName(action, "totalLogFilesSize");
+      
assertEquals(Metrics.getInstance().getRegistry().getGauges().get(metricname).getValue(),
 metadata.getTotalLogFilesSize());
+    });
+  }
 }

Reply via email to