首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用java从根创建zoo门将节点(该节点还不存在)。

无法使用java从根创建zoo门将节点(该节点还不存在)。
EN

Stack Overflow用户
提问于 2015-04-20 16:09:28
回答 1查看 3.4K关注 0票数 1

我打算从java创建一个动物园管理员节点。我首先创建策展人客户端,用它检索对象,并创建失败的节点。

我做了什么?

代码语言:javascript
复制
        //client is the CuratorFramework object
        String MUTEX_LEADER_PATH = "/leader/jobadmin";
        client.getZookeeperClient().getZooKeeper().create(MUTEX_LEADER_PATH, new byte[0], Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);

我得到了什么?

代码语言:javascript
复制
    [2015-04-20 10:53:17,992] [ERROR] [org.apache.curator.framework.recipes.leader.LeaderSelector] [LeaderSelector-0] mutex.acquire() threw an exception
org.apache.zookeeper.KeeperException$NoNodeException: KeeperErrorCode = NoNode for /leader
    at org.apache.zookeeper.KeeperException.create(KeeperException.java:111)
    at org.apache.zookeeper.KeeperException.create(KeeperException.java:51)
    at org.apache.zookeeper.ZooKeeper.create(ZooKeeper.java:783)
    at org.apache.curator.utils.ZKPaths.mkdirs(ZKPaths.java:199)
    at org.apache.curator.framework.imps.CreateBuilderImpl$11.call(CreateBuilderImpl.java:682)
    at org.apache.curator.framework.imps.CreateBuilderImpl$11.call(CreateBuilderImpl.java:660)
    at org.apache.curator.RetryLoop.callWithRetry(RetryLoop.java:107)
    at org.apache.curator.framework.imps.CreateBuilderImpl.pathInForeground(CreateBuilderImpl.java:656)
    at org.apache.curator.framework.imps.CreateBuilderImpl.protectedPathInForeground(CreateBuilderImpl.java:441)
    at org.apache.curator.framework.imps.CreateBuilderImpl.forPath(CreateBuilderImpl.java:431)
    at org.apache.curator.framework.imps.CreateBuilderImpl.forPath(CreateBuilderImpl.java:411)
    at org.apache.curator.framework.imps.CreateBuilderImpl.forPath(CreateBuilderImpl.java:44)
    at org.apache.curator.framework.recipes.locks.LockInternals.attemptLock(LockInternals.java:224)
    at org.apache.curator.framework.recipes.locks.InterProcessMutex.internalLock(InterProcessMutex.java:221)
    at org.apache.curator.framework.recipes.locks.InterProcessMutex.acquire(InterProcessMutex.java:77)
    at org.apache.curator.framework.recipes.leader.LeaderSelector.doWork(LeaderSelector.java:378)
    at org.apache.curator.framework.recipes.leader.LeaderSelector.doWorkLoop(LeaderSelector.java:436)
    at org.apache.curator.framework.recipes.leader.LeaderSelector.access$100(LeaderSelector.java:64)
    at org.apache.curator.framework.recipes.leader.LeaderSelector$2.call(LeaderSelector.java:241)
    at org.apache.curator.framework.recipes.leader.LeaderSelector$2.call(LeaderSelector.java:235)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)

尝试了不同的创建模式,但结果是一样的。

使用以下代码创建客户端:

代码语言:javascript
复制
private synchronized CuratorFramework createClient() {
    if (client != null) {
        return client;
    }

    RetryPolicy retryPolicy = new RetryUntilElapsed(SESSION_TIMEOUT, 1000);
    client = CuratorFrameworkFactory.newClient(MUTEX_LEADER_PATH, SESSION_TIMEOUT, 100, retryPolicy);
    client.start();

    return client;
}

如何创建根本不存在的动物园管理员节点?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-20 16:58:56

我用下面的代码解决了这个问题。

代码语言:javascript
复制
 client.create().creatingParentsIfNeeded().withMode(CreateMode.PERSISTENT).withACL(Ids.OPEN_ACL_UNSAFE).forPath(MUTEX_LEADER_PATH, new byte[0]);

效果很好!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29752971

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档