From b684e1c5e0ec09f9e11942bcb9f7c1696ce36f78 Mon Sep 17 00:00:00 2001 From: echonesis Date: Mon, 3 Aug 2026 15:13:10 +0800 Subject: [PATCH 1/2] HDDS-16067. Intermittent timeout in testNodeWithOpenPipelineCanBeDecommissionedAndRecommissioned --- .../node/TestDecommissionAndMaintenance.java | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/hdds/scm/node/TestDecommissionAndMaintenance.java b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/hdds/scm/node/TestDecommissionAndMaintenance.java index 5260c973ba06..59dd7b22115d 100644 --- a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/hdds/scm/node/TestDecommissionAndMaintenance.java +++ b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/hdds/scm/node/TestDecommissionAndMaintenance.java @@ -38,6 +38,7 @@ import static org.apache.hadoop.hdds.scm.node.NodeTestUtil.waitForDnToReachHealthState; import static org.apache.hadoop.hdds.scm.node.NodeTestUtil.waitForDnToReachOpState; import static org.apache.hadoop.hdds.scm.node.NodeTestUtil.waitForDnToReachPersistedOpState; +import static org.apache.hadoop.hdds.upgrade.HDDSLayoutVersionManager.maxLayoutVersion; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -77,6 +78,7 @@ import org.apache.hadoop.ozone.MiniOzoneCluster; import org.apache.hadoop.ozone.MiniOzoneClusterProvider; import org.apache.hadoop.ozone.OzoneConfigKeys; +import org.apache.hadoop.ozone.UniformDatanodesFactory; import org.apache.hadoop.ozone.client.OzoneBucket; import org.apache.hadoop.ozone.client.OzoneClient; import org.apache.ozone.test.GenericTestUtils; @@ -148,7 +150,10 @@ public static void init() { conf.setFromObject(replicationConf); MiniOzoneCluster.Builder builder = MiniOzoneCluster.newBuilder(conf) - .setNumDatanodes(DATANODE_COUNT); + .setNumDatanodes(DATANODE_COUNT) + .setDatanodeFactory(UniformDatanodesFactory.newBuilder() + .setLayoutVersion(maxLayoutVersion()) + .build()); clusterProvider = new MiniOzoneClusterProvider(builder, 9); } @@ -235,11 +240,13 @@ public void testNodeWithOpenPipelineCanBeDecommissionedAndRecommissioned() // In the EC case, there should be 5 online waitForContainerReplicas(ecContainer, 5); - cluster.restartHddsDatanode(dnIndex, true); + cluster.restartHddsDatanode(dnIndex, false); + waitForDnToReachHealthState(nm, toDecommission, HEALTHY); + DatanodeDetails restarted = nm.getNode(dnID); scmClient.recommissionNodes(Arrays.asList( - getDNHostAndPort(toDecommission))); - waitForDnToReachOpState(nm, toDecommission, IN_SERVICE); - waitForDnToReachPersistedOpState(toDecommission, IN_SERVICE); + getDNHostAndPort(restarted))); + waitForDnToReachOpState(nm, restarted, IN_SERVICE); + waitForDnToReachPersistedOpState(restarted, IN_SERVICE); } @Test @@ -481,7 +488,7 @@ public void testSingleNodeWithOpenPipelineCanGotoMaintenance() // has, then the SCM state should be used and the DN state updated. waitForDnToReachHealthState(nm, newDn, HEALTHY); waitForDnToReachOpState(nm, newDn, IN_SERVICE); - waitForDnToReachPersistedOpState(dn, IN_SERVICE); + waitForDnToReachPersistedOpState(newDn, IN_SERVICE); } @Test From 4ce4856d2c36d068c97fa4ea36f8089ecba5de2d Mon Sep 17 00:00:00 2001 From: echonesis Date: Mon, 10 Aug 2026 10:39:50 +0800 Subject: [PATCH 2/2] fix: pin datanode layout version in decommission tests --- .../scm/node/TestDecommissionAndMaintenance.java | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/hdds/scm/node/TestDecommissionAndMaintenance.java b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/hdds/scm/node/TestDecommissionAndMaintenance.java index 59dd7b22115d..754fd4a3297f 100644 --- a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/hdds/scm/node/TestDecommissionAndMaintenance.java +++ b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/hdds/scm/node/TestDecommissionAndMaintenance.java @@ -240,13 +240,11 @@ public void testNodeWithOpenPipelineCanBeDecommissionedAndRecommissioned() // In the EC case, there should be 5 online waitForContainerReplicas(ecContainer, 5); - cluster.restartHddsDatanode(dnIndex, false); - waitForDnToReachHealthState(nm, toDecommission, HEALTHY); - DatanodeDetails restarted = nm.getNode(dnID); + cluster.restartHddsDatanode(dnIndex, true); scmClient.recommissionNodes(Arrays.asList( - getDNHostAndPort(restarted))); - waitForDnToReachOpState(nm, restarted, IN_SERVICE); - waitForDnToReachPersistedOpState(restarted, IN_SERVICE); + getDNHostAndPort(toDecommission))); + waitForDnToReachOpState(nm, toDecommission, IN_SERVICE); + waitForDnToReachPersistedOpState(toDecommission, IN_SERVICE); } @Test @@ -488,7 +486,7 @@ public void testSingleNodeWithOpenPipelineCanGotoMaintenance() // has, then the SCM state should be used and the DN state updated. waitForDnToReachHealthState(nm, newDn, HEALTHY); waitForDnToReachOpState(nm, newDn, IN_SERVICE); - waitForDnToReachPersistedOpState(newDn, IN_SERVICE); + waitForDnToReachPersistedOpState(dn, IN_SERVICE); } @Test