[ 
https://issues.apache.org/jira/browse/CURATOR-128?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14077691#comment-14077691
 ] 

John Vines commented on CURATOR-128:
------------------------------------

I think Scott's suggestion is the best, in that case. Formerly correct behavior 
is still correct. But now behavior which would previously fail will now pass. 
So unless users were depending on that error condition it should be fine.

> There is no namespace-safe way to refer to the root node
> --------------------------------------------------------
>
>                 Key: CURATOR-128
>                 URL: https://issues.apache.org/jira/browse/CURATOR-128
>             Project: Apache Curator
>          Issue Type: Bug
>          Components: Framework
>            Reporter: Scott Blum
>
> Add the following test to TestNamespaceFacade:
> {code}
>     @Test
>     public void     testRootAccess() throws Exception
>     {
>         CuratorFramework    client = 
> CuratorFrameworkFactory.newClient(server.getConnectString(), new 
> RetryOneTime(1));
>         try
>         {
>             client.start();
>             client.create().forPath("/one");
>             
> Assert.assertNotNull(client.getZookeeperClient().getZooKeeper().exists("/one",
>  false));
>             Assert.assertNotNull(client.checkExists().forPath("/"));
>             try
>             {
>                 client.checkExists().forPath("");
>                 Assert.fail("IllegalArgumentException expected");
>             }
>             catch ( IllegalArgumentException expected )
>             {
>             }
>             
> Assert.assertNotNull(client.usingNamespace("one").checkExists().forPath(""));
>             try
>             {
>                 client.usingNamespace("one").checkExists().forPath("/");
>                 Assert.fail("IllegalArgumentException expected");
>             }
>             catch ( IllegalArgumentException expected )
>             {
>             }
>         }
>         finally
>         {
>             CloseableUtils.closeQuietly(client);
>         }
>     }
> {code}
> This tests PASSES, which means that there's no canonical way to refer to the 
> root node.  If the client is not namespaced, "/" works and "" does not work.  
> If the client is namespaced, "" works and "/" does not.
> In either case, I think ZKPaths.makePath mishandles certain cases.
> If you append "/foo" and "/" the result is "/foo/" which is an invalid path.
> On the other hand, if you append "" and "bar" the result is "//bar" which is 
> also invalid.
> What's the right behavior here?  Does the root node / root of a namespace 
> always need to be referred to as "/" or is empty string an acceptable alias?



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to