HADOOP-14773. Extend ZKCuratorManager API for more reusability. (Íñigo Goiri via Subru).
This commit is contained in:
parent
f34646d652
commit
75dd866bfb
@ -33,9 +33,12 @@
|
||||
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 List<ACL> getACL(final String path) throws Exception {
|
||||
/**
|
||||
* 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 byte[] getData(final String path) throws Exception {
|
||||
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 byte[] getData(final String path) throws Exception {
|
||||
* @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 boolean create(final String path, List<ACL> zkAcl) throws Exception {
|
||||
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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -67,7 +67,7 @@ public void testReadWriteData() throws Exception {
|
||||
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);
|
||||
}
|
||||
|
||||
|
@ -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 synchronized void initInternal(Configuration conf)
|
||||
@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 @@ private void addOrUpdateReservationState(
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 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.
|
||||
|
Loading…
Reference in New Issue
Block a user