From 7b3179f55172b39c50802caaa4da517d508d7670 Mon Sep 17 00:00:00 2001 From: Nanda kumar Date: Sat, 27 Jan 2018 16:24:24 +0530 Subject: [PATCH] HDFS-13072. Ozone: DatanodeStateMachine: Handling Uncaught Exception in command handler thread. Contributed by Nanda kumar. --- .../statemachine/DatanodeStateMachine.java | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/container/common/statemachine/DatanodeStateMachine.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/container/common/statemachine/DatanodeStateMachine.java index c264650162..de55d96d29 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/container/common/statemachine/DatanodeStateMachine.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/container/common/statemachine/DatanodeStateMachine.java @@ -356,17 +356,22 @@ public class DatanodeStateMachine implements Closeable { }; // We will have only one thread for command processing in a datanode. - cmdProcessThread = new Thread(processCommandQueue); - cmdProcessThread.setDaemon(true); - cmdProcessThread.setName("Command processor thread"); - cmdProcessThread.setUncaughtExceptionHandler((Thread t, Throwable e) -> { + cmdProcessThread = getCommandHandlerThread(processCommandQueue); + cmdProcessThread.start(); + } + + private Thread getCommandHandlerThread(Runnable processCommandQueue) { + Thread handlerThread = new Thread(processCommandQueue); + handlerThread.setDaemon(true); + handlerThread.setName("Command processor thread"); + handlerThread.setUncaughtExceptionHandler((Thread t, Throwable e) -> { // Let us just restart this thread after logging a critical error. // if this thread is not running we cannot handle commands from SCM. LOG.error("Critical Error : Command processor thread encountered an " + "error. Thread: {}", t.toString(), e); - cmdProcessThread.start(); + getCommandHandlerThread(processCommandQueue).start(); }); - cmdProcessThread.start(); + return handlerThread; } /**