zookeeper-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Ivan Kelly <iv...@apache.org>
Subject Re: mixing persitent and persitent sequential throws NodeExists for sequential mode
Date Wed, 01 Jul 2015 18:14:05 GMT
This occurs because PERSISTENT_SEQUENTIAL uses the cxid of the parent znode
to generate the sequence number. The cxid is incremented every time a child
is created under the znode, so if you have already created 4 nodes, that
explains why the next sequential node you create has id 4, counting from 0.

The fact that this throws a NodeExists exception could be considered a bug.
In some cases it would be better to keep incrementing the sequence until
you get a successful create.

-Ivan

On Wed, Jul 1, 2015 at 7:54 PM David Capwell <dcapwell@gmail.com> wrote:

> I have the following code (in curator):
>
> int id =
> extractId(client.create().creatingParentsIfNeeded().withMode(CreateMode.PERSISTENT_SEQUENTIAL).forPath(prefix,
> data));
>
> and
>
>
> client.create().creatingParentsIfNeeded().withMode(CreateMode.PERSISTENT).forPath(path(id),
> data);
>
>
> The first part joins our cluster and gets a id from zookeeper.  The
> second call will create a znode that looks like a znode above.
>
> The reason I do this is that I would like for ops to be able to define
> the ids when they want and not always have to (other code will
> "setData" one of the paths defined above, leaving out since thats not
> having issues).
>
> I created several test cases and saw that this was working, but
> created another test and got a unexpected exception (I put the
> exception at the bottom)
>
> Here is the test:
>
> create 4 PERSISTENT znodes with ids 1, 2, 3, 4
> create 1 PERSISTENT_SEQUENTIAL znode (expecting id = 0)
>
> Here is the error I saw
>
> INFO 2015-07-01 10:46:46,349 [ProcessThread(sid:0 cport:-1):]
> [PrepRequestProcessor] [line 627] Got user-level KeeperException when
> processing sessionid:0x14e4aba4d490000 type:create cxid:0x25 zxid:0xe
> txntype:-1 reqpath:n/a Error
> Path:/test/MembershipTest/replaceFourRegisterOne/member-0000000004
> Error:KeeperErrorCode = NodeExists for
> /test/MembershipTest/replaceFourRegisterOne/member-0000000004
>
> org.apache.zookeeper.KeeperException$NodeExistsException:
> KeeperErrorCode = NodeExists for
> /test/MembershipTest/replaceFourRegisterOne/member-
> ...
> Caused by: org.apache.zookeeper.KeeperException$NodeExistsException:
> KeeperErrorCode = NodeExists for
> /test/MembershipTest/replaceFourRegisterOne/member-
> at org.apache.zookeeper.KeeperException.create(KeeperException.java:119)
> at org.apache.zookeeper.KeeperException.create(KeeperException.java:51)
> at org.apache.zookeeper.ZooKeeper.create(ZooKeeper.java:783)
> at
> org.apache.curator.framework.imps.CreateBuilderImpl$11.call(CreateBuilderImpl.java:688)
> at
> org.apache.curator.framework.imps.CreateBuilderImpl$11.call(CreateBuilderImpl.java:672)
> at org.apache.curator.RetryLoop.callWithRetry(RetryLoop.java:107)
> at
> org.apache.curator.framework.imps.CreateBuilderImpl.pathInForeground(CreateBuilderImpl.java:668)
> at
> org.apache.curator.framework.imps.CreateBuilderImpl.protectedPathInForeground(CreateBuilderImpl.java:453)
> at
> org.apache.curator.framework.imps.CreateBuilderImpl.forPath(CreateBuilderImpl.java:443)
> at
> org.apache.curator.framework.imps.CreateBuilderImpl.forPath(CreateBuilderImpl.java:44)
>
> Why is the sequential mode failing (and why does the log say its
> trying with 4, but error doesn't include id)?
>
>
> Versions:
> Curator: 2.6.1
> Zookeeper: 3.4.5
>
> Thanks for your time reading this email.
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message