HADOOP-7703. Improved excpetion handling of shutting down web server.
(Devaraj K via Eric Yang) git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1179286 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
9a4e890f4a
commit
c90d7d649b
@ -45,6 +45,8 @@ Trunk (unreleased changes)
|
|||||||
HADOOP-6220. HttpServer wraps InterruptedExceptions by IOExceptions if interrupted
|
HADOOP-6220. HttpServer wraps InterruptedExceptions by IOExceptions if interrupted
|
||||||
in startup (stevel)
|
in startup (stevel)
|
||||||
|
|
||||||
|
HADOOP-7703. Improved excpetion handling of shutting down web server.
|
||||||
|
(Devaraj K via Eric Yang)
|
||||||
|
|
||||||
Release 0.23.0 - Unreleased
|
Release 0.23.0 - Unreleased
|
||||||
|
|
||||||
|
@ -210,7 +210,7 @@ public HttpServer(String name, String bindAddress, int port,
|
|||||||
webServer.setHandler(contexts);
|
webServer.setHandler(contexts);
|
||||||
|
|
||||||
webAppContext = new WebAppContext();
|
webAppContext = new WebAppContext();
|
||||||
webAppContext.setDisplayName("WepAppsContext");
|
webAppContext.setDisplayName(name);
|
||||||
webAppContext.setContextPath("/");
|
webAppContext.setContextPath("/");
|
||||||
webAppContext.setWar(appDir + "/" + name);
|
webAppContext.setWar(appDir + "/" + name);
|
||||||
webAppContext.getServletContext().setAttribute(CONF_CONTEXT_ATTRIBUTE, conf);
|
webAppContext.getServletContext().setAttribute(CONF_CONTEXT_ATTRIBUTE, conf);
|
||||||
@ -696,8 +696,44 @@ public void start() throws IOException {
|
|||||||
* stop the server
|
* stop the server
|
||||||
*/
|
*/
|
||||||
public void stop() throws Exception {
|
public void stop() throws Exception {
|
||||||
|
MultiException exception = null;
|
||||||
|
try {
|
||||||
listener.close();
|
listener.close();
|
||||||
|
} catch (Exception e) {
|
||||||
|
LOG.error("Error while stopping listener for webapp"
|
||||||
|
+ webAppContext.getDisplayName(), e);
|
||||||
|
exception = addMultiException(exception, e);
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
// clear & stop webAppContext attributes to avoid memory leaks.
|
||||||
|
webAppContext.clearAttributes();
|
||||||
|
webAppContext.stop();
|
||||||
|
} catch (Exception e) {
|
||||||
|
LOG.error("Error while stopping web app context for webapp "
|
||||||
|
+ webAppContext.getDisplayName(), e);
|
||||||
|
exception = addMultiException(exception, e);
|
||||||
|
}
|
||||||
|
try {
|
||||||
webServer.stop();
|
webServer.stop();
|
||||||
|
} catch (Exception e) {
|
||||||
|
LOG.error("Error while stopping web server for webapp "
|
||||||
|
+ webAppContext.getDisplayName(), e);
|
||||||
|
exception = addMultiException(exception, e);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (exception != null) {
|
||||||
|
exception.ifExceptionThrow();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private MultiException addMultiException(MultiException exception, Exception e) {
|
||||||
|
if(exception == null){
|
||||||
|
exception = new MultiException();
|
||||||
|
}
|
||||||
|
exception.add(e);
|
||||||
|
return exception;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void join() throws InterruptedException {
|
public void join() throws InterruptedException {
|
||||||
|
@ -56,17 +56,15 @@ private void assertNotLive(HttpServer server) {
|
|||||||
*
|
*
|
||||||
* @throws Throwable on failure
|
* @throws Throwable on failure
|
||||||
*/
|
*/
|
||||||
@Test public void testStartedServerIsAlive() throws Throwable {
|
@Test
|
||||||
|
public void testStartedServerIsAlive() throws Throwable {
|
||||||
HttpServer server = null;
|
HttpServer server = null;
|
||||||
try {
|
|
||||||
server = createTestServer();
|
server = createTestServer();
|
||||||
assertNotLive(server);
|
assertNotLive(server);
|
||||||
server.start();
|
server.start();
|
||||||
assertAlive(server);
|
assertAlive(server);
|
||||||
} finally {
|
|
||||||
stop(server);
|
stop(server);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Assert that the result of {@link HttpServer#toString()} contains the specific text
|
* Assert that the result of {@link HttpServer#toString()} contains the specific text
|
||||||
@ -105,4 +103,24 @@ private void assertToStringContains(HttpServer server, String text) {
|
|||||||
assertNotLive(server);
|
assertNotLive(server);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test that the server is alive once started
|
||||||
|
*
|
||||||
|
* @throws Throwable
|
||||||
|
* on failure
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testWepAppContextAfterServerStop() throws Throwable {
|
||||||
|
HttpServer server = null;
|
||||||
|
String key = "test.attribute.key";
|
||||||
|
String value = "test.attribute.value";
|
||||||
|
server = createTestServer();
|
||||||
|
assertNotLive(server);
|
||||||
|
server.start();
|
||||||
|
server.setAttribute(key, value);
|
||||||
|
assertAlive(server);
|
||||||
|
assertEquals(value, server.getAttribute(key));
|
||||||
|
stop(server);
|
||||||
|
assertNull("Server context should have cleared", server.getAttribute(key));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user