diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/chillmode/ChillModeHandler.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/chillmode/ChillModeHandler.java index fff1fb2463..ae41821c0f 100644 --- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/chillmode/ChillModeHandler.java +++ b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/chillmode/ChillModeHandler.java @@ -88,16 +88,25 @@ public ChillModeHandler(Configuration configuration, @Override public void onMessage(ChillModeStatus chillModeStatus, EventPublisher publisher) { - try { - isInChillMode.set(chillModeStatus.getChillModeStatus()); - scmClientProtocolServer.setChillModeStatus(isInChillMode.get()); - scmBlockManager.setChillModeStatus(isInChillMode.get()); - Thread.sleep(waitTime); - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - } finally { - replicationManager.start(); + + isInChillMode.set(chillModeStatus.getChillModeStatus()); + scmClientProtocolServer.setChillModeStatus(isInChillMode.get()); + scmBlockManager.setChillModeStatus(isInChillMode.get()); + + if (!isInChillMode.get()) { + final Thread chillModeExitThread = new Thread(() -> { + try { + Thread.sleep(waitTime); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } + replicationManager.start(); + }); + + chillModeExitThread.setDaemon(true); + chillModeExitThread.start(); } + } public boolean getChillModeStatus() {