diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/block/SCMBlockDeletingService.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/block/SCMBlockDeletingService.java index 5fd889b75833..be20dbd61bd6 100644 --- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/block/SCMBlockDeletingService.java +++ b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/block/SCMBlockDeletingService.java @@ -235,10 +235,12 @@ public int getBlockDeleteTXNum() { public void notifyStatusChanged() { serviceLock.lock(); try { - if (scmContext.isLeaderReady() && !scmContext.isInSafeMode() && - serviceStatus != ServiceStatus.RUNNING) { - safemodeExitMillis = clock.millis(); - serviceStatus = ServiceStatus.RUNNING; + if (scmContext.isLeaderReady() && !scmContext.isInSafeMode()) { + if (serviceStatus != ServiceStatus.RUNNING) { + LOG.info("notifyStatusChanged" + ":" + ServiceStatus.RUNNING); + safemodeExitMillis = clock.millis(); + serviceStatus = ServiceStatus.RUNNING; + } } else { serviceStatus = ServiceStatus.PAUSING; } diff --git a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/container/common/statemachine/commandhandler/TestBlockDeletion.java b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/container/common/statemachine/commandhandler/TestBlockDeletion.java index a08419807230..b51e9b6b57c7 100644 --- a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/container/common/statemachine/commandhandler/TestBlockDeletion.java +++ b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/container/common/statemachine/commandhandler/TestBlockDeletion.java @@ -168,6 +168,7 @@ public void init() throws Exception { 0, TimeUnit.MILLISECONDS); conf.setInt("hdds.datanode.block.delete.threads.max", 5); + conf.setInt("hdds.datanode.block.delete.queue.limit", 32); ReplicationManager.ReplicationManagerConfiguration replicationConf = conf .getObject(ReplicationManager.ReplicationManagerConfiguration.class); replicationConf.setInterval(Duration.ofSeconds(300)); @@ -292,11 +293,6 @@ public void testBlockDeletion(ReplicationConfig repConfig) throws Exception { Assertions.assertFalse(containerIdsWithDeletedBlocks.isEmpty()); // Containers in the DN and SCM should have same delete transactionIds matchContainerTransactionIds(); - // Containers in the DN and SCM should have same delete transactionIds - // after DN restart. The assertion is just to verify that the state of - // containerInfos in dn and scm is consistent after dn restart. - cluster.restartHddsDatanode(0, true); - matchContainerTransactionIds(); // Verify transactions committed GenericTestUtils.waitFor(() -> { @@ -308,6 +304,13 @@ public void testBlockDeletion(ReplicationConfig repConfig) throws Exception { return false; } }, 500, 10000); + + // Containers in the DN and SCM should have same delete transactionIds + // after DN restart. The assertion is just to verify that the state of + // containerInfos in dn and scm is consistent after dn restart. + cluster.restartHddsDatanode(0, true); + matchContainerTransactionIds(); + Assertions.assertEquals(metrics.getNumBlockDeletionTransactionCreated(), metrics.getNumBlockDeletionTransactionCompleted()); Assertions.assertTrue(metrics.getNumBlockDeletionCommandSent() >=