diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/ServiceClient.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/ServiceClient.java index b3ac7bbe748..212223ce6c0 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/ServiceClient.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/main/java/org/apache/hadoop/yarn/service/client/ServiceClient.java @@ -164,6 +164,9 @@ protected void serviceStop() throws Exception { if (registryClient != null) { registryClient.stop(); } + if (curatorClient != null) { + curatorClient.close(); + } fs.getFileSystem().close(); super.serviceStop(); } @@ -925,7 +928,7 @@ private boolean deleteZKNode(String serviceName) throws Exception { } } - private synchronized CuratorFramework getCuratorClient() + public synchronized CuratorFramework getCuratorClient() throws BadConfigException { String registryQuorum = getConfig().get(RegistryConstants.KEY_REGISTRY_ZK_QUORUM); diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/test/java/org/apache/hadoop/yarn/service/TestYarnNativeServices.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/test/java/org/apache/hadoop/yarn/service/TestYarnNativeServices.java index 948c4076820..08399f2341b 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/test/java/org/apache/hadoop/yarn/service/TestYarnNativeServices.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-core/src/test/java/org/apache/hadoop/yarn/service/TestYarnNativeServices.java @@ -21,6 +21,7 @@ import com.google.common.collect.Lists; import com.google.common.collect.Multimap; import org.apache.commons.io.FileUtils; +import org.apache.curator.framework.imps.CuratorFrameworkState; import org.apache.hadoop.fs.Path; import org.apache.hadoop.registry.client.binding.RegistryPathUtils; import org.apache.hadoop.registry.client.binding.RegistryUtils; @@ -982,4 +983,20 @@ public void testAMFailureValidity() throws Exception { Assert.assertEquals(ServiceState.STABLE, client.getStatus( exampleApp.getName()).getState()); } + + @Test (timeout = 200000) + public void testClosingZkConnectionWhenDestroyService() throws Exception { + setupInternal(NUM_NMS); + ServiceClient client = createClient(getConf()); + Service exampleApp = createExampleApplication(); + client.actionBuild(exampleApp); + Assert.assertEquals(EXIT_COMMAND_ARGUMENT_ERROR, client.actionStop( + exampleApp.getName())); + Assert.assertEquals(0, client.actionDestroy(exampleApp.getName())); + Assert.assertEquals(CuratorFrameworkState.STARTED, + client.getCuratorClient().getState()); + client.stop(); + Assert.assertEquals(CuratorFrameworkState.STOPPED, + client.getCuratorClient().getState()); + } }