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 ae...@apache.org on 2019/09/20 16:57:28 UTC

[hadoop] branch trunk updated: HDDS-1949. Missing or error-prone test cleanup. Contributed by Doroszlai, Attila.

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

aengineer 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 5553887  HDDS-1949. Missing or error-prone test cleanup. Contributed by Doroszlai, Attila.
5553887 is described below

commit 5553887d9592d8ef59e5a2871919ced195edf42c
Author: Anu Engineer <ae...@apache.org>
AuthorDate: Fri Sep 20 09:55:57 2019 -0700

    HDDS-1949. Missing or error-prone test cleanup.
    Contributed by Doroszlai, Attila.
---
 .../org/apache/hadoop/ozone/MiniOzoneCluster.java  |   8 +-
 .../apache/hadoop/ozone/MiniOzoneClusterImpl.java  | 101 ++++++---
 .../apache/hadoop/ozone/TestMiniOzoneCluster.java  |  16 +-
 .../hadoop/ozone/TestStorageContainerManager.java  | 240 +++++++++++----------
 .../ozone/container/TestContainerReplication.java  |  25 ++-
 .../commandhandler/TestBlockDeletion.java          |   8 +
 .../commandhandler/TestCloseContainerHandler.java  |  33 ++-
 .../apache/hadoop/ozone/om/TestScmSafeMode.java    |   2 +-
 .../hadoop/ozone/scm/TestSCMNodeManagerMXBean.java |   8 +
 9 files changed, 273 insertions(+), 168 deletions(-)

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 8620b0a..0aba968 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
@@ -240,7 +240,7 @@ public interface MiniOzoneCluster {
     protected static final int ACTIVE_OMS_NOT_SET = -1;
 
     protected final OzoneConfiguration conf;
-    protected final String path;
+    protected String path;
 
     protected String clusterId;
     protected String omServiceId;
@@ -269,9 +269,7 @@ public interface MiniOzoneCluster {
 
     protected Builder(OzoneConfiguration conf) {
       this.conf = conf;
-      this.clusterId = UUID.randomUUID().toString();
-      this.path = GenericTestUtils.getTempPath(
-          MiniOzoneClusterImpl.class.getSimpleName() + "-" + clusterId);
+      setClusterId(UUID.randomUUID().toString());
     }
 
     /**
@@ -283,6 +281,8 @@ public interface MiniOzoneCluster {
      */
     public Builder setClusterId(String id) {
       clusterId = id;
+      path = GenericTestUtils.getTempPath(
+          MiniOzoneClusterImpl.class.getSimpleName() + "-" + clusterId);
       return this;
     }
 
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 b0cbc6b..ac76482 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
@@ -19,6 +19,8 @@ package org.apache.hadoop.ozone;
 
 import java.io.File;
 import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
 import java.util.List;
 import java.util.Optional;
 import org.apache.commons.io.FileUtils;
@@ -317,6 +319,7 @@ public class MiniOzoneClusterImpl implements MiniOzoneCluster {
       stop();
       FileUtils.deleteDirectory(baseDir);
       ContainerCache.getInstance(conf).shutdownCache();
+      DefaultMetricsSystem.shutdown();
     } catch (IOException e) {
       LOG.error("Exception while shutting down the cluster.", e);
     }
@@ -325,26 +328,9 @@ public class MiniOzoneClusterImpl implements MiniOzoneCluster {
   @Override
   public void stop() {
     LOG.info("Stopping the Mini Ozone Cluster");
-    if (ozoneManager != null) {
-      LOG.info("Stopping the OzoneManager");
-      ozoneManager.stop();
-      ozoneManager.join();
-    }
-
-    if (!hddsDatanodes.isEmpty()) {
-      LOG.info("Shutting the HddsDatanodes");
-      hddsDatanodes.parallelStream()
-          .forEach(dn -> {
-            dn.stop();
-            dn.join();
-          });
-    }
-
-    if (scm != null) {
-      LOG.info("Stopping the StorageContainerManager");
-      scm.stop();
-      scm.join();
-    }
+    stopOM(ozoneManager);
+    stopDatanodes(hddsDatanodes);
+    stopSCM(scm);
   }
 
   /**
@@ -385,6 +371,37 @@ public class MiniOzoneClusterImpl implements MiniOzoneCluster {
     this.caClient = client;
   }
 
+  private static void stopDatanodes(
+      Collection<HddsDatanodeService> hddsDatanodes) {
+    if (!hddsDatanodes.isEmpty()) {
+      LOG.info("Stopping the HddsDatanodes");
+      hddsDatanodes.parallelStream()
+          .forEach(MiniOzoneClusterImpl::stopDatanode);
+    }
+  }
+
+  private static void stopDatanode(HddsDatanodeService dn) {
+    if (dn != null) {
+      dn.stop();
+      dn.join();
+    }
+  }
+
+  private static void stopSCM(StorageContainerManager scm) {
+    if (scm != null) {
+      LOG.info("Stopping the StorageContainerManager");
+      scm.stop();
+      scm.join();
+    }
+  }
+
+  private static void stopOM(OzoneManager om) {
+    if (om != null) {
+      LOG.info("Stopping the OzoneManager");
+      om.stop();
+      om.join();
+    }
+  }
 
   /**
    * Builder for configuring the MiniOzoneCluster to run.
@@ -404,8 +421,9 @@ public class MiniOzoneClusterImpl implements MiniOzoneCluster {
     public MiniOzoneCluster build() throws IOException {
       DefaultMetricsSystem.setMiniClusterMode(true);
       initializeConfiguration();
-      StorageContainerManager scm;
-      OzoneManager om;
+      StorageContainerManager scm = null;
+      OzoneManager om = null;
+      List<HddsDatanodeService> hddsDatanodes = Collections.emptyList();
       try {
         scm = createSCM();
         scm.start();
@@ -413,19 +431,32 @@ public class MiniOzoneClusterImpl implements MiniOzoneCluster {
         if(certClient != null) {
           om.setCertClient(certClient);
         }
-      } catch (AuthenticationException ex) {
-        throw new IOException("Unable to build MiniOzoneCluster. ", ex);
-      }
+        om.start();
+
+        hddsDatanodes = createHddsDatanodes(scm);
+        MiniOzoneClusterImpl cluster = new MiniOzoneClusterImpl(conf, om, scm,
+            hddsDatanodes);
+        cluster.setCAClient(certClient);
+        if (startDataNodes) {
+          cluster.startHddsDatanodes();
+        }
+        return cluster;
+      } catch (Exception ex) {
+        stopOM(om);
+        if (startDataNodes) {
+          stopDatanodes(hddsDatanodes);
+        }
+        stopSCM(scm);
+        removeConfiguration();
 
-      om.start();
-      final List<HddsDatanodeService> hddsDatanodes = createHddsDatanodes(scm);
-      MiniOzoneClusterImpl cluster = new MiniOzoneClusterImpl(conf, om, scm,
-          hddsDatanodes);
-      cluster.setCAClient(certClient);
-      if (startDataNodes) {
-        cluster.startHddsDatanodes();
+        if (ex instanceof IOException) {
+          throw (IOException) ex;
+        }
+        if (ex instanceof RuntimeException) {
+          throw (RuntimeException) ex;
+        }
+        throw new IOException("Unable to build MiniOzoneCluster. ", ex);
       }
-      return cluster;
     }
 
     /**
@@ -466,6 +497,10 @@ public class MiniOzoneClusterImpl implements MiniOzoneCluster {
       configureTrace();
     }
 
+    void removeConfiguration() {
+      FileUtils.deleteQuietly(new File(path));
+    }
+
     /**
      * Creates a new StorageContainerManager instance.
      *
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 570fc00..efc2736 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
@@ -35,6 +35,7 @@ import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
 
+import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang3.RandomUtils;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hdds.HddsConfigKeys;
@@ -53,6 +54,7 @@ import org.apache.hadoop.ozone.container.common.statemachine.EndpointStateMachin
 import org.apache.hadoop.ozone.container.ozoneimpl.TestOzoneContainer;
 import org.apache.hadoop.test.PathUtils;
 import org.apache.hadoop.test.TestGenericTestUtils;
+import org.junit.After;
 import org.junit.AfterClass;
 import org.junit.Assert;
 import org.junit.BeforeClass;
@@ -64,7 +66,7 @@ import org.yaml.snakeyaml.Yaml;
  */
 public class TestMiniOzoneCluster {
 
-  private static MiniOzoneCluster cluster;
+  private MiniOzoneCluster cluster;
   private static OzoneConfiguration conf;
 
   private final static File TEST_ROOT = TestGenericTestUtils.getTestDir();
@@ -78,17 +80,21 @@ public class TestMiniOzoneCluster {
     conf.setBoolean(DFS_CONTAINER_RATIS_IPC_RANDOM_PORT, true);
     WRITE_TMP.mkdirs();
     READ_TMP.mkdirs();
-    WRITE_TMP.deleteOnExit();
-    READ_TMP.deleteOnExit();
   }
 
-  @AfterClass
-  public static void cleanup() {
+  @After
+  public void cleanup() {
     if (cluster != null) {
       cluster.shutdown();
     }
   }
 
+  @AfterClass
+  public static void afterClass() {
+    FileUtils.deleteQuietly(WRITE_TMP);
+    FileUtils.deleteQuietly(READ_TMP);
+  }
+
   @Test(timeout = 30000)
   public void testStartMultipleDatanodes() throws Exception {
     final int numberOfNodes = 3;
diff --git a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/TestStorageContainerManager.java b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/TestStorageContainerManager.java
index d498200..ba072f8 100644
--- a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/TestStorageContainerManager.java
+++ b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/TestStorageContainerManager.java
@@ -28,6 +28,7 @@ import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
+import java.io.File;
 import java.io.IOException;
 import java.lang.reflect.Field;
 import java.lang.reflect.Modifier;
@@ -41,6 +42,7 @@ import java.util.Set;
 import java.util.UUID;
 import java.util.concurrent.TimeUnit;
 
+import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang3.RandomUtils;
 import org.apache.hadoop.hdds.HddsConfigKeys;
 import org.apache.hadoop.hdds.HddsUtils;
@@ -92,6 +94,8 @@ import org.junit.rules.TemporaryFolder;
 import org.junit.rules.Timeout;
 import org.mockito.ArgumentMatcher;
 import org.mockito.Mockito;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
@@ -101,6 +105,9 @@ import com.google.common.collect.Maps;
  */
 public class TestStorageContainerManager {
   private static XceiverClientManager xceiverClientManager;
+  private static final Logger LOG = LoggerFactory.getLogger(
+            TestStorageContainerManager.class);
+
   /**
    * Set the timeout for every test.
    */
@@ -306,9 +313,7 @@ public class TestStorageContainerManager {
         }
       }, 1000, 10000);
     } finally {
-      if (cluster != null) {
-        cluster.shutdown();
-      }
+      cluster.shutdown();
     }
   }
 
@@ -329,50 +334,54 @@ public class TestStorageContainerManager {
         .build();
     cluster.waitForClusterToBeReady();
 
-    DeletedBlockLog delLog = cluster.getStorageContainerManager()
-        .getScmBlockManager().getDeletedBlockLog();
-    Assert.assertEquals(0, delLog.getNumOfValidTransactions());
-
-    int limitSize = 1;
-    // Reset limit value to 1, so that we only allow one TX is dealt per
-    // datanode.
-    SCMBlockDeletingService delService = cluster.getStorageContainerManager()
-        .getScmBlockManager().getSCMBlockDeletingService();
-    delService.setBlockDeleteTXNum(limitSize);
-
-    // Create {numKeys} random names keys.
-    TestStorageContainerManagerHelper helper =
-        new TestStorageContainerManagerHelper(cluster, conf);
-    Map<String, OmKeyInfo> keyLocations = helper.createKeys(numKeys, 4096);
-    // Wait for container report
-    Thread.sleep(5000);
-    for (OmKeyInfo keyInfo : keyLocations.values()) {
-      OzoneTestUtils.closeContainers(keyInfo.getKeyLocationVersions(),
-          cluster.getStorageContainerManager());
-    }
+    try {
+      DeletedBlockLog delLog = cluster.getStorageContainerManager()
+          .getScmBlockManager().getDeletedBlockLog();
+      Assert.assertEquals(0, delLog.getNumOfValidTransactions());
+
+      int limitSize = 1;
+      // Reset limit value to 1, so that we only allow one TX is dealt per
+      // datanode.
+      SCMBlockDeletingService delService = cluster.getStorageContainerManager()
+          .getScmBlockManager().getSCMBlockDeletingService();
+      delService.setBlockDeleteTXNum(limitSize);
+
+      // Create {numKeys} random names keys.
+      TestStorageContainerManagerHelper helper =
+          new TestStorageContainerManagerHelper(cluster, conf);
+      Map<String, OmKeyInfo> keyLocations = helper.createKeys(numKeys, 4096);
+      // Wait for container report
+      Thread.sleep(5000);
+      for (OmKeyInfo keyInfo : keyLocations.values()) {
+        OzoneTestUtils.closeContainers(keyInfo.getKeyLocationVersions(),
+            cluster.getStorageContainerManager());
+      }
 
-    createDeleteTXLog(delLog, keyLocations, helper);
-    // Verify a few TX gets created in the TX log.
-    Assert.assertTrue(delLog.getNumOfValidTransactions() > 0);
-
-    // Verify the size in delete commands is expected.
-    GenericTestUtils.waitFor(() -> {
-      NodeManager nodeManager = cluster.getStorageContainerManager()
-          .getScmNodeManager();
-      List<SCMCommand> commands = nodeManager.processHeartbeat(
-          nodeManager.getNodes(NodeState.HEALTHY).get(0));
-
-      if (commands != null) {
-        for (SCMCommand cmd : commands) {
-          if (cmd.getType() == SCMCommandProto.Type.deleteBlocksCommand) {
-            List<DeletedBlocksTransaction> deletedTXs =
-                ((DeleteBlocksCommand) cmd).blocksTobeDeleted();
-            return deletedTXs != null && deletedTXs.size() == limitSize;
+      createDeleteTXLog(delLog, keyLocations, helper);
+      // Verify a few TX gets created in the TX log.
+      Assert.assertTrue(delLog.getNumOfValidTransactions() > 0);
+
+      // Verify the size in delete commands is expected.
+      GenericTestUtils.waitFor(() -> {
+        NodeManager nodeManager = cluster.getStorageContainerManager()
+            .getScmNodeManager();
+        List<SCMCommand> commands = nodeManager.processHeartbeat(
+            nodeManager.getNodes(NodeState.HEALTHY).get(0));
+
+        if (commands != null) {
+          for (SCMCommand cmd : commands) {
+            if (cmd.getType() == SCMCommandProto.Type.deleteBlocksCommand) {
+              List<DeletedBlocksTransaction> deletedTXs =
+                  ((DeleteBlocksCommand) cmd).blocksTobeDeleted();
+              return deletedTXs != null && deletedTXs.size() == limitSize;
+            }
           }
         }
-      }
-      return false;
-    }, 500, 10000);
+        return false;
+      }, 500, 10000);
+    } finally {
+      cluster.shutdown();
+    }
   }
 
   private Map<Long, List<Long>> createDeleteTXLog(DeletedBlockLog delLog,
@@ -450,12 +459,15 @@ public class TestStorageContainerManager {
     MiniOzoneCluster cluster =
         MiniOzoneCluster.newBuilder(conf).setNumDatanodes(1).build();
     cluster.waitForClusterToBeReady();
-    // This will initialize SCM
-    StorageContainerManager.scmInit(conf, "testClusterId");
-    SCMStorageConfig scmStore = new SCMStorageConfig(conf);
-    Assert.assertEquals(NodeType.SCM, scmStore.getNodeType());
-    Assert.assertNotEquals("testClusterId", scmStore.getClusterID());
-    cluster.shutdown();
+    try {
+      // This will initialize SCM
+      StorageContainerManager.scmInit(conf, "testClusterId");
+      SCMStorageConfig scmStore = new SCMStorageConfig(conf);
+      Assert.assertEquals(NodeType.SCM, scmStore.getNodeType());
+      Assert.assertNotEquals("testClusterId", scmStore.getClusterID());
+    } finally {
+      cluster.shutdown();
+    }
   }
 
   @Test
@@ -478,25 +490,29 @@ public class TestStorageContainerManager {
     OzoneConfiguration conf = new OzoneConfiguration();
     final String path =
         GenericTestUtils.getTempPath(UUID.randomUUID().toString());
-    Path scmPath = Paths.get(path, "scm-meta");
-    conf.set(HddsConfigKeys.OZONE_METADATA_DIRS, scmPath.toString());
-    conf.setBoolean(OzoneConfigKeys.OZONE_ENABLED, true);
-    SCMStorageConfig scmStore = new SCMStorageConfig(conf);
-    String clusterId = UUID.randomUUID().toString();
-    String scmId = UUID.randomUUID().toString();
-    scmStore.setClusterId(clusterId);
-    scmStore.setScmId(scmId);
-    // writes the version file properties
-    scmStore.initialize();
-    StorageContainerManager scm = StorageContainerManager.createSCM(conf);
-    //Reads the SCM Info from SCM instance
-    ScmInfo scmInfo = scm.getClientProtocolServer().getScmInfo();
-    Assert.assertEquals(clusterId, scmInfo.getClusterId());
-    Assert.assertEquals(scmId, scmInfo.getScmId());
-
-    String expectedVersion = HddsVersionInfo.HDDS_VERSION_INFO.getVersion();
-    String actualVersion = scm.getSoftwareVersion();
-    Assert.assertEquals(expectedVersion, actualVersion);
+    try {
+      Path scmPath = Paths.get(path, "scm-meta");
+      conf.set(HddsConfigKeys.OZONE_METADATA_DIRS, scmPath.toString());
+      conf.setBoolean(OzoneConfigKeys.OZONE_ENABLED, true);
+      SCMStorageConfig scmStore = new SCMStorageConfig(conf);
+      String clusterId = UUID.randomUUID().toString();
+      String scmId = UUID.randomUUID().toString();
+      scmStore.setClusterId(clusterId);
+      scmStore.setScmId(scmId);
+      // writes the version file properties
+      scmStore.initialize();
+      StorageContainerManager scm = StorageContainerManager.createSCM(conf);
+      //Reads the SCM Info from SCM instance
+      ScmInfo scmInfo = scm.getClientProtocolServer().getScmInfo();
+      Assert.assertEquals(clusterId, scmInfo.getClusterId());
+      Assert.assertEquals(scmId, scmInfo.getScmId());
+
+      String expectedVersion = HddsVersionInfo.HDDS_VERSION_INFO.getVersion();
+      String actualVersion = scm.getSoftwareVersion();
+      Assert.assertEquals(expectedVersion, actualVersion);
+    } finally {
+      FileUtils.deleteQuietly(new File(path));
+    }
   }
 
   /**
@@ -564,48 +580,52 @@ public class TestStorageContainerManager {
         .build();
     cluster.waitForClusterToBeReady();
 
-    TestStorageContainerManagerHelper helper =
-        new TestStorageContainerManagerHelper(cluster, conf);
-
-    helper.createKeys(10, 4096);
-    Thread.sleep(5000);
+    try {
+      TestStorageContainerManagerHelper helper =
+          new TestStorageContainerManagerHelper(cluster, conf);
 
-    StorageContainerManager scm = cluster.getStorageContainerManager();
-    List<ContainerInfo> containers = cluster.getStorageContainerManager()
-        .getContainerManager().getContainers();
-    Assert.assertNotNull(containers);
-    ContainerInfo selectedContainer = containers.iterator().next();
-
-    // Stop processing HB
-    scm.getDatanodeProtocolServer().stop();
-
-    scm.getContainerManager().updateContainerState(selectedContainer
-        .containerID(), HddsProtos.LifeCycleEvent.FINALIZE);
-    cluster.restartStorageContainerManager(true);
-    scm = cluster.getStorageContainerManager();
-    EventPublisher publisher = mock(EventPublisher.class);
-    ReplicationManager replicationManager = scm.getReplicationManager();
-    Field f = replicationManager.getClass().getDeclaredField("eventPublisher");
-    f.setAccessible(true);
-    Field modifiersField = Field.class.getDeclaredField("modifiers");
-    modifiersField.setAccessible(true);
-    modifiersField.setInt(f, f.getModifiers() & ~Modifier.FINAL);
-    f.set(replicationManager, publisher);
-    scm.getReplicationManager().start();
-    Thread.sleep(2000);
-
-    UUID dnUuid = cluster.getHddsDatanodes().iterator().next()
-        .getDatanodeDetails().getUuid();
-
-    CloseContainerCommand closeContainerCommand =
-        new CloseContainerCommand(selectedContainer.getContainerID(),
-            selectedContainer.getPipelineID(), false);
-
-    CommandForDatanode commandForDatanode = new CommandForDatanode(
-        dnUuid, closeContainerCommand);
-
-    verify(publisher).fireEvent(eq(SCMEvents.DATANODE_COMMAND), argThat(new
-        CloseContainerCommandMatcher(dnUuid, commandForDatanode)));
+      helper.createKeys(10, 4096);
+      Thread.sleep(5000);
+
+      StorageContainerManager scm = cluster.getStorageContainerManager();
+      List<ContainerInfo> containers = cluster.getStorageContainerManager()
+          .getContainerManager().getContainers();
+      Assert.assertNotNull(containers);
+      ContainerInfo selectedContainer = containers.iterator().next();
+
+      // Stop processing HB
+      scm.getDatanodeProtocolServer().stop();
+
+      scm.getContainerManager().updateContainerState(selectedContainer
+          .containerID(), HddsProtos.LifeCycleEvent.FINALIZE);
+      cluster.restartStorageContainerManager(true);
+      scm = cluster.getStorageContainerManager();
+      EventPublisher publisher = mock(EventPublisher.class);
+      ReplicationManager replicationManager = scm.getReplicationManager();
+      Field f = ReplicationManager.class.getDeclaredField("eventPublisher");
+      f.setAccessible(true);
+      Field modifiersField = Field.class.getDeclaredField("modifiers");
+      modifiersField.setAccessible(true);
+      modifiersField.setInt(f, f.getModifiers() & ~Modifier.FINAL);
+      f.set(replicationManager, publisher);
+      scm.getReplicationManager().start();
+      Thread.sleep(2000);
+
+      UUID dnUuid = cluster.getHddsDatanodes().iterator().next()
+          .getDatanodeDetails().getUuid();
+
+      CloseContainerCommand closeContainerCommand =
+          new CloseContainerCommand(selectedContainer.getContainerID(),
+              selectedContainer.getPipelineID(), false);
+
+      CommandForDatanode commandForDatanode = new CommandForDatanode(
+          dnUuid, closeContainerCommand);
+
+      verify(publisher).fireEvent(eq(SCMEvents.DATANODE_COMMAND), argThat(new
+          CloseContainerCommandMatcher(dnUuid, commandForDatanode)));
+    } finally {
+      cluster.shutdown();
+    }
   }
 
   @SuppressWarnings("visibilitymodifier")
diff --git a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/container/TestContainerReplication.java b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/container/TestContainerReplication.java
index 3599467..524c3bd 100644
--- a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/container/TestContainerReplication.java
+++ b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/container/TestContainerReplication.java
@@ -49,7 +49,10 @@ import org.apache.hadoop.test.GenericTestUtils;
 
 import static org.apache.hadoop.ozone.container.ozoneimpl.TestOzoneContainer
     .writeChunkForContainer;
+
+import org.junit.After;
 import org.junit.Assert;
+import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.Timeout;
@@ -64,16 +67,28 @@ public class TestContainerReplication {
   @Rule
   public Timeout testTimeout = new Timeout(300000);
 
+  private OzoneConfiguration conf;
+  private MiniOzoneCluster cluster;
+
+  @Before
+  public void setup() throws Exception {
+    conf = newOzoneConfiguration();
+    cluster = MiniOzoneCluster.newBuilder(conf).setNumDatanodes(2)
+        .setRandomContainerPort(true).build();
+  }
+
+  @After
+  public void teardown() {
+    if (cluster != null) {
+      cluster.shutdown();
+    }
+  }
+
   @Test
   public void testContainerReplication() throws Exception {
     //GIVEN
-    OzoneConfiguration conf = newOzoneConfiguration();
-
     long containerId = 1L;
 
-    MiniOzoneCluster cluster =
-        MiniOzoneCluster.newBuilder(conf).setNumDatanodes(2)
-            .setRandomContainerPort(true).build();
     cluster.waitForClusterToBeReady();
 
     HddsDatanodeService firstDatanode = cluster.getHddsDatanodes().get(0);
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 b1adb73..c7b7992 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
@@ -52,6 +52,7 @@ import org.apache.hadoop.ozone.protocol.commands.RetriableDatanodeEventWatcher;
 import org.apache.hadoop.test.GenericTestUtils;
 import org.apache.hadoop.test.GenericTestUtils.LogCapturer;
 import org.apache.hadoop.ozone.container.common.utils.ReferenceCountedDB;
+import org.junit.AfterClass;
 import org.junit.Assert;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -121,6 +122,13 @@ public class TestBlockDeletion {
     containerIdsWithDeletedBlocks = new HashSet<>();
   }
 
+  @AfterClass
+  public static void cleanup() {
+    if (cluster != null) {
+      cluster.shutdown();
+    }
+  }
+
   @Test
   public void testBlockDeletion() throws Exception {
     String volumeName = UUID.randomUUID().toString();
diff --git a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/container/common/statemachine/commandhandler/TestCloseContainerHandler.java b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/container/common/statemachine/commandhandler/TestCloseContainerHandler.java
index 74cde37..5c7f2c1 100644
--- a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/container/common/statemachine/commandhandler/TestCloseContainerHandler.java
+++ b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/container/common/statemachine/commandhandler/TestCloseContainerHandler.java
@@ -17,9 +17,7 @@
  */
 package org.apache.hadoop.ozone.container.common.statemachine.commandhandler;
 
-import java.io.IOException;
 import java.util.HashMap;
-import java.util.concurrent.TimeoutException;
 
 import org.apache.hadoop.hdds.client.ReplicationFactor;
 import org.apache.hadoop.hdds.client.ReplicationType;
@@ -41,23 +39,38 @@ import org.apache.hadoop.ozone.protocol.commands.CloseContainerCommand;
 import org.apache.hadoop.test.GenericTestUtils;
 
 import static org.apache.hadoop.hdds.scm.ScmConfigKeys.OZONE_SCM_CONTAINER_SIZE;
+
+import org.junit.After;
 import org.junit.Assert;
+import org.junit.Before;
 import org.junit.Test;
 
 /**
- * Test to behaviour of the datanode when recieve close container command.
+ * Test to behaviour of the datanode when receive close container command.
  */
 public class TestCloseContainerHandler {
 
-  @Test
-  public void test()
-      throws IOException, TimeoutException, InterruptedException {
+  private MiniOzoneCluster cluster;
+  private OzoneConfiguration conf;
 
+  @Before
+  public void setup() throws Exception {
     //setup a cluster (1G free space is enough for a unit test)
-    OzoneConfiguration conf = new OzoneConfiguration();
+    conf = new OzoneConfiguration();
     conf.set(OZONE_SCM_CONTAINER_SIZE, "1GB");
-    MiniOzoneCluster cluster = MiniOzoneCluster.newBuilder(conf)
+    cluster = MiniOzoneCluster.newBuilder(conf)
         .setNumDatanodes(1).build();
+  }
+
+  @After
+  public void teardown() {
+    if (cluster != null) {
+      cluster.shutdown();
+    }
+  }
+
+  @Test
+  public void test() throws Exception {
     cluster.waitForClusterToBeReady();
 
     //the easiest way to create an open container is creating a key
@@ -109,7 +122,7 @@ public class TestCloseContainerHandler {
     Assert.assertTrue(isContainerClosed(cluster, containerId.getId()));
   }
 
-  private Boolean isContainerClosed(MiniOzoneCluster cluster,
+  private static Boolean isContainerClosed(MiniOzoneCluster cluster,
       long containerID) {
     ContainerData containerData;
     containerData = cluster.getHddsDatanodes().get(0)
@@ -118,4 +131,4 @@ public class TestCloseContainerHandler {
     return !containerData.isOpen();
   }
 
-}
\ No newline at end of file
+}
diff --git a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/TestScmSafeMode.java b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/TestScmSafeMode.java
index aba338e..3614a05 100644
--- a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/TestScmSafeMode.java
+++ b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/TestScmSafeMode.java
@@ -332,7 +332,7 @@ public class TestScmSafeMode {
 
   @Test(timeout = 300_000)
   public void testSCMSafeModeDisabled() throws Exception {
-    cluster.stop();
+    cluster.shutdown();
 
     // If safe mode is disabled, cluster should not be in safe mode even if
     // min number of datanodes are not started.
diff --git a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/scm/TestSCMNodeManagerMXBean.java b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/scm/TestSCMNodeManagerMXBean.java
index 25a18d4..43b9bf0 100644
--- a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/scm/TestSCMNodeManagerMXBean.java
+++ b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/scm/TestSCMNodeManagerMXBean.java
@@ -23,6 +23,7 @@ import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.hdds.conf.OzoneConfiguration;
 import org.apache.hadoop.hdds.scm.server.StorageContainerManager;
 import org.apache.hadoop.ozone.MiniOzoneCluster;
+import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
@@ -66,6 +67,13 @@ public class TestSCMNodeManagerMXBean {
     mbs = ManagementFactory.getPlatformMBeanServer();
   }
 
+  @AfterClass
+  public static void cleanup() {
+    if (cluster != null) {
+      cluster.shutdown();
+    }
+  }
+
   @Test
   public void testDiskUsage() throws Exception {
     ObjectName bean = new ObjectName(


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