zookeeper-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From afine <...@git.apache.org>
Subject [GitHub] zookeeper pull request #189: ZOOKEEPER-169: Content needed: "Connecting to Z...
Date Fri, 17 Mar 2017 22:58:10 GMT
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 &lt;stdio.h>
    +#include &lt;zookeeper/zookeeper.h>
    +#include &lt;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>&gt; 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 infrastructure@apache.org or file a JIRA ticket
with INFRA.
---

Mime
View raw message