You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by bh...@apache.org on 2019/04/10 17:25:35 UTC
[hadoop] branch trunk updated: HDDS-1370. Command Execution in
Datanode fails because of NPE (#715)
This is an automated email from the ASF dual-hosted git repository.
bharat pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/hadoop.git
The following commit(s) were added to refs/heads/trunk by this push:
new 0e770a6 HDDS-1370. Command Execution in Datanode fails because of NPE (#715)
0e770a6 is described below
commit 0e770a65394a2aeaa56154d200c02afbe5bbb5d7
Author: Bharat Viswanadham <bh...@apache.org>
AuthorDate: Wed Apr 10 10:25:28 2019 -0700
HDDS-1370. Command Execution in Datanode fails because of NPE (#715)
---
.../common/statemachine/StateContext.java | 30 +++++++++++++---------
.../states/datanode/RunningDatanodeState.java | 11 +++++++-
2 files changed, 28 insertions(+), 13 deletions(-)
diff --git a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/statemachine/StateContext.java b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/statemachine/StateContext.java
index 4a979fd..7e06473 100644
--- a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/statemachine/StateContext.java
+++ b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/statemachine/StateContext.java
@@ -348,20 +348,26 @@ public class StateContext {
throws InterruptedException, ExecutionException, TimeoutException {
stateExecutionCount.incrementAndGet();
DatanodeState<DatanodeStateMachine.DatanodeStates> task = getTask();
- if (this.isEntering()) {
- task.onEnter();
- }
- task.execute(service);
- DatanodeStateMachine.DatanodeStates newState = task.await(time, unit);
- if (this.state != newState) {
- if (LOG.isDebugEnabled()) {
- LOG.debug("Task {} executed, state transited from {} to {}",
- task.getClass().getSimpleName(), this.state, newState);
+
+ // Adding not null check, in a case where datanode is still starting up, but
+ // we called stop DatanodeStateMachine, this sets state to SHUTDOWN, and
+ // there is a chance of getting task as null.
+ if (task != null) {
+ if (this.isEntering()) {
+ task.onEnter();
}
- if (isExiting(newState)) {
- task.onExit();
+ task.execute(service);
+ DatanodeStateMachine.DatanodeStates newState = task.await(time, unit);
+ if (this.state != newState) {
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Task {} executed, state transited from {} to {}",
+ task.getClass().getSimpleName(), this.state, newState);
+ }
+ if (isExiting(newState)) {
+ task.onExit();
+ }
+ this.setState(newState);
}
- this.setState(newState);
}
}
diff --git a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/states/datanode/RunningDatanodeState.java b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/states/datanode/RunningDatanodeState.java
index ec2358a..6b596fe 100644
--- a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/states/datanode/RunningDatanodeState.java
+++ b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/states/datanode/RunningDatanodeState.java
@@ -86,7 +86,16 @@ public class RunningDatanodeState implements DatanodeState {
for (EndpointStateMachine endpoint : connectionManager.getValues()) {
Callable<EndpointStateMachine.EndPointStates> endpointTask
= getEndPointTask(endpoint);
- ecs.submit(endpointTask);
+ if (endpointTask != null) {
+ ecs.submit(endpointTask);
+ } else {
+ // This can happen if a task is taking more time than the timeOut
+ // specified for the task in await, and when it is completed the task
+ // has set the state to Shutdown, we may see the state as shutdown
+ // here. So, we need to Shutdown DatanodeStateMachine.
+ LOG.error("State is Shutdown in RunningDatanodeState");
+ context.setState(DatanodeStateMachine.DatanodeStates.SHUTDOWN);
+ }
}
}
//TODO : Cache some of these tasks instead of creating them
---------------------------------------------------------------------
To unsubscribe, e-mail: common-commits-unsubscribe@hadoop.apache.org
For additional commands, e-mail: common-commits-help@hadoop.apache.org