/**
*
* @ClassName: Delete_API_Sync_Usage
* @Description: TODO(ZooKeeper API 删除节点,使用同步(sync)接口)
* @author RongShu
* @date 2017年6月11日 下午8:34:59
*
*/
public class Delete_API_Sync_Usage implements Watcher {
private static CountDownLatch connectedSemaphore = new CountDownLatch(1);
private static ZooKeeper zk;
public static void main(String[] args) throws Exception {
String path = "/zk-book";
zk = new ZooKeeper("localhost:2181",5000, new Delete_API_Sync_Usage());
connectedSemaphore.await();
zk.create( path, "".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL );
zk.delete( path, -1 );
Thread.sleep(2000);
}
@Override
public void process(WatchedEvent event) {
if (KeeperState.SyncConnected == event.getState()) {
if (EventType.None == event.getType() && null == event.getPath()) {
connectedSemaphore.countDown();
}
}
}
}
注意:
如果一个节点存在至少一个子节点的话,那么该节点将无法被直接删除,必须先删除掉所有的子节点。
扩展
参考
1.《从Paxos到Zookeeper:分布式一致性原理与实践》
2.https://zookeeper.apache.org/doc/r3.5.3-beta/api/index.html