You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by vj...@apache.org on 2021/05/08 07:38:06 UTC

[hbase] branch branch-2 updated: HBASE-25860 Add metric for successful wal roll requests. (#3238)

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

vjasani pushed a commit to branch branch-2
in repository https://gitbox.apache.org/repos/asf/hbase.git


The following commit(s) were added to refs/heads/branch-2 by this push:
     new 90dc150  HBASE-25860 Add metric for successful wal roll requests. (#3238)
90dc150 is described below

commit 90dc150b1b0d9e91897028a2619171f13bfa9792
Author: Rushabh Shah <sh...@gmail.com>
AuthorDate: Sat May 8 03:28:29 2021 -0400

    HBASE-25860 Add metric for successful wal roll requests. (#3238)
    
    Signed-off-by: Viraj Jasani <vj...@apache.org>
---
 .../hbase/regionserver/wal/MetricsWALSource.java   |  9 +++++++
 .../regionserver/wal/MetricsWALSourceImpl.java     | 13 ++++++++++
 .../hadoop/hbase/regionserver/wal/MetricsWAL.java  | 12 ++++++++-
 .../hbase/regionserver/wal/TestMetricsWAL.java     | 29 +++++++++++++++++++++-
 4 files changed, 61 insertions(+), 2 deletions(-)

diff --git a/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.java b/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.java
index b179b91..4a430cd 100644
--- a/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.java
+++ b/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.java
@@ -76,6 +76,8 @@ public interface MetricsWALSource extends BaseSource {
       "How many times a roll was requested due to file size roll threshold.";
   String WRITTEN_BYTES = "writtenBytes";
   String WRITTEN_BYTES_DESC = "Size (in bytes) of the data written to the WAL.";
+  String SUCCESSFUL_LOG_ROLLS = "successfulLogRolls";
+  String SUCCESSFUL_LOG_ROLLS_DESC = "Number of successful log rolls requests";
 
   /**
    * Add the append size.
@@ -115,4 +117,11 @@ public interface MetricsWALSource extends BaseSource {
   void incrementSizeLogRoll();
 
   void incrementWrittenBytes(long val);
+
+  /**
+   * Increment the number of successful log roll requests.
+   */
+  void incrementSuccessfulLogRolls();
+
+  long getSuccessfulLogRolls();
 }
diff --git a/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.java b/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.java
index d308913..4f71681 100644
--- a/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.java
+++ b/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.java
@@ -46,6 +46,7 @@ public class MetricsWALSourceImpl extends BaseSourceImpl implements MetricsWALSo
   private final MutableFastCounter slowSyncRollRequested;
   private final MutableFastCounter sizeRollRequested;
   private final MutableFastCounter writtenBytes;
+  private final MutableFastCounter successfulLogRolls;
   // Per table metrics.
   private final ConcurrentMap<TableName, MutableFastCounter> perTableAppendCount;
   private final ConcurrentMap<TableName, MutableFastCounter> perTableAppendSize;
@@ -78,6 +79,8 @@ public class MetricsWALSourceImpl extends BaseSourceImpl implements MetricsWALSo
     sizeRollRequested = this.getMetricsRegistry()
         .newCounter(SIZE_ROLL_REQUESTED, SIZE_ROLL_REQUESTED_DESC, 0L);
     writtenBytes = this.getMetricsRegistry().newCounter(WRITTEN_BYTES, WRITTEN_BYTES_DESC, 0L);
+    successfulLogRolls = this.getMetricsRegistry()
+      .newCounter(SUCCESSFUL_LOG_ROLLS, SUCCESSFUL_LOG_ROLLS_DESC, 0L);
     perTableAppendCount = new ConcurrentHashMap<>();
     perTableAppendSize = new ConcurrentHashMap<>();
   }
@@ -159,4 +162,14 @@ public class MetricsWALSourceImpl extends BaseSourceImpl implements MetricsWALSo
   public void incrementWrittenBytes(long val) {
     writtenBytes.incr(val);
   }
+
+  @Override
+  public void incrementSuccessfulLogRolls() {
+    successfulLogRolls.incr();
+  }
+
+  @Override
+  public long getSuccessfulLogRolls() {
+    return successfulLogRolls.value();
+  }
 }
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/MetricsWAL.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/MetricsWAL.java
index ce82a6c..4d0619c 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/MetricsWAL.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/MetricsWAL.java
@@ -21,13 +21,14 @@ package org.apache.hadoop.hbase.regionserver.wal;
 
 import java.io.IOException;
 
+import org.apache.hadoop.fs.Path;
+import org.apache.hadoop.hbase.CompatibilitySingletonFactory;
 import org.apache.hadoop.hbase.TableName;
 import org.apache.yetus.audience.InterfaceAudience;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.apache.hadoop.hbase.wal.WALEdit;
 import org.apache.hadoop.hbase.wal.WALKey;
-import org.apache.hadoop.hbase.CompatibilitySingletonFactory;
 import org.apache.hadoop.util.StringUtils;
 
 /**
@@ -91,4 +92,13 @@ public class MetricsWAL implements WALActionsListener {
         break;
     }
   }
+
+  @Override
+  public void postLogRoll(Path oldPath, Path newPath) {
+    // oldPath can be null if this is the first time we created a wal
+    // Also newPath can be equal to oldPath if AbstractFSWAL#replaceWriter fails
+    if (newPath != oldPath) {
+      source.incrementSuccessfulLogRolls();
+    }
+  }
 }
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestMetricsWAL.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestMetricsWAL.java
index 14d0a88..5743302 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestMetricsWAL.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestMetricsWAL.java
@@ -24,6 +24,7 @@ import static org.mockito.Mockito.verify;
 
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
+import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.hbase.HBaseClassTestRule;
 import org.apache.hadoop.hbase.TableName;
 import org.apache.hadoop.hbase.testclassification.MiscTests;
@@ -32,11 +33,15 @@ import org.apache.hadoop.hbase.wal.WALKey;
 import org.apache.hadoop.hbase.wal.WALKeyImpl;
 import org.apache.hadoop.metrics2.lib.DynamicMetricsRegistry;
 import org.junit.ClassRule;
+import org.junit.Rule;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
+import org.junit.rules.TestName;
 
 @Category({MiscTests.class, SmallTests.class})
 public class TestMetricsWAL {
+  @Rule
+  public TestName name = new TestName();
 
   @ClassRule
   public static final HBaseClassTestRule CLASS_RULE =
@@ -74,7 +79,8 @@ public class TestMetricsWAL {
 
   @Test
   public void testSlowAppend() throws Exception {
-    MetricsWALSource source = new MetricsWALSourceImpl();
+    String testName = name.getMethodName();
+    MetricsWALSource source = new MetricsWALSourceImpl(testName, testName, testName, testName);
     MetricsWAL metricsWAL = new MetricsWAL(source);
     TableName tableName = TableName.valueOf("foo");
     WALKey walKey = new WALKeyImpl(null, tableName, -1);
@@ -129,4 +135,25 @@ public class TestMetricsWAL {
       assertEquals(i * numIters, tableAppendSize);
     }
   }
+
+  @Test
+  public void testLogRolls() {
+    String testName = name.getMethodName();
+    MetricsWALSource source = new MetricsWALSourceImpl(testName, testName, testName, testName);
+    MetricsWAL metricsWAL = new MetricsWAL(source);
+    Path path1 = new Path("path-1");
+    int count = 1;
+    // oldPath is null but newPath is not null;
+    metricsWAL.postLogRoll(null, path1);
+    assertEquals(count, source.getSuccessfulLogRolls());
+
+    // Simulating a case where AbstractFSWAL#replaceWriter fails
+    metricsWAL.postLogRoll(path1, path1);
+    assertEquals(count, source.getSuccessfulLogRolls());
+
+    count++;
+    Path path2 = new Path("path-2");
+    metricsWAL.postLogRoll(path1, path2);
+    assertEquals(count, source.getSuccessfulLogRolls());
+  }
 }