From 4bb72210c266707806f3ce3e974968a9a137b25b Mon Sep 17 00:00:00 2001 From: Devaraj Das Date: Tue, 28 May 2013 20:17:39 +0000 Subject: [PATCH] HDFS-4827. Slight update to the implementation of API for handling favored nodes in DFSClient. Contributed by Devaraj Das. git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1487093 13f79535-47bb-0310-9956-ffa450edef68 --- hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt | 3 +++ .../org/apache/hadoop/hdfs/DFSClient.java | 2 +- .../blockmanagement/DatanodeManager.java | 20 +++++-------------- 3 files changed, 9 insertions(+), 16 deletions(-) diff --git a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt index 70da1cf982..bdf03d932d 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt +++ b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt @@ -894,6 +894,9 @@ Release 2.0.5-beta - UNRELEASED HDFS-4780. Use the correct relogin method for services. (Robert Parker via kihwal) + HDFS-4827. Slight update to the implementation of API for handling favored + nodes in DFSClient (ddas) + BREAKDOWN OF HDFS-347 SUBTASKS AND RELATED JIRAS HDFS-4353. Encapsulate connections to peers in Peer and PeerServer classes. diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DFSClient.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DFSClient.java index b80a3e8b67..feb710512b 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DFSClient.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DFSClient.java @@ -1278,7 +1278,7 @@ public class DFSClient implements java.io.Closeable { favoredNodeStrs = new String[favoredNodes.length]; for (int i = 0; i < favoredNodes.length; i++) { favoredNodeStrs[i] = - favoredNodes[i].getAddress().getHostAddress() + ":" + favoredNodes[i].getHostName() + ":" + favoredNodes[i].getPort(); } } diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/DatanodeManager.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/DatanodeManager.java index 098033603b..d20c50b0e1 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/DatanodeManager.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/DatanodeManager.java @@ -341,20 +341,15 @@ public class DatanodeManager { * @return the best match for the given datanode */ DatanodeDescriptor getDatanodeDescriptor(String address) { - DatanodeDescriptor node = null; - int colon = address.indexOf(":"); - int xferPort; - String host = address; - if (colon > 0) { - host = address.substring(0, colon); - xferPort = Integer.parseInt(address.substring(colon+1)); - node = getDatanodeByXferAddr(host, xferPort); - } + DatanodeID dnId = parseDNFromHostsEntry(address); + String host = dnId.getIpAddr(); + int xferPort = dnId.getXferPort(); + DatanodeDescriptor node = getDatanodeByXferAddr(host, xferPort); if (node == null) { node = getDatanodeByHost(host); } if (node == null) { - String networkLocation = resolveNetworkLocation(host); + String networkLocation = resolveNetworkLocation(dnId); // If the current cluster doesn't contain the node, fallback to // something machine local and then rack local. @@ -516,11 +511,6 @@ public class DatanodeManager { } } - public String resolveNetworkLocation(String host) { - DatanodeID d = parseDNFromHostsEntry(host); - return resolveNetworkLocation(d); - } - /* Resolve a node's network location */ private String resolveNetworkLocation (DatanodeID node) { List names = new ArrayList(1);