Zookeeper删除父亲节点

Zookeeper作为分布式的协调者,应用越来越广泛。

Zookeeper在删除含有子节点的时候,会爆出 KeeperException.NotEmpty。

找了原始的Zookeeper API 和 Curator框架都是这么抛的异常。

所以不得不手动递归删除节点,代码如下:

private void doDelZnodeRecursively(String path) {
	try {
		List<String> childList = client.getChildren().forPath(path);
		if (CollectionUtils.isEmpty(childList)) {
			client.delete().forPath(path);
		} else {
			for(String childName: childList) {
				String childPath = path + Constants.STR_SLASH + childName;
				List<String> grandChildList = client.getChildren().forPath(childPath);
				if (CollectionUtils.isEmpty(grandChildList)) {
					client.delete().forPath(childPath);
				} else {
					doDelZnodeRecursively(childPath);
				}
			}
			client.delete().forPath(path);
		}
	} catch (Exception e) {
		throw new RuntimeException("Failed to delete node recursively", e);
	}
}


你可能感兴趣的:(Zookeeper删除父亲节点)