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 ay...@apache.org on 2019/09/28 03:01:38 UTC
[hadoop] branch branch-3.1 updated: HDFS-14853. NPE in
DFSNetworkTopology#chooseRandomWithStorageType() when the excludedNode is
not present. Contributed by Ranith Sardar.
This is an automated email from the ASF dual-hosted git repository.
ayushsaxena pushed a commit to branch branch-3.1
in repository https://gitbox.apache.org/repos/asf/hadoop.git
The following commit(s) were added to refs/heads/branch-3.1 by this push:
new 8cc702a HDFS-14853. NPE in DFSNetworkTopology#chooseRandomWithStorageType() when the excludedNode is not present. Contributed by Ranith Sardar.
8cc702a is described below
commit 8cc702ad38fe72eafcf33119774565e55f65b168
Author: Ayush Saxena <ay...@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 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: common-commits-unsubscribe@hadoop.apache.org
For additional commands, e-mail: common-commits-help@hadoop.apache.org