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+")"); }
