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/branches/branch-2@1372637 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Alejandro Abdelnur 2012-08-13 21:48:52 +00:00
parent b2511abfc8
commit c8abfa4305
3 changed files with 69 additions and 12 deletions

View File

@ -213,6 +213,9 @@ Release 2.0.1-alpha - UNRELEASED
HADOOP-8660. TestPseudoAuthenticator failing with NPE. (tucu) HADOOP-8660. TestPseudoAuthenticator failing with NPE. (tucu)
HADOOP-7703. Improved excpetion handling of shutting down web server.
(Devaraj K via Eric Yang)
Release 2.0.0-alpha - 05-23-2012 Release 2.0.0-alpha - 05-23-2012
INCOMPATIBLE CHANGES INCOMPATIBLE CHANGES

View File

@ -229,7 +229,7 @@ public class HttpServer implements FilterContainer {
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);
@ -699,8 +699,44 @@ public class HttpServer implements FilterContainer {
* stop the server * stop the server
*/ */
public void stop() throws Exception { public void stop() throws Exception {
listener.close(); MultiException exception = null;
webServer.stop(); try {
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();
} 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 {

View File

@ -56,16 +56,14 @@ public class TestHttpServerLifecycle extends HttpServerFunctionalTest {
* *
* @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); stop(server);
} finally {
stop(server);
}
} }
/** /**
@ -105,4 +103,24 @@ public class TestHttpServerLifecycle extends HttpServerFunctionalTest {
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));
}
} }