Github user afine commented on a diff in the pull request: https://github.com/apache/zookeeper/pull/189#discussion_r106760299 --- Diff: src/docs/src/documentation/content/xdocs/zookeeperProgrammers.xml --- @@ -1714,7 +1714,115 @@ public abstract class ServerAuthenticationProvider implements AuthenticationProv <section id="sc_connectingToZk"> <title>Connecting to ZooKeeper</title> - <para></para> + <para>Before we begin, you will have to set up a running Zookeeper server so that we can start developing the client. For C client bindings, we will be using the multithreaded library(zookeeper_mt) with a simple example written in C. To establish a connection with Zookeeper server, we make use of C API - <emphasis>zookeeper_init</emphasis> with the following signature:</para> + + <programlisting><emphasis>int</emphasis> <emphasis>zookeeper_init</emphasis>(<emphasis>const</emphasis> <emphasis>char</emphasis> *host, watcher_fn fn, <emphasis>int</emphasis> recv_timeout, <emphasis>const</emphasis> clientid_t *clientid, <emphasis>void</emphasis> *context, <emphasis>int</emphasis> flags);</programlisting> + + <variablelist> + <varlistentry> + <term>*host</term> + <listitem> + <para>Connection string to zookeeper server in the format of host:port. If there are multiple servers, use comma as separator after specifying the host:port pairs. Eg: "127.0.0.1:2181,127.0.0.1:3001,127.0.0.1:3002"</para> + </listitem> + </varlistentry> + + <varlistentry> + <term>fn</term> + <listitem> + <para>Watcher function to process events when a notification is triggered.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term>recv_timeout</term> + <listitem> + <para>Session expiration time in milliseconds.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term>*clientid</term> + <listitem> + <para>We can specify 0 for a new session. If a session has already establish previously, we could provide that client ID and it would reconnect to that previous session.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term>*context</term> + <listitem> + <para>Context object that can be associated with the zkhandle_t handler. If it is not used, we can set it to 0.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term>flags</term> + <listitem> + <para>In an initiation, we can leave it for 0.</para> + </listitem> + </varlistentry> + </variablelist> + + <para>We will demonstrate client that outputs "Connected to Zookeeper" after successful connection or an error message otherwise. Let's call the following code <emphasis>zkClient.cc</emphasis> :</para> + <programlisting> +#include <stdio.h> +#include <zookeeper/zookeeper.h> +#include <errno.h> +using namespace std; + +// Keeping track of the connection state +static int connected = 0; +static int expired = 0; + +// *zkHandler handles the connection with Zookeeper +static zhandle_t *zkHandler; + +// watcher function would process events +void watcher(zhandle_t *zkH, int type, int state, const char *path, void *watcherCtx) +{ + if (type == ZOO_SESSION_EVENT) { + + // state refers to states of zookeeper connection. + // To keep it simple, we would demonstrate these 3: ZOO_EXPIRED_SESSION_STATE, ZOO_CONNECTED_STATE, ZOO_NOTCONNECTED_STATE + // If you are using ACL, you should be aware of an authentication failure state - ZOO_AUTH_FAILED_STATE + if (state == ZOO_CONNECTED_STATE) { + connected = 1; + } else if (state == ZOO_NOTCONNECTED_STATE ) { + connected = 0; + } else if (state == ZOO_EXPIRED_SESSION_STATE) { + expired = 1; + connected = 0; + zookeeper_close(zkH); + } + } +} + +int main(){ + zoo_set_debug_level(ZOO_LOG_LEVEL_DEBUG); + + // zookeeper_init returns the handler upon a successful connection, null otherwise + zkHandler = zookeeper_init("localhost:2181", watcher, 10000, 0, 0, 0); + + if (!zkHandler) { + return errno; + }else{ + printf("Connection established with Zookeeper. \n"); + } + + // Close Zookeeper connection + zookeeper_close(zkHandler); + + return 0; +} + </programlisting> + + <para>Compile the code with the multithreaded library mentioned before.</para> + <para><command>> g++ -Iinclude/ zkClient.cpp -lzookeeper_mt -o Client</command></para> --- End diff -- I would file a JIRA for that so we can make the best decision there.
--- If your project is set up for it, you can reply to this email and have your reply appear on GitHub as well. If your project does not have this feature enabled and wishes so, or if the feature is enabled but not working, please contact infrastructure at infrastruct...@apache.org or file a JIRA ticket with INFRA. ---