This is an automated email from the ASF dual-hosted git repository.
ayushsaxena pushed a commit to branch branch-2
in repository https://gitbox.apache.org/repos/asf/hadoop.git
The following commit(s) were added to refs/heads/branch-2 by this push:
new 40becd3 HDFS-14853. NPE in
DFSNetworkTopology#chooseRandomWithStorageType() when the excludedNode is not
present. Contributed by Ranith Sardar.
40becd3 is described below
commit 40becd37d0b4e42bb3020fa2b5f82dd1d5975431
Author: Ayush Saxena <[email protected]>
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 f3074d5..68b2db7 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
@@ -225,6 +225,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 26d96b2..fdb41a2 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.apache.commons.logging.LogFactory;
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: [email protected]
For additional commands, e-mail: [email protected]