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 sh...@apache.org on 2021/09/10 22:45:59 UTC

[hadoop] branch branch-2.10 updated: HDFS-14216. NullPointerException happens in NamenodeWebHdfs. Contributed by lujie.

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 <su...@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-unsubscribe@hadoop.apache.org
For additional commands, e-mail: common-commits-help@hadoop.apache.org