diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/curator/ZKCuratorManager.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/curator/ZKCuratorManager.java index 3adf02834ea..9a031af30fb 100644 --- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/curator/ZKCuratorManager.java +++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/curator/ZKCuratorManager.java @@ -33,9 +33,12 @@ import org.apache.hadoop.fs.CommonConfigurationKeys; import org.apache.hadoop.util.ZKUtil; import org.apache.zookeeper.CreateMode; import org.apache.zookeeper.data.ACL; +import org.apache.zookeeper.data.Stat; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.google.common.base.Preconditions; + /** * Helper class that provides utility methods specific to ZK operations. */ @@ -179,7 +182,6 @@ public final class ZKCuratorManager { /** * Get the data in a ZNode. * @param path Path of the ZNode. - * @param stat Output statistics of the ZNode. * @return The data in the ZNode. * @throws Exception If it cannot contact Zookeeper. */ @@ -187,6 +189,28 @@ public final class ZKCuratorManager { return curator.getData().forPath(path); } + /** + * Get the data in a ZNode. + * @param path Path of the ZNode. + * @param stat + * @return The data in the ZNode. + * @throws Exception If it cannot contact Zookeeper. + */ + public byte[] getData(final String path, Stat stat) throws Exception { + return curator.getData().storingStatIn(stat).forPath(path); + } + + /** + * Get the data in a ZNode. + * @param path Path of the ZNode. + * @return The data in the ZNode. + * @throws Exception If it cannot contact Zookeeper. + */ + public String getStringData(final String path) throws Exception { + byte[] bytes = getData(path); + return new String(bytes, Charset.forName("UTF-8")); + } + /** * Get the data in a ZNode. * @param path Path of the ZNode. @@ -194,8 +218,8 @@ public final class ZKCuratorManager { * @return The data in the ZNode. * @throws Exception If it cannot contact Zookeeper. */ - public String getSringData(final String path) throws Exception { - byte[] bytes = getData(path); + public String getStringData(final String path, Stat stat) throws Exception { + byte[] bytes = getData(path, stat); return new String(bytes, Charset.forName("UTF-8")); } @@ -271,15 +295,37 @@ public final class ZKCuratorManager { return created; } + /** + * Utility function to ensure that the configured base znode exists. + * This recursively creates the znode as well as all of its parents. + * @param path Path of the znode to create. + * @throws Exception If it cannot create the file. + */ + public void createRootDirRecursively(String path) throws Exception { + String[] pathParts = path.split("/"); + Preconditions.checkArgument( + pathParts.length >= 1 && pathParts[0].isEmpty(), + "Invalid path: %s", path); + StringBuilder sb = new StringBuilder(); + + for (int i = 1; i < pathParts.length; i++) { + sb.append("/").append(pathParts[i]); + create(sb.toString()); + } + } + /** * Delete a ZNode. * @param path Path of the ZNode. + * @return If the znode was deleted. * @throws Exception If it cannot contact ZooKeeper. */ - public void delete(final String path) throws Exception { + public boolean delete(final String path) throws Exception { if (exists(path)) { curator.delete().deletingChildrenIfNeeded().forPath(path); + return true; } + return false; } /** diff --git a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/util/curator/TestZKCuratorManager.java b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/util/curator/TestZKCuratorManager.java index 2bcf5088302..3e78a44fa70 100644 --- a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/util/curator/TestZKCuratorManager.java +++ b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/util/curator/TestZKCuratorManager.java @@ -67,7 +67,7 @@ public class TestZKCuratorManager { curator.create(testZNode); assertTrue(curator.exists(testZNode)); curator.setData(testZNode, expectedString, -1); - String testString = curator.getSringData("/test"); + String testString = curator.getStringData("/test"); assertEquals(expectedString, testString); } diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/recovery/ZKRMStateStore.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/recovery/ZKRMStateStore.java index 4b6e82cc11f..a445e756433 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/recovery/ZKRMStateStore.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/recovery/ZKRMStateStore.java @@ -19,7 +19,6 @@ package org.apache.hadoop.yarn.server.resourcemanager.recovery; import com.google.common.annotations.VisibleForTesting; -import com.google.common.base.Preconditions; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.curator.framework.CuratorFramework; @@ -338,7 +337,7 @@ public class ZKRMStateStore extends RMStateStore { @Override public synchronized void startInternal() throws Exception { // ensure root dirs exist - createRootDirRecursively(znodeWorkingPath); + zkManager.createRootDirRecursively(znodeWorkingPath); create(zkRootNodePath); setRootNodeAcls(); delete(fencingNodePath); @@ -1146,22 +1145,6 @@ public class ZKRMStateStore extends RMStateStore { } } - /** - * Utility function to ensure that the configured base znode exists. - * This recursively creates the znode as well as all of its parents. - */ - private void createRootDirRecursively(String path) throws Exception { - String pathParts[] = path.split("/"); - Preconditions.checkArgument(pathParts.length >= 1 && pathParts[0].isEmpty(), - "Invalid path: %s", path); - StringBuilder sb = new StringBuilder(); - - for (int i = 1; i < pathParts.length; i++) { - sb.append("/").append(pathParts[i]); - create(sb.toString()); - } - } - /** * Get alternate path for app id if path according to configured split index * does not exist. We look for path based on all possible split indices.