let brooklyn bind with reuse_addr

means starting, stopping, starting will pick up same address;
doesn't go to 8082 just because previous instance in TIME_WAIT state


Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/73a33723
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/73a33723
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/73a33723

Branch: refs/heads/master
Commit: 73a337232f3ceafda01e4f8119463231204f3d7c
Parents: a738eb5
Author: Alex Heneveld <[email protected]>
Authored: Wed Jul 19 13:00:34 2017 +0100
Committer: Alex Heneveld <[email protected]>
Committed: Sat Jul 22 03:10:09 2017 +0100

----------------------------------------------------------------------
 .../LocalhostMachineProvisioningLocation.java   | 22 +++++++++++++++-----
 .../brooklyn/launcher/BrooklynWebServer.java    |  4 +++-
 2 files changed, 20 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/73a33723/core/src/main/java/org/apache/brooklyn/location/localhost/LocalhostMachineProvisioningLocation.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/org/apache/brooklyn/location/localhost/LocalhostMachineProvisioningLocation.java
 
b/core/src/main/java/org/apache/brooklyn/location/localhost/LocalhostMachineProvisioningLocation.java
index b73fd37..ae26b05 100644
--- 
a/core/src/main/java/org/apache/brooklyn/location/localhost/LocalhostMachineProvisioningLocation.java
+++ 
b/core/src/main/java/org/apache/brooklyn/location/localhost/LocalhostMachineProvisioningLocation.java
@@ -198,12 +198,15 @@ public class LocalhostMachineProvisioningLocation extends 
FixedListMachineProvis
        }
     }
 
-    public static synchronized boolean obtainSpecificPort(InetAddress 
localAddress, int portNumber) {
+    public static boolean obtainSpecificPort(InetAddress localAddress, int 
portNumber) {
+        return obtainSpecificPort(localAddress, portNumber, false);
+    }
+    public static synchronized boolean obtainSpecificPort(InetAddress 
localAddress, int portNumber, Boolean reuseAddr) {
         if (portsInUse.contains(portNumber)) {
             return false;
         } else {
             //see if it is available?
-            if (!checkPortAvailable(localAddress, portNumber)) {
+            if (!checkPortAvailable(localAddress, portNumber, reuseAddr)) {
                 return false;
             }
             portsInUse.add(portNumber);
@@ -212,18 +215,27 @@ public class LocalhostMachineProvisioningLocation extends 
FixedListMachineProvis
     }
     /** checks the actual availability of the port on localhost, ie by binding 
to it; cf {@link Networking#isPortAvailable(int)} */
     public static boolean checkPortAvailable(InetAddress localAddress, int 
portNumber) {
+        return checkPortAvailable(localAddress, portNumber, false);
+    }
+    public static boolean checkPortAvailable(InetAddress localAddress, int 
portNumber, Boolean reuseAddr) {
         if (portNumber<1024) {
             if (LOG.isDebugEnabled()) LOG.debug("Skipping system availability 
check for privileged localhost port "+portNumber);
             return true;
         }
-        return Networking.isPortAvailable(localAddress, portNumber);
+        return Networking.isPortAvailable(localAddress, portNumber, reuseAddr);
     }
     public static int obtainPort(PortRange range) {
-        return obtainPort(getLocalhostInetAddress(), range);
+        return obtainPort(range, false);
+    }
+    public static int obtainPort(PortRange range, Boolean reuseAddr) {    
+        return obtainPort(getLocalhostInetAddress(), range, reuseAddr);
     }
     public static int obtainPort(InetAddress localAddress, PortRange range) {
+        return obtainPort(localAddress, range, false);
+    }
+    public static int obtainPort(InetAddress localAddress, PortRange range, 
Boolean reuseAddr) {
         for (int p: range)
-            if (obtainSpecificPort(localAddress, p)) return p;
+            if (obtainSpecificPort(localAddress, p, reuseAddr)) return p;
         if (LOG.isDebugEnabled()) LOG.debug("unable to find port in {} on {}; 
returning -1", range, localAddress);
         return -1;
     }

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/73a33723/launcher/src/main/java/org/apache/brooklyn/launcher/BrooklynWebServer.java
----------------------------------------------------------------------
diff --git 
a/launcher/src/main/java/org/apache/brooklyn/launcher/BrooklynWebServer.java 
b/launcher/src/main/java/org/apache/brooklyn/launcher/BrooklynWebServer.java
index 42f1e7f..889f4b1 100644
--- a/launcher/src/main/java/org/apache/brooklyn/launcher/BrooklynWebServer.java
+++ b/launcher/src/main/java/org/apache/brooklyn/launcher/BrooklynWebServer.java
@@ -386,7 +386,9 @@ public class BrooklynWebServer {
             if (portRange==null) {
                 portRange = getHttpsEnabled() ? httpsPort : httpPort;
             }
-            actualPort = 
LocalhostMachineProvisioningLocation.obtainPort(getAddress(), portRange);
+            actualPort = 
LocalhostMachineProvisioningLocation.obtainPort(getAddress(), portRange,
+                // allow reuse-addr so we prefer to bind to lower-numbered 
ports even if they are in time-wait state
+                true);
             if (actualPort == -1) 
                 throw new IllegalStateException("Unable to provision port for 
web console (wanted "+portRange+")");
         }

Reply via email to