You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by bb...@apache.org on 2022/12/15 17:03:54 UTC
[hbase] branch branch-2.5 updated: HBASE-27390 getClusterMetrics NullPointerException when ServerTask status null (#4853)
This is an automated email from the ASF dual-hosted git repository.
bbeaudreault pushed a commit to branch branch-2.5
in repository https://gitbox.apache.org/repos/asf/hbase.git
The following commit(s) were added to refs/heads/branch-2.5 by this push:
new 47b12d75f85 HBASE-27390 getClusterMetrics NullPointerException when ServerTask status null (#4853)
47b12d75f85 is described below
commit 47b12d75f85c1e5fe6c4ff393370ce58e3638055
Author: Bri Augenreich <bb...@vt.edu>
AuthorDate: Thu Dec 15 09:46:21 2022 -0500
HBASE-27390 getClusterMetrics NullPointerException when ServerTask status null (#4853)
Signed-off-by: Bryan Beaudreault <bb...@apache.org>
---
.../apache/hadoop/hbase/monitoring/MonitoredRPCHandlerImpl.java | 4 ++--
.../org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.java | 7 ++++++-
.../main/java/org/apache/hadoop/hbase/monitoring/TaskMonitor.java | 6 ++----
.../src/test/java/org/apache/hadoop/hbase/ipc/TestCallRunner.java | 8 ++++----
.../java/org/apache/hadoop/hbase/ipc/TestFifoRpcScheduler.java | 2 +-
.../java/org/apache/hadoop/hbase/ipc/TestSimpleRpcScheduler.java | 8 ++++----
.../java/org/apache/hadoop/hbase/monitoring/TestTaskMonitor.java | 4 +++-
7 files changed, 22 insertions(+), 17 deletions(-)
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/monitoring/MonitoredRPCHandlerImpl.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/monitoring/MonitoredRPCHandlerImpl.java
index 154f3b2e357..81635fa9f1f 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/monitoring/MonitoredRPCHandlerImpl.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/monitoring/MonitoredRPCHandlerImpl.java
@@ -44,8 +44,8 @@ public class MonitoredRPCHandlerImpl extends MonitoredTaskImpl implements Monito
private boolean snapshot = false;
private Map<String, Object> callInfoMap = new HashMap<>();
- public MonitoredRPCHandlerImpl() {
- super(false);
+ public MonitoredRPCHandlerImpl(String description) {
+ super(false, description);
// in this implementation, WAITING indicates that the handler is not
// actively servicing an RPC call.
setState(State.WAITING);
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.java
index 4fee362a735..3dddbc00b5c 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.java
@@ -28,6 +28,7 @@ import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;
import org.apache.hadoop.hbase.util.GsonUtil;
import org.apache.yetus.audience.InterfaceAudience;
+import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;
import org.apache.hbase.thirdparty.com.google.common.collect.ImmutableList;
import org.apache.hbase.thirdparty.com.google.gson.Gson;
@@ -46,11 +47,13 @@ class MonitoredTaskImpl implements MonitoredTask {
private static final Gson GSON = GsonUtil.createGson().create();
- public MonitoredTaskImpl(boolean enableJournal) {
+ public MonitoredTaskImpl(boolean enableJournal, String description) {
startTime = EnvironmentEdgeManager.currentTime();
statusTime = startTime;
stateTime = startTime;
warnTime = startTime;
+ this.description = description;
+ this.status = "status unset";
if (enableJournal) {
journal = new ConcurrentLinkedQueue<>();
} else {
@@ -161,6 +164,7 @@ class MonitoredTaskImpl implements MonitoredTask {
@Override
public void setStatus(String status) {
+ Preconditions.checkNotNull(status, "Status is null");
this.status = status;
statusTime = EnvironmentEdgeManager.currentTime();
if (journal != null) {
@@ -175,6 +179,7 @@ class MonitoredTaskImpl implements MonitoredTask {
@Override
public void setDescription(String description) {
+ Preconditions.checkNotNull(description, "Description is null");
this.description = description;
}
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/monitoring/TaskMonitor.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/monitoring/TaskMonitor.java
index c2425cbbc1f..d012d8229ec 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/monitoring/TaskMonitor.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/monitoring/TaskMonitor.java
@@ -89,8 +89,7 @@ public class TaskMonitor {
}
public synchronized MonitoredTask createStatus(String description, boolean enableJournal) {
- MonitoredTask stat = new MonitoredTaskImpl(enableJournal);
- stat.setDescription(description);
+ MonitoredTask stat = new MonitoredTaskImpl(enableJournal, description);
MonitoredTask proxy = (MonitoredTask) Proxy.newProxyInstance(stat.getClass().getClassLoader(),
new Class<?>[] { MonitoredTask.class }, new PassthroughInvocationHandler<>(stat));
TaskAndWeakRefPair pair = new TaskAndWeakRefPair(stat, proxy);
@@ -102,8 +101,7 @@ public class TaskMonitor {
}
public synchronized MonitoredRPCHandler createRPCStatus(String description) {
- MonitoredRPCHandler stat = new MonitoredRPCHandlerImpl();
- stat.setDescription(description);
+ MonitoredRPCHandler stat = new MonitoredRPCHandlerImpl(description);
MonitoredRPCHandler proxy =
(MonitoredRPCHandler) Proxy.newProxyInstance(stat.getClass().getClassLoader(),
new Class<?>[] { MonitoredRPCHandler.class }, new PassthroughInvocationHandler<>(stat));
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/ipc/TestCallRunner.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/ipc/TestCallRunner.java
index 668d5064fc0..e809b408c65 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/ipc/TestCallRunner.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/ipc/TestCallRunner.java
@@ -81,7 +81,7 @@ public class TestCallRunner {
TraceUtil.trace(() -> {
CallRunner cr = new CallRunner(mockRpcServer, mockCall);
- cr.setStatus(new MonitoredRPCHandlerImpl());
+ cr.setStatus(new MonitoredRPCHandlerImpl("test"));
cr.run();
}, testName.getMethodName());
@@ -101,7 +101,7 @@ public class TestCallRunner {
TraceUtil.trace(() -> {
CallRunner cr = new CallRunner(mockRpcServer, mockCall);
- cr.setStatus(new MonitoredRPCHandlerImpl());
+ cr.setStatus(new MonitoredRPCHandlerImpl("test"));
cr.run();
}, testName.getMethodName());
Mockito.verify(mockCall, Mockito.times(1)).cleanup();
@@ -116,7 +116,7 @@ public class TestCallRunner {
TraceUtil.trace(() -> {
CallRunner cr = new CallRunner(mockRpcServer, mockCall);
- cr.setStatus(new MonitoredRPCHandlerImpl());
+ cr.setStatus(new MonitoredRPCHandlerImpl("test"));
cr.drop();
}, testName.getMethodName());
Mockito.verify(mockCall, Mockito.times(1)).cleanup();
@@ -142,7 +142,7 @@ public class TestCallRunner {
TraceUtil.trace(() -> {
CallRunner cr = new CallRunner(mockRpcServer, mockCall);
- cr.setStatus(new MonitoredRPCHandlerImpl());
+ cr.setStatus(new MonitoredRPCHandlerImpl("test"));
cr.drop();
}, testName.getMethodName());
Mockito.verify(mockCall, Mockito.times(1)).cleanup();
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/ipc/TestFifoRpcScheduler.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/ipc/TestFifoRpcScheduler.java
index beaf6cd9e73..06b25f81ba9 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/ipc/TestFifoRpcScheduler.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/ipc/TestFifoRpcScheduler.java
@@ -113,7 +113,7 @@ public class TestFifoRpcScheduler {
for (int i = totalCallMethods; i > 0; i--) {
CallRunner task = createMockTask();
- task.setStatus(new MonitoredRPCHandlerImpl());
+ task.setStatus(new MonitoredRPCHandlerImpl("test"));
if (!scheduler.dispatch(task)) {
unableToDispatch++;
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/ipc/TestSimpleRpcScheduler.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/ipc/TestSimpleRpcScheduler.java
index 79bc97fb07c..e718f6416c7 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/ipc/TestSimpleRpcScheduler.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/ipc/TestSimpleRpcScheduler.java
@@ -109,7 +109,7 @@ public class TestSimpleRpcScheduler {
scheduler.init(CONTEXT);
scheduler.start();
CallRunner task = createMockTask();
- task.setStatus(new MonitoredRPCHandlerImpl());
+ task.setStatus(new MonitoredRPCHandlerImpl("test"));
scheduler.dispatch(task);
verify(task, timeout(10000)).run();
scheduler.stop();
@@ -164,7 +164,7 @@ public class TestSimpleRpcScheduler {
int totalCallMethods = 10;
for (int i = totalCallMethods; i > 0; i--) {
CallRunner task = createMockTask();
- task.setStatus(new MonitoredRPCHandlerImpl());
+ task.setStatus(new MonitoredRPCHandlerImpl("test"));
scheduler.dispatch(task);
}
@@ -205,7 +205,7 @@ public class TestSimpleRpcScheduler {
}
};
for (CallRunner task : tasks) {
- task.setStatus(new MonitoredRPCHandlerImpl());
+ task.setStatus(new MonitoredRPCHandlerImpl("test"));
doAnswer(answerToRun).when(task).run();
}
@@ -513,7 +513,7 @@ public class TestSimpleRpcScheduler {
private void doAnswerTaskExecution(final CallRunner callTask, final ArrayList<Integer> results,
final int value, final int sleepInterval) {
- callTask.setStatus(new MonitoredRPCHandlerImpl());
+ callTask.setStatus(new MonitoredRPCHandlerImpl("test"));
doAnswer(new Answer<Object>() {
@Override
public Object answer(InvocationOnMock invocation) {
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/monitoring/TestTaskMonitor.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/monitoring/TestTaskMonitor.java
index 70c601c71a9..c84eaeac07c 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/monitoring/TestTaskMonitor.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/monitoring/TestTaskMonitor.java
@@ -63,6 +63,8 @@ public class TestTaskMonitor {
assertEquals(task.getDescription(), taskFromTm.getDescription());
assertEquals(-1, taskFromTm.getCompletionTimestamp());
assertEquals(MonitoredTask.State.RUNNING, taskFromTm.getState());
+ assertEquals(task.getStatus(), taskFromTm.getStatus());
+ assertEquals("status unset", taskFromTm.getStatus());
// Mark it as finished
task.markComplete("Finished!");
@@ -229,7 +231,7 @@ public class TestTaskMonitor {
@Test
public void testClone() throws Exception {
- MonitoredRPCHandlerImpl monitor = new MonitoredRPCHandlerImpl();
+ MonitoredRPCHandlerImpl monitor = new MonitoredRPCHandlerImpl("test");
monitor.abort("abort RPC");
TestParam testParam = new TestParam("param1");
monitor.setRPC("method1", new Object[] { testParam }, 0);