You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by bh...@apache.org on 2019/04/12 16:40:34 UTC

[hadoop] branch trunk updated: HDDS-1285. Implement actions need to be taken after chill mode exit wait time. (#612)

This is an automated email from the ASF dual-hosted git repository.

bharat pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/hadoop.git


The following commit(s) were added to refs/heads/trunk by this push:
     new a458c5b  HDDS-1285. Implement actions need to be taken after chill mode exit wait time. (#612)
a458c5b is described below

commit a458c5bd965d88cc8c786caf4f44a2cc7ada2306
Author: Bharat Viswanadham <bh...@apache.org>
AuthorDate: Fri Apr 12 09:40:27 2019 -0700

    HDDS-1285. Implement actions need to be taken after chill mode exit wait time. (#612)
---
 .../hdds/scm/chillmode/ChillModeHandler.java       |  32 +++-
 .../hdds/scm/server/StorageContainerManager.java   |  13 +-
 .../hdds/scm/chillmode/TestChillModeHandler.java   |   6 +-
 .../scm/server/TestSCMClientProtocolServer.java    |   6 +-
 .../TestSCMChillModeWithPipelineRules.java         | 202 +++++++++++++++++++++
 .../TestContainerStateManagerIntegration.java      |   2 +-
 .../hadoop/hdds/scm/pipeline/TestSCMRestart.java   |   2 +-
 .../org/apache/hadoop/ozone/MiniOzoneCluster.java  |   6 +-
 .../apache/hadoop/ozone/MiniOzoneClusterImpl.java  |   6 +-
 .../apache/hadoop/ozone/TestMiniOzoneCluster.java  |   2 +-
 .../apache/hadoop/ozone/om/TestScmChillMode.java   |   2 +-
 11 files changed, 267 insertions(+), 12 deletions(-)

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 ae41821..fcad6e5 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
@@ -21,11 +21,17 @@ import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hdds.HddsConfigKeys;
 import org.apache.hadoop.hdds.scm.block.BlockManager;
 import org.apache.hadoop.hdds.scm.container.ReplicationManager;
+import org.apache.hadoop.hdds.scm.pipeline.Pipeline;
+import org.apache.hadoop.hdds.scm.pipeline.PipelineManager;
 import org.apache.hadoop.hdds.scm.server.SCMClientProtocolServer;
 import org.apache.hadoop.hdds.scm.chillmode.SCMChillModeManager.ChillModeStatus;
 import org.apache.hadoop.hdds.server.events.EventHandler;
 import org.apache.hadoop.hdds.server.events.EventPublisher;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
+import java.io.IOException;
+import java.util.List;
 import java.util.Objects;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
@@ -36,12 +42,16 @@ import java.util.concurrent.atomic.AtomicBoolean;
  */
 public class ChillModeHandler implements EventHandler<ChillModeStatus> {
 
+  private static final Logger LOG =
+      LoggerFactory.getLogger(ChillModeHandler.class);
+
   private final SCMClientProtocolServer scmClientProtocolServer;
   private final BlockManager scmBlockManager;
   private final long waitTime;
   private final AtomicBoolean isInChillMode = new AtomicBoolean(true);
   private final ReplicationManager replicationManager;
 
+  private final PipelineManager scmPipelineManager;
 
   /**
    * ChillModeHandler, to handle the logic once we exit chill mode.
@@ -53,13 +63,15 @@ public class ChillModeHandler implements EventHandler<ChillModeStatus> {
   public ChillModeHandler(Configuration configuration,
       SCMClientProtocolServer clientProtocolServer,
       BlockManager blockManager,
-      ReplicationManager replicationManager) {
+      ReplicationManager replicationManager, PipelineManager pipelineManager) {
     Objects.requireNonNull(configuration, "Configuration cannot be null");
     Objects.requireNonNull(clientProtocolServer, "SCMClientProtocolServer " +
         "object cannot be null");
     Objects.requireNonNull(blockManager, "BlockManager object cannot be null");
     Objects.requireNonNull(replicationManager, "ReplicationManager " +
         "object cannot be null");
+    Objects.requireNonNull(pipelineManager, "PipelineManager object cannot " +
+        "be" + "null");
     this.waitTime = configuration.getTimeDuration(
         HddsConfigKeys.HDDS_SCM_WAIT_TIME_AFTER_CHILL_MODE_EXIT,
         HddsConfigKeys.HDDS_SCM_WAIT_TIME_AFTER_CHILL_MODE_EXIT_DEFAULT,
@@ -67,6 +79,7 @@ public class ChillModeHandler implements EventHandler<ChillModeStatus> {
     this.scmClientProtocolServer = clientProtocolServer;
     this.scmBlockManager = blockManager;
     this.replicationManager = replicationManager;
+    this.scmPipelineManager = pipelineManager;
 
     final boolean chillModeEnabled = configuration.getBoolean(
         HddsConfigKeys.HDDS_SCM_CHILLMODE_ENABLED,
@@ -75,6 +88,8 @@ public class ChillModeHandler implements EventHandler<ChillModeStatus> {
 
   }
 
+
+
   /**
    * Set ChillMode status based on
    * {@link org.apache.hadoop.hdds.scm.events.SCMEvents#CHILL_MODE_STATUS}.
@@ -101,6 +116,7 @@ public class ChillModeHandler implements EventHandler<ChillModeStatus> {
           Thread.currentThread().interrupt();
         }
         replicationManager.start();
+        cleanupPipelines();
       });
 
       chillModeExitThread.setDaemon(true);
@@ -109,6 +125,20 @@ public class ChillModeHandler implements EventHandler<ChillModeStatus> {
 
   }
 
+  private void cleanupPipelines() {
+    List<Pipeline> pipelineList = scmPipelineManager.getPipelines();
+    pipelineList.forEach((pipeline) -> {
+      try {
+        if (pipeline.getPipelineState() == Pipeline.PipelineState.ALLOCATED) {
+          scmPipelineManager.finalizeAndDestroyPipeline(pipeline, false);
+        }
+      } catch (IOException ex) {
+        LOG.error("Finalize and destroy pipeline failed for pipeline "
+            + pipeline.toString(), ex);
+      }
+    });
+  }
+
   public boolean getChillModeStatus() {
     return isInChillMode.get();
   }
diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/StorageContainerManager.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/StorageContainerManager.java
index 79565f0..7ddc08f 100644
--- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/StorageContainerManager.java
+++ b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/StorageContainerManager.java
@@ -335,7 +335,8 @@ public final class StorageContainerManager extends ServiceRuntimeInfoImpl
     httpServer = new StorageContainerManagerHttpServer(conf);
 
     chillModeHandler = new ChillModeHandler(configuration,
-        clientProtocolServer, scmBlockManager, replicationManager);
+        clientProtocolServer, scmBlockManager, replicationManager,
+        pipelineManager);
 
     eventQueue.addHandler(SCMEvents.DATANODE_COMMAND, scmNodeManager);
     eventQueue.addHandler(SCMEvents.RETRIABLE_DATANODE_COMMAND, scmNodeManager);
@@ -1077,6 +1078,16 @@ public final class StorageContainerManager extends ServiceRuntimeInfoImpl
     return chillModeHandler;
   }
 
+  @VisibleForTesting
+  public SCMChillModeManager getScmChillModeManager() {
+    return scmChillModeManager;
+  }
+
+  @VisibleForTesting
+  public ReplicationManager getReplicationManager() {
+    return replicationManager;
+  }
+
   public void checkAdminAccess(String remoteUser) throws IOException {
     if (remoteUser != null) {
       if (!scmAdminUsernames.contains(remoteUser)) {
diff --git a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/chillmode/TestChillModeHandler.java b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/chillmode/TestChillModeHandler.java
index 7c9f98e..8ef555c 100644
--- a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/chillmode/TestChillModeHandler.java
+++ b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/chillmode/TestChillModeHandler.java
@@ -27,6 +27,8 @@ import org.apache.hadoop.hdds.scm.container.ReplicationManager;
 import org.apache.hadoop.hdds.scm.container.placement.algorithms
     .ContainerPlacementPolicy;
 import org.apache.hadoop.hdds.scm.events.SCMEvents;
+import org.apache.hadoop.hdds.scm.pipeline.PipelineManager;
+import org.apache.hadoop.hdds.scm.pipeline.SCMPipelineManager;
 import org.apache.hadoop.hdds.scm.server.SCMClientProtocolServer;
 import org.apache.hadoop.hdds.server.events.EventQueue;
 import org.apache.hadoop.test.GenericTestUtils;
@@ -49,6 +51,7 @@ public class TestChillModeHandler {
   private ChillModeHandler chillModeHandler;
   private EventQueue eventQueue;
   private SCMChillModeManager.ChillModeStatus chillModeStatus;
+  private PipelineManager scmPipelineManager;
 
   public void setup(boolean enabled) {
     configuration = new OzoneConfiguration();
@@ -66,10 +69,11 @@ public class TestChillModeHandler {
     replicationManager = new ReplicationManager(configuration,
         containerManager, Mockito.mock(ContainerPlacementPolicy.class),
         eventQueue);
+    scmPipelineManager = Mockito.mock(SCMPipelineManager.class);
     blockManager = Mockito.mock(BlockManagerImpl.class);
     chillModeHandler =
         new ChillModeHandler(configuration, scmClientProtocolServer,
-            blockManager, replicationManager);
+            blockManager, replicationManager, scmPipelineManager);
 
     eventQueue.addHandler(SCMEvents.CHILL_MODE_STATUS, chillModeHandler);
     chillModeStatus = new SCMChillModeManager.ChillModeStatus(false);
diff --git a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/server/TestSCMClientProtocolServer.java b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/server/TestSCMClientProtocolServer.java
index ea59af3..9181ed6 100644
--- a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/server/TestSCMClientProtocolServer.java
+++ b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/server/TestSCMClientProtocolServer.java
@@ -27,6 +27,8 @@ import org.apache.hadoop.hdds.scm.chillmode.ChillModeHandler;
 import org.apache.hadoop.hdds.scm.container.ReplicationManager;
 import org.apache.hadoop.hdds.scm.events.SCMEvents;
 import org.apache.hadoop.hdds.scm.exceptions.SCMException;
+import org.apache.hadoop.hdds.scm.pipeline.PipelineManager;
+import org.apache.hadoop.hdds.scm.pipeline.SCMPipelineManager;
 import org.apache.hadoop.hdds.server.events.EventQueue;
 import org.apache.hadoop.test.LambdaTestUtils;
 import org.junit.After;
@@ -50,8 +52,10 @@ public class TestSCMClientProtocolServer {
     BlockManager blockManager = Mockito.mock(BlockManagerImpl.class);
     ReplicationManager replicationManager =
         Mockito.mock(ReplicationManager.class);
+    PipelineManager pipelineManager = Mockito.mock(SCMPipelineManager.class);
     ChillModeHandler chillModeHandler = new ChillModeHandler(config,
-        scmClientProtocolServer, blockManager, replicationManager);
+        scmClientProtocolServer, blockManager, replicationManager,
+        pipelineManager);
     eventQueue.addHandler(SCMEvents.CHILL_MODE_STATUS, chillModeHandler);
   }
 
diff --git a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/hdds/scm/chillmode/TestSCMChillModeWithPipelineRules.java b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/hdds/scm/chillmode/TestSCMChillModeWithPipelineRules.java
new file mode 100644
index 0000000..7e9b54b
--- /dev/null
+++ b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/hdds/scm/chillmode/TestSCMChillModeWithPipelineRules.java
@@ -0,0 +1,202 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hadoop.hdds.scm.chillmode;
+
+import org.apache.hadoop.hdds.HddsConfigKeys;
+import org.apache.hadoop.hdds.conf.OzoneConfiguration;
+import org.apache.hadoop.hdds.protocol.DatanodeDetails;
+import org.apache.hadoop.hdds.protocol.proto.HddsProtos;
+import org.apache.hadoop.hdds.scm.ScmConfigKeys;
+import org.apache.hadoop.hdds.scm.container.ReplicationManager;
+import org.apache.hadoop.hdds.scm.pipeline.Pipeline;
+import org.apache.hadoop.hdds.scm.pipeline.PipelineManager;
+import org.apache.hadoop.hdds.scm.server.StorageContainerManager;
+import org.apache.hadoop.ozone.MiniOzoneCluster;
+import org.apache.hadoop.test.GenericTestUtils;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TemporaryFolder;
+
+import java.util.List;
+import java.util.concurrent.TimeoutException;
+
+import static org.junit.Assert.fail;
+
+/**
+ * This class tests SCM Chill mode with pipeline rules.
+ */
+
+public class TestSCMChillModeWithPipelineRules {
+
+  private static MiniOzoneCluster cluster;
+  private OzoneConfiguration conf = new OzoneConfiguration();
+  private PipelineManager pipelineManager;
+  private MiniOzoneCluster.Builder clusterBuilder;
+
+  @Rule
+  public TemporaryFolder temporaryFolder = new TemporaryFolder();
+
+  public void setup(int numDatanodes) throws Exception {
+    conf.set(HddsConfigKeys.OZONE_METADATA_DIRS,
+        temporaryFolder.newFolder().toString());
+    conf.setBoolean(
+        HddsConfigKeys.HDDS_SCM_CHILLMODE_PIPELINE_AVAILABILITY_CHECK,
+        true);
+    conf.set(HddsConfigKeys.HDDS_SCM_WAIT_TIME_AFTER_CHILL_MODE_EXIT, "10s");
+    conf.set(ScmConfigKeys.OZONE_SCM_PIPELINE_CREATION_INTERVAL, "10s");
+    clusterBuilder = MiniOzoneCluster.newBuilder(conf)
+        .setNumDatanodes(numDatanodes)
+        .setHbInterval(1000)
+        .setHbProcessorInterval(1000);
+
+    cluster = clusterBuilder.build();
+    cluster.waitForClusterToBeReady();
+    StorageContainerManager scm = cluster.getStorageContainerManager();
+    pipelineManager = scm.getPipelineManager();
+  }
+
+
+  @Test
+  public void testScmChillMode() throws Exception {
+
+    int datanodeCount = 6;
+    setup(datanodeCount);
+
+    waitForRatis3NodePipelines(datanodeCount/3);
+    waitForRatis1NodePipelines(datanodeCount);
+
+    int totalPipelineCount = datanodeCount + (datanodeCount/3);
+
+    //Cluster is started successfully
+    cluster.stop();
+
+    cluster.restartOzoneManager();
+    cluster.restartStorageContainerManager(false);
+
+    pipelineManager = cluster.getStorageContainerManager().getPipelineManager();
+    List<Pipeline> pipelineList =
+        pipelineManager.getPipelines(HddsProtos.ReplicationType.RATIS,
+            HddsProtos.ReplicationFactor.THREE);
+
+
+    pipelineList.get(0).getNodes().forEach(datanodeDetails -> {
+      try {
+        cluster.restartHddsDatanode(datanodeDetails, false);
+      } catch (Exception ex) {
+        fail("Datanode restart failed");
+      }
+    });
+
+
+    SCMChillModeManager scmChillModeManager =
+        cluster.getStorageContainerManager().getScmChillModeManager();
+
+
+    // Ceil(0.1 * 2) is 1, as one pipeline is healthy healthy pipeline rule is
+    // satisfied
+
+    GenericTestUtils.waitFor(() ->
+        scmChillModeManager.getHealthyPipelineChillModeRule()
+            .validate(), 1000, 60000);
+
+    // As Ceil(0.9 * 2) is 2, and from second pipeline no datanodes's are
+    // reported this rule is not met yet.
+    GenericTestUtils.waitFor(() ->
+        !scmChillModeManager.getOneReplicaPipelineChillModeRule()
+            .validate(), 1000, 60000);
+
+    Assert.assertTrue(cluster.getStorageContainerManager().isInChillMode());
+
+    DatanodeDetails restartedDatanode = pipelineList.get(1).getFirstNode();
+    // Now restart one datanode from the 2nd pipeline
+    try {
+      cluster.restartHddsDatanode(restartedDatanode, false);
+    } catch (Exception ex) {
+      fail("Datanode restart failed");
+    }
+
+
+    GenericTestUtils.waitFor(() ->
+        scmChillModeManager.getOneReplicaPipelineChillModeRule()
+            .validate(), 1000, 60000);
+
+    GenericTestUtils.waitFor(() -> !scmChillModeManager.getInChillMode(), 1000,
+        60000);
+
+    // As after chillmode wait time is not completed, we should have total
+    // pipeline's as original count 6(1 node pipelines) + 2 (3 node pipeline)
+    Assert.assertEquals(totalPipelineCount,
+        pipelineManager.getPipelines().size());
+
+    ReplicationManager replicationManager =
+        cluster.getStorageContainerManager().getReplicationManager();
+
+    GenericTestUtils.waitFor(() ->
+        replicationManager.isRunning(), 1000, 60000);
+
+
+    // As 4 datanodes are reported, 4 single node pipeline and 1 3 node
+    // pipeline.
+
+    waitForRatis1NodePipelines(4);
+    waitForRatis3NodePipelines(1);
+
+    // Restart other datanodes in the pipeline, and after some time we should
+    // have same count as original.
+    pipelineList.get(1).getNodes().forEach(datanodeDetails -> {
+      try {
+        if (!restartedDatanode.equals(datanodeDetails)) {
+          cluster.restartHddsDatanode(datanodeDetails, false);
+        }
+      } catch (Exception ex) {
+        fail("Datanode restart failed");
+      }
+    });
+
+    waitForRatis1NodePipelines(datanodeCount);
+    waitForRatis3NodePipelines(datanodeCount/3);
+
+  }
+
+  @After
+  public void tearDown() {
+    if (cluster != null) {
+      cluster.shutdown();
+    }
+  }
+
+
+  private void waitForRatis3NodePipelines(int numPipelines)
+      throws TimeoutException, InterruptedException {
+    GenericTestUtils.waitFor(() -> pipelineManager
+        .getPipelines(HddsProtos.ReplicationType.RATIS,
+            HddsProtos.ReplicationFactor.THREE, Pipeline.PipelineState.OPEN)
+        .size() == numPipelines, 100, 60000);
+  }
+
+  private void waitForRatis1NodePipelines(int numPipelines)
+      throws TimeoutException, InterruptedException {
+    GenericTestUtils.waitFor(() -> pipelineManager
+        .getPipelines(HddsProtos.ReplicationType.RATIS,
+            HddsProtos.ReplicationFactor.ONE, Pipeline.PipelineState.OPEN)
+        .size() == numPipelines, 100, 60000);
+  }
+}
\ No newline at end of file
diff --git a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/hdds/scm/container/TestContainerStateManagerIntegration.java b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/hdds/scm/container/TestContainerStateManagerIntegration.java
index add278c..4133c73 100644
--- a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/hdds/scm/container/TestContainerStateManagerIntegration.java
+++ b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/hdds/scm/container/TestContainerStateManagerIntegration.java
@@ -140,7 +140,7 @@ public class TestContainerStateManagerIntegration {
       }
     }
 
-    cluster.restartStorageContainerManager();
+    cluster.restartStorageContainerManager(true);
 
     List<ContainerInfo> result = cluster.getStorageContainerManager()
         .getContainerManager().listContainer(null, 100);
diff --git a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/hdds/scm/pipeline/TestSCMRestart.java b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/hdds/scm/pipeline/TestSCMRestart.java
index 55324a9..459a67a 100644
--- a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/hdds/scm/pipeline/TestSCMRestart.java
+++ b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/hdds/scm/pipeline/TestSCMRestart.java
@@ -75,7 +75,7 @@ public class TestSCMRestart {
     // At this stage, there should be 2 pipeline one with 1 open container
     // each. Try restarting the SCM and then discover that pipeline are in
     // correct state.
-    cluster.restartStorageContainerManager();
+    cluster.restartStorageContainerManager(true);
     newContainerManager = cluster.getStorageContainerManager()
         .getContainerManager();
     pipelineManager = cluster.getStorageContainerManager().getPipelineManager();
diff --git a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/MiniOzoneCluster.java b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/MiniOzoneCluster.java
index 8c40aa3..12df745 100644
--- a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/MiniOzoneCluster.java
+++ b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/MiniOzoneCluster.java
@@ -159,12 +159,14 @@ public interface MiniOzoneCluster {
   /**
    * Restarts StorageContainerManager instance.
    *
+   * @param waitForDatanode
    * @throws IOException
    * @throws TimeoutException
    * @throws InterruptedException
    */
-  void restartStorageContainerManager() throws InterruptedException,
-      TimeoutException, IOException, AuthenticationException;
+  void restartStorageContainerManager(boolean waitForDatanode)
+      throws InterruptedException, TimeoutException, IOException,
+      AuthenticationException;
 
   /**
    * Restarts OzoneManager instance.
diff --git a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/MiniOzoneClusterImpl.java b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/MiniOzoneClusterImpl.java
index 4cfc950..6a29562 100644
--- a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/MiniOzoneClusterImpl.java
+++ b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/MiniOzoneClusterImpl.java
@@ -250,14 +250,16 @@ public class MiniOzoneClusterImpl implements MiniOzoneCluster {
   }
 
   @Override
-  public void restartStorageContainerManager()
+  public void restartStorageContainerManager(boolean waitForDatanode)
       throws TimeoutException, InterruptedException, IOException,
       AuthenticationException {
     scm.stop();
     scm.join();
     scm = StorageContainerManager.createSCM(null, conf);
     scm.start();
-    waitForClusterToBeReady();
+    if (waitForDatanode) {
+      waitForClusterToBeReady();
+    }
   }
 
   @Override
diff --git a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/TestMiniOzoneCluster.java b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/TestMiniOzoneCluster.java
index 0cbea52..cd2c381 100644
--- a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/TestMiniOzoneCluster.java
+++ b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/TestMiniOzoneCluster.java
@@ -260,7 +260,7 @@ public class TestMiniOzoneCluster {
 
     // DN should successfully register with the SCM after SCM is restarted.
     // Restart the SCM
-    cluster.restartStorageContainerManager();
+    cluster.restartStorageContainerManager(true);
     // Wait for DN to register
     cluster.waitForClusterToBeReady();
     // DN should be in HEARTBEAT state after registering with the SCM
diff --git a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/TestScmChillMode.java b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/TestScmChillMode.java
index 6159fe7..5d52701 100644
--- a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/TestScmChillMode.java
+++ b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/TestScmChillMode.java
@@ -342,7 +342,7 @@ public class TestScmChillMode {
     assertFalse(scm.isInChillMode());
 
     // Even on SCM restart, cluster should be out of chill mode immediately.
-    cluster.restartStorageContainerManager();
+    cluster.restartStorageContainerManager(true);
     assertFalse(scm.isInChillMode());
   }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: common-commits-unsubscribe@hadoop.apache.org
For additional commands, e-mail: common-commits-help@hadoop.apache.org