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());
+ }
}