YARN-42. Modify NM's non-aggregating logs' handler to stop properly so that NMs don't get NPEs on startup errors. Contributed by Devaraj K.

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1380954 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Vinod Kumar Vavilapalli 2012-09-05 02:46:07 +00:00
parent ab74b1adde
commit 65b308f783
3 changed files with 33 additions and 10 deletions

View File

@ -59,6 +59,9 @@ Release 2.1.0-alpha - Unreleased
YARN-79. Implement close on all clients to YARN so that RPC clients don't YARN-79. Implement close on all clients to YARN so that RPC clients don't
throw exceptions on shut-down. (Vinod Kumar Vavilapalli) throw exceptions on shut-down. (Vinod Kumar Vavilapalli)
YARN-42. Modify NM's non-aggregating logs' handler to stop properly so that
NMs don't get NPEs on startup errors. (Devaraj K via vinodkv)
Release 0.23.4 - UNRELEASED Release 0.23.4 - UNRELEASED
INCOMPATIBLE CHANGES INCOMPATIBLE CHANGES

View File

@ -79,16 +79,18 @@ public class NonAggregatingLogHandler extends AbstractService implements
@Override @Override
public void stop() { public void stop() {
sched.shutdown(); if (sched != null) {
boolean isShutdown = false; sched.shutdown();
try { boolean isShutdown = false;
isShutdown = sched.awaitTermination(10, TimeUnit.SECONDS); try {
} catch (InterruptedException e) { isShutdown = sched.awaitTermination(10, TimeUnit.SECONDS);
sched.shutdownNow(); } catch (InterruptedException e) {
isShutdown = true; sched.shutdownNow();
} isShutdown = true;
if (!isShutdown) { }
sched.shutdownNow(); if (!isShutdown) {
sched.shutdownNow();
}
} }
super.stop(); super.stop();
} }

View File

@ -183,6 +183,24 @@ public class TestNonAggregatingLogHandler {
verify(mockSched).schedule(any(Runnable.class), eq(10800l), verify(mockSched).schedule(any(Runnable.class), eq(10800l),
eq(TimeUnit.SECONDS)); eq(TimeUnit.SECONDS));
} }
@Test
public void testStop() throws Exception {
NonAggregatingLogHandler aggregatingLogHandler =
new NonAggregatingLogHandler(null, null, null);
// It should not throw NullPointerException
aggregatingLogHandler.stop();
NonAggregatingLogHandlerWithMockExecutor logHandler =
new NonAggregatingLogHandlerWithMockExecutor(null, null, null);
logHandler.init(new Configuration());
logHandler.stop();
verify(logHandler.mockSched).shutdown();
verify(logHandler.mockSched)
.awaitTermination(eq(10l), eq(TimeUnit.SECONDS));
verify(logHandler.mockSched).shutdownNow();
}
private class NonAggregatingLogHandlerWithMockExecutor extends private class NonAggregatingLogHandlerWithMockExecutor extends
NonAggregatingLogHandler { NonAggregatingLogHandler {