David Capwell created ZOOKEEPER-2226:
----------------------------------------

             Summary: Mixing sequential and non-sequential can throw NodeExists 
for sequential nodes
                 Key: ZOOKEEPER-2226
                 URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2226
             Project: ZooKeeper
          Issue Type: Bug
    Affects Versions: 3.4.5
            Reporter: David Capwell


I have the following code (in curator):

{code}
int id = 
extractId(client.create().creatingParentsIfNeeded().withMode(CreateMode.PERSISTENT_SEQUENTIAL).forPath(prefix,
data));
{code}

and

{code}
client.create().creatingParentsIfNeeded().withMode(CreateMode.PERSISTENT).forPath(path(id),
data);
{code}

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 a test case and the error thrown was not what I was expecing: Node 
Exists

Here is the test:

create 4 PERSISTENT znodes with ids 1, 2, 3, 4
create 1 PERSISTENT_SEQUENTIAL znode (change id = 4, so conflicts with above)

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)


When using sequential nodes, its unexpected that they can fail because a node 
already exists.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to