Browse Source

HADOOP-12653. Use SO_REUSEADDR to avoid getting "Address already in use" when using kerberos and attempting to bind to any port on the local IP address (cmccabe)

(cherry picked from commit 30c7dfd8ba87fe1b455ad6c05c0a6cd6486f55b7)
Colin Patrick Mccabe 9 years ago
parent
commit
181437cccf

+ 4 - 0
hadoop-common-project/hadoop-common/CHANGES.txt

@@ -18,6 +18,10 @@ Release 2.9.0 - UNRELEASED
     HADOOP-12663. Remove Hard-Coded Values From FileSystem.java.
     HADOOP-12663. Remove Hard-Coded Values From FileSystem.java.
     (BELUGA BEHR via stevel)
     (BELUGA BEHR via stevel)
 
 
+    HADOOP-12653. Use SO_REUSEADDR to avoid getting "Address already in use"
+    when using kerberos and attempting to bind to any port on the local IP
+    address (cmccabe)
+
   BUG FIXES
   BUG FIXES
 
 
     HADOOP-12655. TestHttpServer.testBindAddress bind port range is wider
     HADOOP-12655. TestHttpServer.testBindAddress bind port range is wider

+ 1 - 0
hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/Client.java

@@ -625,6 +625,7 @@ public class Client {
               // If host name is a valid local address then bind socket to it
               // If host name is a valid local address then bind socket to it
               InetAddress localAddr = NetUtils.getLocalInetAddress(host);
               InetAddress localAddr = NetUtils.getLocalInetAddress(host);
               if (localAddr != null) {
               if (localAddr != null) {
+                this.socket.setReuseAddress(true);
                 this.socket.bind(new InetSocketAddress(localAddr, 0));
                 this.socket.bind(new InetSocketAddress(localAddr, 0));
               }
               }
             }
             }