You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by bs...@apache.org on 2019/05/21 23:23:27 UTC

[geode] branch feature/GEODE-6789 created (now ffe00a4)

This is an automated email from the ASF dual-hosted git repository.

bschuchardt pushed a change to branch feature/GEODE-6789
in repository https://gitbox.apache.org/repos/asf/geode.git.


      at ffe00a4  GEODE-6789 locator fails to start even though ports in membership-port-range are available

This branch includes the following new commits:

     new ffe00a4  GEODE-6789 locator fails to start even though ports in membership-port-range are available

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[geode] 01/01: GEODE-6789 locator fails to start even though ports in membership-port-range are available

Posted by bs...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

bschuchardt pushed a commit to branch feature/GEODE-6789
in repository https://gitbox.apache.org/repos/asf/geode.git

commit ffe00a46cf2a04d32fb8fbe5c319dab993b26053
Author: Bruce Schuchardt <bs...@pivotal.io>
AuthorDate: Tue May 21 16:20:47 2019 -0700

    GEODE-6789 locator fails to start even though ports in membership-port-range are available
    
    Do not rely on exception text to determine whether a bind() operation
    failed.  Instead, treat all SocketAcceptions thrown by server socket
    creation a failure to bind to an inet socket address.
---
 .../geode/internal/cache/tier/sockets/AcceptorImpl.java | 14 ++------------
 .../org/apache/geode/internal/net/SocketCreator.java    | 17 ++++-------------
 2 files changed, 6 insertions(+), 25 deletions(-)

diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/AcceptorImpl.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/AcceptorImpl.java
index 7f6cef3..d192dc6 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/AcceptorImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/AcceptorImpl.java
@@ -23,7 +23,6 @@ import java.io.EOFException;
 import java.io.IOException;
 import java.io.InterruptedIOException;
 import java.io.OutputStream;
-import java.net.BindException;
 import java.net.Inet6Address;
 import java.net.InetAddress;
 import java.net.InetSocketAddress;
@@ -525,7 +524,7 @@ public class AcceptorImpl implements Acceptor, Runnable {
             serverSock.bind(new InetSocketAddress(getBindAddress(), port), backLog);
             break;
           } catch (SocketException b) {
-            if (!treatAsBindException(b) || System.currentTimeMillis() > tilt) {
+            if (System.currentTimeMillis() > tilt) {
               throw b;
             }
           }
@@ -555,7 +554,7 @@ public class AcceptorImpl implements Acceptor, Runnable {
                 this.gatewayTransportFilters, socketBufferSize);
             break;
           } catch (SocketException e) {
-            if (!treatAsBindException(e) || System.currentTimeMillis() > tilt) {
+            if (System.currentTimeMillis() > tilt) {
               throw e;
             }
           }
@@ -1818,15 +1817,6 @@ public class AcceptorImpl implements Acceptor, Runnable {
     return gatewayTransportFilters;
   }
 
-  // IBM J9 sometimes reports "listen failed" instead of BindException
-  private static boolean treatAsBindException(SocketException se) {
-    if (se instanceof BindException) {
-      return true;
-    }
-    final String msg = se.getMessage();
-    return msg != null && msg.contains("Invalid argument: listen failed");
-  }
-
   static boolean isAuthenticationRequired() {
     return isAuthenticationRequired;
   }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/net/SocketCreator.java b/geode-core/src/main/java/org/apache/geode/internal/net/SocketCreator.java
index bc136f5..23dc6a6 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/net/SocketCreator.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/net/SocketCreator.java
@@ -774,8 +774,8 @@ public class SocketCreator {
               "Unable to find a free port in the membership-port-range");
         }
       }
+      ServerSocket socket = null;
       try {
-        ServerSocket socket;
         if (useNIO) {
           ServerSocketChannel channel = ServerSocketChannel.open();
           socket = channel.socket();
@@ -788,23 +788,14 @@ public class SocketCreator {
         }
         return socket;
       } catch (java.net.SocketException ex) {
-        if (useNIO || SocketCreator.treatAsBindException(ex)) {
-          localPort++;
-        } else {
-          throw ex;
+        if (socket != null && !socket.isClosed()) {
+          socket.close();
         }
+        localPort++;
       }
     }
   }
 
-  private static boolean treatAsBindException(SocketException se) {
-    if (se instanceof BindException) {
-      return true;
-    }
-    final String msg = se.getMessage();
-    return (msg != null && msg.contains("Invalid argument: listen failed"));
-  }
-
   /**
    * Return a client socket. This method is used by client/server clients.
    */