[ https://issues.apache.org/jira/browse/ZOOKEEPER-1027?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13011077#comment-13011077 ]
Thijs Terlouw commented on ZOOKEEPER-1027: ------------------------------------------ Two problems afaik: *(1)* I noticed a sub_string(zh, server_path) function that contains a bug at line 840 in zookeeper.c: {quote} if (strncmp(server_path, zh->chroot, strlen(zh->chroot) != 0)) { {quote} notice that "!= 0" appears inside the 3rd argument to the strncmp() function! So it executes {quote} if(strncmp(server_path, zh->chroot, 1)) { {quote} which will always fail if the first character is the same. The next if() also fails (server_path length is not equal to chroot usually). This if() has the potential to cause wrong results btw. Then finally it returns the string with the chroot stripped off. So it will strip off the chroot, but for the wrong reason. *(2)* the sub_string() function is only called for do_foreach_watcher() function (zk_hashtable.c line 273). It doesn't seem to be called in the zoo_create/zoo_acreate/add_string_completion path. This is the bug that influences this bug report. > chroot not transparent in zoo_create() > -------------------------------------- > > Key: ZOOKEEPER-1027 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-1027 > Project: ZooKeeper > Issue Type: Bug > Components: c client > Affects Versions: 3.3.3 > Environment: Linux, ZooKeeper 3.3.3, C-client, java 1.6.0_17-b04, > hotspot server vm > Reporter: Thijs Terlouw > > I've recently started to use the chroot functionality (introduced in > 3.2.0) as part of my connect string.It mostly works as expected, but > there is one case that is unexpected: when I create a path with > zoo_create() I can retrieve the created path. This is very useful when > you set the ZOO_SEQUENCE flag. Unfortunately the returned path > includes the chroot as part of the path. This was unexpected to me: I > expected that the chroot would be totally transparent. The > documentation for zoo_create() says: > "path_buffer : Buffer which will be filled with the path of the new > node (this might be different than the supplied path because of the > ZOO_SEQUENCE flag)." > This gave me the impression that this flag is the only reason the > returned path is different from the created path, but apparently it's > not. Is this a bug or intended behavior? > I workaround this issue now by remembering the chroot in > my wrapper code and after a call to zoo_create() i check if the returned > path starts with the chroot. If it does, I remove it. > My use case is to create a path with a sequence number and then delete > this path later. Unfortunately I cannot delete the path because it has > the chroot prepended to it, and thus it will result in two chroots. > I believe this only affects the create functions. -- This message is automatically generated by JIRA. For more information on JIRA, see: http://www.atlassian.com/software/jira