diff --git a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt index 1ee488d6df6..18b93789805 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt +++ b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt @@ -589,6 +589,9 @@ Release 2.0.0 - UNRELEASED HDFS-3330. If GetImageServlet throws an Error or RTE, response should not have HTTP "OK" status. (todd) + HDFS-3351. NameNode#initializeGenericKeys should always set fs.defaultFS + regardless of whether HA or Federation is enabled. (atm) + BREAKDOWN OF HDFS-1623 SUBTASKS HDFS-2179. Add fencing framework and mechanisms for NameNode HA. (todd) diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NameNode.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NameNode.java index 48a056507c4..05bc8c2ec67 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NameNode.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NameNode.java @@ -1130,20 +1130,18 @@ public class NameNode { */ public static void initializeGenericKeys(Configuration conf, String nameserviceId, String namenodeId) { - if ((nameserviceId == null || nameserviceId.isEmpty()) && - (namenodeId == null || namenodeId.isEmpty())) { - return; + if ((nameserviceId != null && !nameserviceId.isEmpty()) || + (namenodeId != null && !namenodeId.isEmpty())) { + if (nameserviceId != null) { + conf.set(DFS_FEDERATION_NAMESERVICE_ID, nameserviceId); + } + if (namenodeId != null) { + conf.set(DFS_HA_NAMENODE_ID_KEY, namenodeId); + } + + DFSUtil.setGenericConf(conf, nameserviceId, namenodeId, + NAMESERVICE_SPECIFIC_KEYS); } - - if (nameserviceId != null) { - conf.set(DFS_FEDERATION_NAMESERVICE_ID, nameserviceId); - } - if (namenodeId != null) { - conf.set(DFS_HA_NAMENODE_ID_KEY, namenodeId); - } - - DFSUtil.setGenericConf(conf, nameserviceId, namenodeId, - NAMESERVICE_SPECIFIC_KEYS); if (conf.get(DFS_NAMENODE_RPC_ADDRESS_KEY) != null) { URI defaultUri = URI.create(HdfsConstants.HDFS_URI_SCHEME + "://" + conf.get(DFS_NAMENODE_RPC_ADDRESS_KEY)); diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestDFSUtil.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestDFSUtil.java index 3f1421e872f..a991d37c8a3 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestDFSUtil.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestDFSUtil.java @@ -319,6 +319,25 @@ public class TestDFSUtil { } } + /** + * Ensure that fs.defaultFS is set in the configuration even if neither HA nor + * Federation is enabled. + * + * Regression test for HDFS-3351. + */ + @Test + public void testConfModificationNoFederationOrHa() { + final HdfsConfiguration conf = new HdfsConfiguration(); + String nsId = null; + String nnId = null; + + conf.set(DFS_NAMENODE_RPC_ADDRESS_KEY, "localhost:1234"); + + assertFalse("hdfs://localhost:1234".equals(conf.get(FS_DEFAULT_NAME_KEY))); + NameNode.initializeGenericKeys(conf, nsId, nnId); + assertEquals("hdfs://localhost:1234", conf.get(FS_DEFAULT_NAME_KEY)); + } + /** * Regression test for HDFS-2934. */