Author: tucu
Date: Mon Aug 13 21:48:52 2012
New Revision: 1372637
URL: http://svn.apache.org/viewvc?rev=1372637&view=rev
Log:
HADOOP-7703. Improved excpetion handling of shutting down web server. (Devaraj
K via Eric Yang)
Modified:
hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/CHANGES.txt
hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/http/HttpServer.java
hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/http/TestHttpServerLifecycle.java
Modified:
hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/CHANGES.txt
URL:
http://svn.apache.org/viewvc/hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/CHANGES.txt?rev=1372637&r1=1372636&r2=1372637&view=diff
==============================================================================
---
hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/CHANGES.txt
(original)
+++
hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/CHANGES.txt
Mon Aug 13 21:48:52 2012
@@ -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
Modified:
hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/http/HttpServer.java
URL:
http://svn.apache.org/viewvc/hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/http/HttpServer.java?rev=1372637&r1=1372636&r2=1372637&view=diff
==============================================================================
---
hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/http/HttpServer.java
(original)
+++
hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/http/HttpServer.java
Mon Aug 13 21:48:52 2012
@@ -229,7 +229,7 @@ public class HttpServer implements Filte
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 Filte
* stop the server
*/
public void stop() throws Exception {
- listener.close();
- webServer.stop();
+ 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 {
Modified:
hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/http/TestHttpServerLifecycle.java
URL:
http://svn.apache.org/viewvc/hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/http/TestHttpServerLifecycle.java?rev=1372637&r1=1372636&r2=1372637&view=diff
==============================================================================
---
hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/http/TestHttpServerLifecycle.java
(original)
+++
hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/http/TestHttpServerLifecycle.java
Mon Aug 13 21:48:52 2012
@@ -56,16 +56,14 @@ public class TestHttpServerLifecycle ext
*
* @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);
- }
+ server = createTestServer();
+ assertNotLive(server);
+ server.start();
+ assertAlive(server);
+ stop(server);
}
/**
@@ -105,4 +103,24 @@ public class TestHttpServerLifecycle ext
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));
+ }
}