Author: eli
Date: Tue Dec 13 07:51:23 2011
New Revision: 1213586
URL: http://svn.apache.org/viewvc?rev=1213586&view=rev
Log:
HDFS-2653. DFSClient should cache whether addrs are non-local when
short-circuiting is enabled. Contributed by Eli Collins
Modified:
hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DFSClient.java
Modified: hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
URL:
http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt?rev=1213586&r1=1213585&r2=1213586&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt (original)
+++ hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt Tue Dec 13
07:51:23 2011
@@ -236,6 +236,9 @@ Release 0.23.1 - UNRELEASED
HDFS-2590. Fix the missing links in the WebHDFS forrest doc. (szetszwo)
HDFS-2596. TestDirectoryScanner doesn't test parallel scans. (eli)
+
+ HDFS-2653. DFSClient should cache whether addrs are non-local when
+ short-circuiting is enabled. (eli)
Release 0.23.0 - 2011-11-01
Modified:
hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DFSClient.java
URL:
http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DFSClient.java?rev=1213586&r1=1213585&r2=1213586&view=diff
==============================================================================
---
hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DFSClient.java
(original)
+++
hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DFSClient.java
Tue Dec 13 07:51:23 2011
@@ -33,10 +33,8 @@ import java.net.SocketException;
import java.util.Collections;
import java.util.EnumSet;
import java.util.HashMap;
-import java.util.HashSet;
import java.util.List;
import java.util.Map;
-import java.util.Set;
import javax.net.SocketFactory;
@@ -532,12 +530,13 @@ public class DFSClient implements java.i
}
}
- private static Set<String> localIpAddresses = Collections
- .synchronizedSet(new HashSet<String>());
+ private static Map<String, Boolean> localAddrMap = Collections
+ .synchronizedMap(new HashMap<String, Boolean>());
private static boolean isLocalAddress(InetSocketAddress targetAddr) {
InetAddress addr = targetAddr.getAddress();
- if (localIpAddresses.contains(addr.getHostAddress())) {
+ Boolean cached = localAddrMap.get(addr.getHostAddress());
+ if (cached != null && cached) {
if (LOG.isTraceEnabled()) {
LOG.trace("Address " + targetAddr + " is local");
}
@@ -558,9 +557,7 @@ public class DFSClient implements java.i
if (LOG.isTraceEnabled()) {
LOG.trace("Address " + targetAddr + " is local");
}
- if (local == true) {
- localIpAddresses.add(addr.getHostAddress());
- }
+ localAddrMap.put(addr.getHostAddress(), local);
return local;
}