This is an automated email from the ASF dual-hosted git repository. shv pushed a commit to branch branch-2.10 in repository https://gitbox.apache.org/repos/asf/hadoop.git
The following commit(s) were added to refs/heads/branch-2.10 by this push: new edc1381 HDFS-14216. NullPointerException happens in NamenodeWebHdfs. Contributed by lujie. edc1381 is described below commit edc138186f02595847961347a27d77dea5a3607a Author: Surendra Singh Lilhore <surendralilh...@apache.org> AuthorDate: Thu Feb 21 20:36:34 2019 +0530 HDFS-14216. NullPointerException happens in NamenodeWebHdfs. Contributed by lujie. (cherry picked from commit 92b53c40f070bbfe65c736f6f3eca721b9d227f5) (cherry picked from commit 2e939515dfbaf26ca466c8a755cedde0ce4e9c1a) --- .../web/resources/NamenodeWebHdfsMethods.java | 18 +++++++++++++---- .../web/resources/TestWebHdfsDataLocality.java | 23 ++++++++++++++++++++++ 2 files changed, 37 insertions(+), 4 deletions(-) diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/web/resources/NamenodeWebHdfsMethods.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/web/resources/NamenodeWebHdfsMethods.java index af71f9c..a6250a8 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/web/resources/NamenodeWebHdfsMethods.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/web/resources/NamenodeWebHdfsMethods.java @@ -265,11 +265,21 @@ public class NamenodeWebHdfsMethods { for (String host : StringUtils .getTrimmedStringCollection(excludeDatanodes)) { int idx = host.indexOf(":"); - if (idx != -1) { - excludes.add(bm.getDatanodeManager().getDatanodeByXferAddr( - host.substring(0, idx), Integer.parseInt(host.substring(idx + 1)))); + Node excludeNode = null; + if (idx != -1) { + excludeNode = bm.getDatanodeManager().getDatanodeByXferAddr( + host.substring(0, idx), Integer.parseInt(host.substring(idx + 1))); } else { - excludes.add(bm.getDatanodeManager().getDatanodeByHost(host)); + excludeNode = bm.getDatanodeManager().getDatanodeByHost(host); + } + + if (excludeNode != null) { + excludes.add(excludeNode); + } else { + if (LOG.isDebugEnabled()) { + LOG.debug("DataNode " + host + " was requested to be excluded, " + + "but it was not found."); + } } } } diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/web/resources/TestWebHdfsDataLocality.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/web/resources/TestWebHdfsDataLocality.java index 759719d..61e429d0 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/web/resources/TestWebHdfsDataLocality.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/web/resources/TestWebHdfsDataLocality.java @@ -239,6 +239,29 @@ public class TestWebHdfsDataLocality { } @Test + public void testExcludeWrongDataNode() throws Exception { + final Configuration conf = WebHdfsTestUtil.createConf(); + final String[] racks = {RACK0}; + final String[] hosts = {"DataNode1"}; + final int nDataNodes = hosts.length; + + final MiniDFSCluster cluster = new MiniDFSCluster.Builder(conf) + .hosts(hosts).numDataNodes(nDataNodes).racks(racks).build(); + try { + cluster.waitActive(); + final NameNode namenode = cluster.getNameNode(); + NamenodeWebHdfsMethods.chooseDatanode( + namenode, "/path", PutOpParam.Op.CREATE, 0, + DFSConfigKeys.DFS_BLOCK_SIZE_DEFAULT, + "DataNode2", LOCALHOST, null); + } catch (Exception e) { + Assert.fail("Failed to exclude DataNode2" + e.getMessage()); + } finally { + cluster.shutdown(); + } + } + + @Test public void testChooseDatanodeBeforeNamesystemInit() throws Exception { NameNode nn = mock(NameNode.class); when(nn.getNamesystem()).thenReturn(null); --------------------------------------------------------------------- To unsubscribe, e-mail: common-commits-unsubscr...@hadoop.apache.org For additional commands, e-mail: common-commits-h...@hadoop.apache.org