[
https://issues.apache.org/jira/browse/ZOOKEEPER-169?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15922893#comment-15922893
]
ASF GitHub Bot commented on ZOOKEEPER-169:
------------------------------------------
Github user afine commented on a diff in the pull request:
https://github.com/apache/zookeeper/pull/189#discussion_r105765768
--- 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 --
can we use a c compiler for consistency?
> Content needed: "Connecting to ZooKeeper"
> -----------------------------------------
>
> Key: ZOOKEEPER-169
> URL: https://issues.apache.org/jira/browse/ZOOKEEPER-169
> Project: ZooKeeper
> Issue Type: Sub-task
> Components: documentation
> Reporter: Robbie Scott
> Original Estimate: 4h
> Remaining Estimate: 4h
>
> We need the content which describes how to a client should connect to a
> zookeeper server. Ideally this would have pseudo code describing any lead-up
> (for example resource allocation, etc), a few lines of sample code in Java,
> and a few parallel lines in C.
> Any commentary would be highly appreciated. Stuff like, "You can open an
> unlimited number of ZooKeeper connections because..." or "Opening too many
> connections to ZooKeeper is not advisable because..." -- in short, anything
> that is not obvious to the new ZooKeeper developer.
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)