diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/client/api/impl/TimelineClientImpl.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/client/api/impl/TimelineClientImpl.java index c433854016f..4f86f6082a2 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/client/api/impl/TimelineClientImpl.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/client/api/impl/TimelineClientImpl.java @@ -101,7 +101,9 @@ opts.addOption("help", false, "Print usage"); } - private Client client; + @Private + @VisibleForTesting + Client client; private ConnectionConfigurator connConfigurator; private DelegationTokenAuthenticator authenticator; private DelegationTokenAuthenticatedURL.Token token; @@ -324,6 +326,9 @@ protected TimelineWriter createTimelineWriter(Configuration conf, @Override protected void serviceStop() throws Exception { + if(this.client != null) { + this.client.destroy(); + } if (this.timelineWriter != null) { this.timelineWriter.close(); } diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/client/api/impl/TestTimelineClient.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/client/api/impl/TestTimelineClient.java index ae9fa46f2d7..426182502a0 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/client/api/impl/TestTimelineClient.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/client/api/impl/TestTimelineClient.java @@ -19,11 +19,7 @@ package org.apache.hadoop.yarn.client.api.impl; import static org.mockito.Matchers.any; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.doThrow; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.when; +import static org.mockito.Mockito.*; import java.io.File; import java.io.IOException; @@ -487,6 +483,17 @@ public void testTimelineClientCleanup() throws Exception { Assert.assertFalse("Reloader is still alive", reloaderStillAlive); } + @Test + public void testTimelineConnectorDestroy() { + YarnConfiguration conf = new YarnConfiguration(); + conf.setBoolean(YarnConfiguration.TIMELINE_SERVICE_ENABLED, true); + TimelineClientImpl client = createTimelineClient(conf); + Client mockJerseyClient = mock(Client.class); + client.client = mockJerseyClient; + client.stop(); + verify(mockJerseyClient, times(1)).destroy(); + } + private static class TestTimlineDelegationTokenSecretManager extends AbstractDelegationTokenSecretManager {