This is an automated email from the ASF dual-hosted git repository. ayushsaxena 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 c30e495 HDFS-14853. NPE in DFSNetworkTopology#chooseRandomWithStorageType() when the excludedNode is not present. Contributed by Ranith Sardar. c30e495 is described below commit c30e495557359b23681a61edbc90cfafafdb7dfe Author: Ayush Saxena <ayushsax...@apache.org> AuthorDate: Mon Sep 23 21:22:50 2019 +0530 HDFS-14853. NPE in DFSNetworkTopology#chooseRandomWithStorageType() when the excludedNode is not present. Contributed by Ranith Sardar. --- .../org/apache/hadoop/hdfs/net/DFSNetworkTopology.java | 3 +++ .../apache/hadoop/hdfs/net/TestDFSNetworkTopology.java | 16 ++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/net/DFSNetworkTopology.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/net/DFSNetworkTopology.java index 7889ef4..0884fc0 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/net/DFSNetworkTopology.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/net/DFSNetworkTopology.java @@ -226,6 +226,9 @@ public class DFSNetworkTopology extends NetworkTopology { String nodeLocation = excludedNode.getNetworkLocation() + "/" + excludedNode.getName(); DatanodeDescriptor dn = (DatanodeDescriptor)getNode(nodeLocation); + if (dn == null) { + continue; + } availableCount -= dn.hasStorageType(type)? 1 : 0; } else { LOG.error("Unexpected node type: {}.", excludedNode.getClass()); diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/net/TestDFSNetworkTopology.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/net/TestDFSNetworkTopology.java index 42b1928..3360d68 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/net/TestDFSNetworkTopology.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/net/TestDFSNetworkTopology.java @@ -23,6 +23,8 @@ import org.slf4j.LoggerFactory; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.StorageType; import org.apache.hadoop.hdfs.DFSTestUtil; +import org.apache.hadoop.hdfs.protocol.DatanodeID; +import org.apache.hadoop.hdfs.protocol.DatanodeInfo.DatanodeInfoBuilder; import org.apache.hadoop.hdfs.server.blockmanagement.DatanodeDescriptor; import org.apache.hadoop.hdfs.server.blockmanagement.DatanodeStorageInfo; import org.apache.hadoop.net.Node; @@ -37,9 +39,11 @@ import java.util.HashSet; import java.util.Set; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; + /** * This class tests the correctness of storage type info stored in * DFSNetworkTopology. @@ -368,6 +372,18 @@ public class TestDFSNetworkTopology { } } + @Test + public void testChooseRandomWithStorageTypeWithExcludedforNullCheck() + throws Exception { + HashSet<Node> excluded = new HashSet<>(); + + excluded.add(new DatanodeInfoBuilder() + .setNodeID(DatanodeID.EMPTY_DATANODE_ID).build()); + Node node = CLUSTER.chooseRandomWithStorageType("/", "/l1/d1/r1", excluded, + StorageType.ARCHIVE); + + assertNotNull(node); + } /** * This test tests the wrapper method. The wrapper method only takes one scope --------------------------------------------------------------------- To unsubscribe, e-mail: common-commits-unsubscr...@hadoop.apache.org For additional commands, e-mail: common-commits-h...@hadoop.apache.org