Return-Path: X-Original-To: apmail-hadoop-common-commits-archive@www.apache.org Delivered-To: apmail-hadoop-common-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id F3BD8182F5 for ; Fri, 18 Mar 2016 18:25:16 +0000 (UTC) Received: (qmail 4456 invoked by uid 500); 18 Mar 2016 18:25:04 -0000 Delivered-To: apmail-hadoop-common-commits-archive@hadoop.apache.org Received: (qmail 3986 invoked by uid 500); 18 Mar 2016 18:25:03 -0000 Mailing-List: contact common-commits-help@hadoop.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: common-dev@hadoop.apache.org Delivered-To: mailing list common-commits@hadoop.apache.org Received: (qmail 2432 invoked by uid 99); 18 Mar 2016 18:25:03 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 18 Mar 2016 18:25:03 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id CFE47E0974; Fri, 18 Mar 2016 18:25:02 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: aengineer@apache.org To: common-commits@hadoop.apache.org Date: Fri, 18 Mar 2016 18:25:42 -0000 Message-Id: <1ea2b330d5a44e72ba83d7f31b9c28ef@git.apache.org> In-Reply-To: <8312df321b09478e9189edfe80195a6b@git.apache.org> References: <8312df321b09478e9189edfe80195a6b@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: [42/46] hadoop git commit: HDFS-9949. Add a test case to ensure that the DataNode does not regenerate its UUID when a storage directory is cleared (Harsh J via cmccabe) HDFS-9949. Add a test case to ensure that the DataNode does not regenerate its UUID when a storage directory is cleared (Harsh J via cmccabe) Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/dc951e60 Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/dc951e60 Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/dc951e60 Branch: refs/heads/HDFS-7240 Commit: dc951e606f40bb779632a8a3e3a46aeccc4a446a Parents: ca8106d Author: Colin Patrick Mccabe Authored: Thu Mar 17 10:37:42 2016 -0700 Committer: Colin Patrick Mccabe Committed: Thu Mar 17 10:37:42 2016 -0700 ---------------------------------------------------------------------- .../hdfs/server/datanode/TestDataNodeUUID.java | 52 ++++++++++++++++++++ 1 file changed, 52 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/dc951e60/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/datanode/TestDataNodeUUID.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/datanode/TestDataNodeUUID.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/datanode/TestDataNodeUUID.java index 34e53a3..ebf7c35 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/datanode/TestDataNodeUUID.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/datanode/TestDataNodeUUID.java @@ -19,17 +19,21 @@ package org.apache.hadoop.hdfs.server.datanode; +import org.apache.commons.io.FileUtils; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.hdfs.DFSConfigKeys; import org.apache.hadoop.hdfs.HdfsConfiguration; +import org.apache.hadoop.hdfs.MiniDFSCluster; import org.junit.Test; +import java.io.File; import java.net.InetSocketAddress; import java.util.ArrayList; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotEquals; +import static org.junit.Assert.assertTrue; public class TestDataNodeUUID { @@ -62,4 +66,52 @@ public class TestDataNodeUUID { // Make sure that we have a valid DataNodeUUID at that point of time. assertNotEquals(dn.getDatanodeUuid(), nullString); } + + @Test(timeout = 10000) + public void testUUIDRegeneration() throws Exception { + File baseDir = new File(System.getProperty("test.build.data")); + File disk1 = new File(baseDir, "disk1"); + File disk2 = new File(baseDir, "disk2"); + + // Ensure the configured disks do not pre-exist + FileUtils.deleteDirectory(disk1); + FileUtils.deleteDirectory(disk2); + + MiniDFSCluster cluster = null; + HdfsConfiguration conf = new HdfsConfiguration(); + conf.setStrings(DFSConfigKeys.DFS_DATANODE_DATA_DIR_KEY, + disk1.toURI().toString(), + disk2.toURI().toString()); + try { + cluster = new MiniDFSCluster.Builder(conf) + .numDataNodes(1) + .manageDataDfsDirs(false) + .build(); + cluster.waitActive(); + + // Grab the new-cluster UUID as the original one to test against + String originalUUID = cluster.getDataNodes().get(0).getDatanodeUuid(); + // Stop and simulate a DN wipe or unmount-but-root-path condition + // on the second disk + MiniDFSCluster.DataNodeProperties dn = cluster.stopDataNode(0); + FileUtils.deleteDirectory(disk2); + assertTrue("Failed to recreate the data directory: " + disk2, + disk2.mkdirs()); + + // Restart and check if the UUID changed + assertTrue("DataNode failed to start up: " + dn, + cluster.restartDataNode(dn)); + // We need to wait until the DN has completed registration + while (!cluster.getDataNodes().get(0).isDatanodeFullyStarted()) { + Thread.sleep(50); + } + assertEquals( + "DN generated a new UUID despite disk1 having it intact", + originalUUID, cluster.getDataNodes().get(0).getDatanodeUuid()); + } finally { + if (cluster != null) { + cluster.shutdown(); + } + } + } }