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:
parent
b2511abfc8
commit
c8abfa4305
|
@ -213,6 +213,9 @@ Release 2.0.1-alpha - UNRELEASED
|
|||
|
||||
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
|
||||
|
||||
INCOMPATIBLE CHANGES
|
||||
|
|
|
@ -229,7 +229,7 @@ public class HttpServer implements FilterContainer {
|
|||
webServer.setHandler(contexts);
|
||||
|
||||
webAppContext = new WebAppContext();
|
||||
webAppContext.setDisplayName("WepAppsContext");
|
||||
webAppContext.setDisplayName(name);
|
||||
webAppContext.setContextPath("/");
|
||||
webAppContext.setWar(appDir + "/" + name);
|
||||
webAppContext.getServletContext().setAttribute(CONF_CONTEXT_ATTRIBUTE, conf);
|
||||
|
@ -699,8 +699,44 @@ public class HttpServer implements FilterContainer {
|
|||
* stop the server
|
||||
*/
|
||||
public void stop() throws Exception {
|
||||
MultiException exception = null;
|
||||
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 {
|
||||
|
|
|
@ -56,17 +56,15 @@ public class TestHttpServerLifecycle extends HttpServerFunctionalTest {
|
|||
*
|
||||
* @throws Throwable on failure
|
||||
*/
|
||||
@Test public void testStartedServerIsAlive() throws Throwable {
|
||||
@Test
|
||||
public void testStartedServerIsAlive() throws Throwable {
|
||||
HttpServer server = null;
|
||||
try {
|
||||
server = createTestServer();
|
||||
assertNotLive(server);
|
||||
server.start();
|
||||
assertAlive(server);
|
||||
} finally {
|
||||
stop(server);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Assert that the result of {@link HttpServer#toString()} contains the specific text
|
||||
|
@ -105,4 +103,24 @@ public class TestHttpServerLifecycle extends HttpServerFunctionalTest {
|
|||
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