[
https://issues.apache.org/jira/browse/CURATOR-357?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Kezhu Wang closed CURATOR-357.
------------------------------
Resolution: Won't Fix
> creatingParentsIfNeeded do not create "/"
> -----------------------------------------
>
> Key: CURATOR-357
> URL: https://issues.apache.org/jira/browse/CURATOR-357
> Project: Apache Curator
> Issue Type: New Feature
> Components: Framework
> Reporter: Vitalii Tymchyshyn
> Priority: Major
>
> In Zookeeper there is no guaranty that "/" would exist. In a case when chroot
> feature is used, "/" path may not exists.
> Currently Curator incorrectly assumes that "/" always exists. It leads to
> NoNodeException when there is no "/" available.
> E.g. see CURATOR-280 for example.
> A solution would be to create "/" in ZKPaths#mkdirs.
> Primary concern is that it would slow down general case when entity name do
> not have path separator. Currently it does not require any additional calls,
> now "/" check would be needed.
> A solution can be to change logic to create parents only if NoNode received
> for node creation call. This would also speed up all the cases where entity
> name has separator, including when namespaces are used.
> Test:
> {code}
> public class TestChroot {
> private TestingServer server = new TestingServer();
> public TestChroot() throws Exception {
> }
> @Test
> public void testCurator() throws Exception {
> CuratorFramework client =
> CuratorFrameworkFactory.newClient(server.getConnectString() +
> "/chrootCurator", new RetryOneTime(1000));
> client.start();
> client.create().creatingParentsIfNeeded().forPath("/test", new
> byte[]{1});
> Assert.assertEquals(1, client.getData().forPath("/test")[0]);
> }
> @Test
> public void testZookeeper() throws Exception {
> CuratorFramework client =
> CuratorFrameworkFactory.newClient(server.getConnectString() + "/chrootZoo",
> new RetryOneTime(1000));
> client.start();
> ZooKeeper zooKeeper = client.getZookeeperClient().getZooKeeper();
> zooKeeper.create("/", new byte[]{}, ZooDefs.Ids.OPEN_ACL_UNSAFE,
> CreateMode.PERSISTENT);
> zooKeeper.create("/test", new byte[]{1}, ZooDefs.Ids.OPEN_ACL_UNSAFE,
> CreateMode.PERSISTENT);
> Assert.assertEquals(1, client.getData().forPath("/test")[0]);
> }
> }
> {code}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)