Sean-Michael Lewis created CURATOR-50:
-----------------------------------------

             Summary: CreateBuilderImpl fails on forPath if connectString 
features a chroot that does not already exist.
                 Key: CURATOR-50
                 URL: https://issues.apache.org/jira/browse/CURATOR-50
             Project: Apache Curator
          Issue Type: Bug
          Components: Framework
    Affects Versions: 2.1.0-incubating
            Reporter: Sean-Michael Lewis
            Priority: Minor


When a CuratorFramework is initialized with a connectString featuring a chroot 
that does not already exist in the ensemble, CreateBuilderImpl will fail to 
create new nodes even if createParentsIfNeeded is true.

For example, the following code will result in a 
org.apache.zookeeper.KeeperException$NoNodeException.

{code}
CuratorFramework client = 
CuratorFramework.builder().retryPolicy(myPolicy).connectString("myServer1:2181,myServer2:2181/chroot).build();
client.create().createParentsIfNeeded().forPath("test");
{code}

This can be worked around by using a namespace in lieu of the chroot or by 
calling {code}client.create().forPath("/"){code} before attempting to create 
any other nodes. 

While using namespaces is likely the best practice, the framework does 
initialize with the chroot connectString. There are also reasons why one might 
want to use both chroot connectStrings as well as namespaces (application 
environments for the former, application for the latter).

My proposed fix is to alter {code}ZkPaths.mkdirs{code} to not skip "/" when it 
walks the tree. In cases where no chroot configured or a chroot that already 
exists, the node will be found and skipped. Otherwise, it will be created.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to