You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by sv...@apache.org on 2017/03/02 12:16:07 UTC
[06/10] brooklyn-server git commit: a retry and extra logging when
bind exception happens
a retry and extra logging when bind exception happens
to fix non-det test failures on server, due to bind conflicts
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/80322eb1
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/80322eb1
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/80322eb1
Branch: refs/heads/master
Commit: 80322eb15bb91b543584e643496d08f2e4f92039
Parents: 7503519
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Thu Feb 16 09:32:01 2017 +0000
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Wed Mar 1 08:54:55 2017 +0000
----------------------------------------------------------------------
.../apache/brooklyn/launcher/common/BasicLauncher.java | 4 +++-
.../org/apache/brooklyn/launcher/BrooklynLauncher.java | 2 +-
.../apache/brooklyn/launcher/BrooklynWebServer.java | 13 ++++++++++++-
.../apache/brooklyn/launcher/BrooklynLauncherTest.java | 2 +-
.../java/org/apache/brooklyn/util/net/Networking.java | 6 ++++++
5 files changed, 23 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/80322eb1/launcher-common/src/main/java/org/apache/brooklyn/launcher/common/BasicLauncher.java
----------------------------------------------------------------------
diff --git a/launcher-common/src/main/java/org/apache/brooklyn/launcher/common/BasicLauncher.java b/launcher-common/src/main/java/org/apache/brooklyn/launcher/common/BasicLauncher.java
index 7b16184..d098c1d 100644
--- a/launcher-common/src/main/java/org/apache/brooklyn/launcher/common/BasicLauncher.java
+++ b/launcher-common/src/main/java/org/apache/brooklyn/launcher/common/BasicLauncher.java
@@ -46,7 +46,6 @@ import org.apache.brooklyn.core.catalog.internal.CatalogInitialization;
import org.apache.brooklyn.core.entity.Attributes;
import org.apache.brooklyn.core.entity.Entities;
import org.apache.brooklyn.core.entity.StartableApplication;
-import org.apache.brooklyn.core.entity.factory.ApplicationBuilder;
import org.apache.brooklyn.core.entity.trait.Startable;
import org.apache.brooklyn.core.internal.BrooklynProperties;
import org.apache.brooklyn.core.mgmt.EntityManagementUtils;
@@ -426,7 +425,10 @@ public class BasicLauncher<T extends BasicLauncher<T>> {
CatalogInitialization catInit = ((ManagementContextInternal)managementContext).getCatalogInitialization();
markCatalogStartingUp(catInit);
+
+ // note: web console is started by subclass overriding this method
startingUp();
+
initCamp();
handlePersistence();
populateCatalog(catInit);
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/80322eb1/launcher/src/main/java/org/apache/brooklyn/launcher/BrooklynLauncher.java
----------------------------------------------------------------------
diff --git a/launcher/src/main/java/org/apache/brooklyn/launcher/BrooklynLauncher.java b/launcher/src/main/java/org/apache/brooklyn/launcher/BrooklynLauncher.java
index 67ad368..1dea657 100644
--- a/launcher/src/main/java/org/apache/brooklyn/launcher/BrooklynLauncher.java
+++ b/launcher/src/main/java/org/apache/brooklyn/launcher/BrooklynLauncher.java
@@ -326,7 +326,7 @@ public class BrooklynLauncher extends BasicLauncher<BrooklynLauncher> {
webServer.start();
} catch (Exception e) {
- LOG.warn("Failed to start Brooklyn web-console (rethrowing): " + Exceptions.collapseText(e));
+ LOG.warn("Failed to start Brooklyn web-console (rethrowing) on "+bindAddress+" (port constraint "+port+"): " + Exceptions.collapseText(e));
throw new FatalRuntimeException("Failed to start Brooklyn web-console: " + Exceptions.collapseText(e), e);
}
}
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/80322eb1/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 1377e41..e5c6b15 100644
--- a/launcher/src/main/java/org/apache/brooklyn/launcher/BrooklynWebServer.java
+++ b/launcher/src/main/java/org/apache/brooklyn/launcher/BrooklynWebServer.java
@@ -20,6 +20,7 @@ package org.apache.brooklyn.launcher;
import java.io.File;
import java.io.InputStream;
+import java.net.BindException;
import java.net.InetAddress;
import java.net.URI;
import java.security.KeyPair;
@@ -82,6 +83,8 @@ import org.apache.brooklyn.util.os.Os;
import org.apache.brooklyn.util.stream.Streams;
import org.apache.brooklyn.util.text.Identifiers;
import org.apache.brooklyn.util.text.Strings;
+import org.apache.brooklyn.util.time.Duration;
+import org.apache.brooklyn.util.time.Time;
import org.apache.brooklyn.util.web.ContextHandlerCollectionHotSwappable;
import org.eclipse.jetty.http.HttpVersion;
import org.eclipse.jetty.jaas.JAASLoginService;
@@ -447,7 +450,15 @@ public class BrooklynWebServer {
rootContext.setTempDirectory(Os.mkdirs(new File(webappTempDir, "war-root")));
server.setHandler(handlers);
- server.start();
+ try {
+ server.start();
+ } catch (BindException e) {
+ // port discovery routines may take some time to clear, e.g. 250ms for SO_TIMEOUT
+ // tests fail because of this; see if adding a delay improves things
+ log.warn("Initial server start-up failed binding (retrying after a delay): "+e);
+ Time.sleep(Duration.millis(500));
+ server.start();
+ }
//reinit required because some webapps (eg grails) might wipe our language extension bindings
BrooklynInitialization.reinitAll();
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/80322eb1/launcher/src/test/java/org/apache/brooklyn/launcher/BrooklynLauncherTest.java
----------------------------------------------------------------------
diff --git a/launcher/src/test/java/org/apache/brooklyn/launcher/BrooklynLauncherTest.java b/launcher/src/test/java/org/apache/brooklyn/launcher/BrooklynLauncherTest.java
index c3db7ad..72f389e 100644
--- a/launcher/src/test/java/org/apache/brooklyn/launcher/BrooklynLauncherTest.java
+++ b/launcher/src/test/java/org/apache/brooklyn/launcher/BrooklynLauncherTest.java
@@ -293,7 +293,7 @@ public class BrooklynLauncherTest {
}))
.installSecurityFilter(false)
.start();
- // such an error should be thrown, then caught in this calling thread
+ // 'deliberate-exception' error above should be thrown, then caught in this calling thread
ManagementContext mgmt = launcher.getServerDetails().getManagementContext();
Assert.assertFalse( ((ManagementContextInternal)mgmt).errors().isEmpty() );
Assert.assertTrue( ((ManagementContextInternal)mgmt).errors().get(0).toString().contains("deliberate"), ""+((ManagementContextInternal)mgmt).errors() );
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/80322eb1/utils/common/src/main/java/org/apache/brooklyn/util/net/Networking.java
----------------------------------------------------------------------
diff --git a/utils/common/src/main/java/org/apache/brooklyn/util/net/Networking.java b/utils/common/src/main/java/org/apache/brooklyn/util/net/Networking.java
index 4e97d5c..028b3c8 100644
--- a/utils/common/src/main/java/org/apache/brooklyn/util/net/Networking.java
+++ b/utils/common/src/main/java/org/apache/brooklyn/util/net/Networking.java
@@ -103,12 +103,14 @@ public class Networking {
ss = new ServerSocket();
ss.setSoTimeout(250);
ss.setReuseAddress(true);
+ if (!ss.getReuseAddress()) { logReuseAddressNotSupported(); }
ss.bind(new InetSocketAddress(localAddress, port));
// Check UDP port
ds = new DatagramSocket(null);
ds.setSoTimeout(250);
ds.setReuseAddress(true);
+ if (!ds.getReuseAddress()) { logReuseAddressNotSupported(); }
ds.bind(new InetSocketAddress(localAddress, port));
} catch (IOException e) {
if (log.isTraceEnabled()) log.trace("Failed binding to " + localAddress + " : " + port, e);
@@ -176,6 +178,10 @@ public class Networking {
}
}
+ private static void logReuseAddressNotSupported() {
+ log.debug("Socket reuse-address not supported on this platform; port discovery may mis-report available ports");
+ }
+
/**
* Bind to the specified IP, but let the OS pick a port.
* If the operation fails we know it's not because of