c client exists() call with watch on large number of nodes (>100k) causes 
connection loss

                 Key: ZOOKEEPER-528
                 URL: https://issues.apache.org/jira/browse/ZOOKEEPER-528
             Project: Zookeeper
          Issue Type: Bug
          Components: c client
    Affects Versions: 3.2.0
            Reporter: Patrick Hunt
            Assignee: Benjamin Reed
            Priority: Critical
             Fix For: 3.3.0

If I create 100k nodes on /misc then

      CPPUNIT_ASSERT_EQUAL(0, zoo_get_children(zh2, "/misc", 0, &children));
      for (int i = 0; i < children.count; i++) {
        sprintf(path, "/misc/%s", children.data[i]);
        CPPUNIT_ASSERT_EQUAL(0, zoo_exists(zh2, path, 1, &stat));
        CPPUNIT_ASSERT_EQUAL(0, zoo_wexists(zh3, path, watcher, &ctx3, &stat));

around 47k or so through the loop the client fails with -4 (connection loss), 
the client timeout is 30 seconds. The server command port shows the following, 
so it looks like it's not the server but some issue with watcher reg on the c 

ph...@valhalla:~$ echo stat | nc localhost 22181
Zookeeper version: 3.3.0--1, built on 07/22/2009 23:55 GMT

Latency min/avg/max: 0/196/1026
Received: 194257
Sent: 1
Outstanding: 0
Zxid: 0x186a4
Mode: standalone
Node count: 100005

729 is a separate client - the one that created the nodes originally.

731 and 730 are zh2/zh3 in the code.

This message is automatically generated by JIRA.
You can reply to this email to add a comment to the issue online.

Reply via email to