diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/event/AsyncDispatcher.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/event/AsyncDispatcher.java index 733f0ea..370b0f7 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/event/AsyncDispatcher.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/event/AsyncDispatcher.java @@ -174,12 +174,13 @@ protected void dispatch(Event event) { } else { throw new Exception("No handler for registered for " + type); } - } - catch (Throwable t) { + } catch (Throwable t) { //TODO Maybe log the state of the queue LOG.fatal("Error in dispatcher thread", t); + // If serviceStop is called, we should exit this thread gracefully. if (exitOnDispatchException - && (ShutdownHookManager.get().isShutdownInProgress()) == false) { + && (ShutdownHookManager.get().isShutdownInProgress()) == false + && stopped == false) { LOG.info("Exiting, bbye.."); System.exit(-1); } diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/ResourceManager.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/ResourceManager.java index 141a9c6..12a533b 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/ResourceManager.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/ResourceManager.java @@ -630,7 +630,7 @@ public void handle(SchedulerEvent event) { } this.eventQueue.put(event); } catch (InterruptedException e) { - throw new YarnRuntimeException(e); + LOG.info("Interrupted. Trying to exit gracefully."); } } } diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestResourceTrackerService.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestResourceTrackerService.java index eed9ecf..61800c4 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestResourceTrackerService.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestResourceTrackerService.java @@ -30,6 +30,8 @@ import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.io.IOUtils; +import org.apache.hadoop.metrics2.MetricsSystem; +import org.apache.hadoop.metrics2.lib.DefaultMetricsSystem; import org.apache.hadoop.net.NetUtils; import org.apache.hadoop.yarn.api.records.ApplicationAttemptId; import org.apache.hadoop.yarn.api.records.ApplicationId; @@ -63,7 +65,7 @@ private final static File TEMP_DIR = new File(System.getProperty( "test.build.data", "/tmp"), "decommision"); - private File hostFile = new File(TEMP_DIR + File.separator + "hostFile.txt"); + private final File hostFile = new File(TEMP_DIR + File.separator + "hostFile.txt"); private MockRM rm; /** @@ -468,7 +470,7 @@ private void checkUnealthyNMCount(MockRM rm, MockNM nm1, boolean health, @Test public void testNodeRegistrationWithContainers() throws Exception { - MockRM rm = new MockRM(); + rm = new MockRM(); rm.init(new YarnConfiguration()); rm.start(); RMApp app = rm.submitApp(1024); @@ -491,7 +493,7 @@ public void testNodeRegistrationWithContainers() throws Exception { @Test public void testReconnectNode() throws Exception { final DrainDispatcher dispatcher = new DrainDispatcher(); - MockRM rm = new MockRM() { + rm = new MockRM() { @Override protected EventHandler createSchedulerEventDispatcher() { return new SchedulerEventDispatcher(this.scheduler) { @@ -593,9 +595,15 @@ public void tearDown() { if (hostFile != null && hostFile.exists()) { hostFile.delete(); } + ClusterMetrics.destroy(); if (rm != null) { rm.stop(); } + + MetricsSystem ms = DefaultMetricsSystem.instance(); + if (ms.getSource("ClusterMetrics") != null) { + DefaultMetricsSystem.shutdown(); + } } }