Author: mahadev
Date: Mon Jul 25 17:45:00 2011
New Revision: 1150802
URL: http://svn.apache.org/viewvc?rev=1150802&view=rev
Log:
ZOOKEEPER-1027. chroot not transparent in zoo_create() (Thijs Terlouw via
mahadev)
Modified:
zookeeper/trunk/CHANGES.txt
zookeeper/trunk/src/c/src/zookeeper.c
zookeeper/trunk/src/c/tests/TestClient.cc
Modified: zookeeper/trunk/CHANGES.txt
URL:
http://svn.apache.org/viewvc/zookeeper/trunk/CHANGES.txt?rev=1150802&r1=1150801&r2=1150802&view=diff
==============================================================================
--- zookeeper/trunk/CHANGES.txt (original)
+++ zookeeper/trunk/CHANGES.txt Mon Jul 25 17:45:00 2011
@@ -253,6 +253,9 @@ BUGFIXES:
ZOOKEEPER-1111. JMXEnv uses System.err instead of logging
(Ivan Kelly via phunt)
+
+ ZOOKEEPER-1027. chroot not transparent in zoo_create() (Thijs Terlouw via
+ mahadev)
IMPROVEMENTS:
ZOOKEEPER-724. Improve junit test integration - log harness information
Modified: zookeeper/trunk/src/c/src/zookeeper.c
URL:
http://svn.apache.org/viewvc/zookeeper/trunk/src/c/src/zookeeper.c?rev=1150802&r1=1150801&r2=1150802&view=diff
==============================================================================
--- zookeeper/trunk/src/c/src/zookeeper.c (original)
+++ zookeeper/trunk/src/c/src/zookeeper.c Mon Jul 25 17:45:00 2011
@@ -877,10 +877,11 @@ char* sub_string(zhandle_t *zh, const ch
char *ret_str;
if (zh->chroot == NULL)
return (char *) server_path;
- if (strncmp(server_path, zh->chroot, strlen(zh->chroot) != 0)) {
+ //ZOOKEEPER-1027
+ if (strncmp(server_path, zh->chroot, strlen(zh->chroot)) != 0) {
LOG_ERROR(("server path %s does not include chroot path %s",
server_path, zh->chroot));
- return NULL;
+ return (char *) server_path;
}
if (strlen(server_path) == strlen(zh->chroot)) {
//return "/"
@@ -1827,7 +1828,8 @@ completion_list_t *dequeue_completion(co
static void process_sync_completion(
completion_list_t *cptr,
struct sync_completion *sc,
- struct iarchive *ia)
+ struct iarchive *ia,
+ zhandle_t *zh)
{
LOG_DEBUG(("Processing sync_completion with type=%d xid=%#x rc=%d",
cptr->c.type, cptr->xid, sc->rc));
@@ -1887,14 +1889,16 @@ static void process_sync_completion(
struct CreateResponse res;
int len;
deserialize_CreateResponse(ia, "reply", &res);
- len = strlen(res.path) + 1;
- if (len > sc->u.str.str_len) {
+ //ZOOKEEPER-1027
+ const char * client_path = sub_string(zh, res.path);
+ len = strlen(client_path) + 1;if (len > sc->u.str.str_len) {
len = sc->u.str.str_len;
}
if (len > 0) {
- memcpy(sc->u.str.str, res.path, len - 1);
+ memcpy(sc->u.str.str, client_path, len - 1);
sc->u.str.str[len - 1] = '\0';
}
+ free_duplicate_path(client_path, res.path);
deallocate_CreateResponse(&res);
}
break;
@@ -2236,7 +2240,7 @@ int zookeeper_process(zhandle_t *zh, int
*sc = (struct sync_completion*)cptr->data;
sc->rc = rc;
- process_sync_completion(cptr, sc, ia);
+ process_sync_completion(cptr, sc, ia, zh);
notify_sync_completion(sc);
free_buffer(bptr);
Modified: zookeeper/trunk/src/c/tests/TestClient.cc
URL:
http://svn.apache.org/viewvc/zookeeper/trunk/src/c/tests/TestClient.cc?rev=1150802&r1=1150801&r2=1150802&view=diff
==============================================================================
--- zookeeper/trunk/src/c/tests/TestClient.cc (original)
+++ zookeeper/trunk/src/c/tests/TestClient.cc Mon Jul 25 17:45:00 2011
@@ -850,6 +850,14 @@ public:
create_completion_fn, 0);
waitForCreateCompletion(3);
CPPUNIT_ASSERT(count == 0);
+
+ //ZOOKEEPER-1027 correctly return path_buffer without prefixed chroot
+ const char* path = "/zookeeper1027";
+ char path_buffer[1024];
+ int path_buffer_len=sizeof(path_buffer);
+ rc = zoo_create(zk_ch, path, "", 0, &ZOO_OPEN_ACL_UNSAFE, 0,
path_buffer, path_buffer_len);
+ CPPUNIT_ASSERT_EQUAL((int) ZOK, rc);
+ CPPUNIT_ASSERT_EQUAL(string(path), string(path_buffer));
}
void testAsyncWatcherAutoReset()