From 7648fb539e8d3f2c582ec47bb0ac28929d236012 Mon Sep 17 00:00:00 2001 From: ashishk Date: Tue, 8 Apr 2025 16:03:44 +0530 Subject: [PATCH 1/2] HDDS-11856. Set StateMachine thread priority higher than CommandHandler thread. --- .../statemachine/DatanodeStateMachine.java | 13 ++++++++++++ .../common/TestDatanodeStateMachine.java | 20 +++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/statemachine/DatanodeStateMachine.java b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/statemachine/DatanodeStateMachine.java index e4d2050e4274..d08a10bebe93 100644 --- a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/statemachine/DatanodeStateMachine.java +++ b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/statemachine/DatanodeStateMachine.java @@ -555,6 +555,7 @@ public void startDaemon() { ExitUtils.terminate(1, message, ex, LOG); }) .build().newThread(startStateMachineTask); + stateMachineThread.setPriority(Thread.MAX_PRIORITY); stateMachineThread.start(); } @@ -678,6 +679,7 @@ private void initCommandHandlerThread(ConfigurationSource config) { // We will have only one thread for command processing in a datanode. cmdProcessThread = getCommandHandlerThread(processCommandQueue); + cmdProcessThread.setPriority(Thread.NORM_PRIORITY); cmdProcessThread.start(); } @@ -745,4 +747,15 @@ public DatanodeQueueMetrics getQueueMetrics() { public ReconfigurationHandler getReconfigurationHandler() { return reconfigurationHandler; } + + @VisibleForTesting + public Thread getStateMachineThread() { + return stateMachineThread; + } + + @VisibleForTesting + public Thread getCmdProcessThread() { + return cmdProcessThread; + } + } diff --git a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/common/TestDatanodeStateMachine.java b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/common/TestDatanodeStateMachine.java index 0ee12be72363..064e8424a9e5 100644 --- a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/common/TestDatanodeStateMachine.java +++ b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/common/TestDatanodeStateMachine.java @@ -404,6 +404,26 @@ public void testDatanodeStateMachineWithInvalidConfiguration() }); } + @Test + public void testStateMachineThreadPriority() throws Exception { + DatanodeDetails datanodeDetails = getNewDatanodeDetails(); + DatanodeDetails.Port port = DatanodeDetails.newStandalonePort( + OzoneConfigKeys.HDDS_CONTAINER_IPC_PORT_DEFAULT); + datanodeDetails.setPort(port); + try (DatanodeStateMachine stateMachine = + new DatanodeStateMachine(datanodeDetails, conf)) { + stateMachine.startDaemon(); + + // Wait for CmdProcessThread to initialize + GenericTestUtils.waitFor(() + -> stateMachine.getCmdProcessThread() != null, 100, 3000); + Thread stateMachineThread = stateMachine.getStateMachineThread(); + Thread cmdProcessThread = stateMachine.getCmdProcessThread(); + // stateMachineThread priority is higher than cmdProcessThread + assertTrue(stateMachineThread.getPriority() > cmdProcessThread.getPriority()); + } + } + private DatanodeDetails getNewDatanodeDetails() { DatanodeDetails.Port containerPort = DatanodeDetails.newStandalonePort(0); DatanodeDetails.Port ratisPort = DatanodeDetails.newRatisPort(0); From e8b9622941618ee74b64c586f3e87a32834545a1 Mon Sep 17 00:00:00 2001 From: ashishk Date: Thu, 10 Apr 2025 12:25:44 +0530 Subject: [PATCH 2/2] Fix review comment --- .../container/common/statemachine/DatanodeStateMachine.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/statemachine/DatanodeStateMachine.java b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/statemachine/DatanodeStateMachine.java index d08a10bebe93..f10adecd0ffc 100644 --- a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/statemachine/DatanodeStateMachine.java +++ b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/statemachine/DatanodeStateMachine.java @@ -748,12 +748,10 @@ public ReconfigurationHandler getReconfigurationHandler() { return reconfigurationHandler; } - @VisibleForTesting public Thread getStateMachineThread() { return stateMachineThread; } - @VisibleForTesting public Thread getCmdProcessThread() { return cmdProcessThread; }