Github user maoling commented on a diff in the pull request:

    https://github.com/apache/zookeeper/pull/530#discussion_r194383541
  
    --- Diff: src/java/main/org/apache/zookeeper/ZooKeeper.java ---
    @@ -1218,6 +1294,79 @@ public ZooKeeper(String connectString, int 
sessionTimeout, Watcher watcher,
                     canBeReadOnly, createDefaultHostProvider(connectString));
         }
     
    +    /**
    +     * To create a ZooKeeper client object, the application needs to pass a
    +     * connection string containing a comma separated list of host:port 
pairs,
    +     * each corresponding to a ZooKeeper server.
    +     * <p>
    +     * Session establishment is asynchronous. This constructor will 
initiate
    +     * connection to the server and return immediately - potentially 
(usually)
    +     * before the session is fully established. The watcher argument 
specifies
    +     * the watcher that will be notified of any changes in state. This
    +     * notification can come at any point before or after the constructor 
call
    +     * has returned.
    +     * <p>
    +     * The instantiated ZooKeeper client object will pick an arbitrary 
server
    +     * from the connectString and attempt to connect to it. If 
establishment of
    +     * the connection fails, another server in the connect string will be 
tried
    +     * (the order is non-deterministic, as we random shuffle the list), 
until a
    +     * connection is established. The client will continue attempts until 
the
    +     * session is explicitly closed (or the session is expired by the 
server).
    +     * <p>
    +     * Added in 3.2.0: An optional "chroot" suffix may also be appended to 
the
    +     * connection string. This will run the client commands while 
interpreting
    +     * all paths relative to this root (similar to the unix chroot 
command).
    +     * <p>
    +     * Use {@link #getSessionId} and {@link #getSessionPasswd} on an 
established
    +     * client connection, these values must be passed as sessionId and
    +     * sessionPasswd respectively if reconnecting. Otherwise, if not
    +     * reconnecting, use the other constructor which does not require these
    +     * parameters.
    +     * <p>
    +     * This constructor uses a StaticHostProvider; there is another one  
    +     * to enable custom behaviour.
    +     *
    +     * @param connectString
    +     *            comma separated host:port pairs, each corresponding to a 
zk
    +     *            server. e.g. 
"127.0.0.1:3000,127.0.0.1:3001,127.0.0.1:3002"
    +     *            If the optional chroot suffix is used the example would 
look
    +     *            like: 
"127.0.0.1:3000,127.0.0.1:3001,127.0.0.1:3002/app/a"
    +     *            where the client would be rooted at "/app/a" and all 
paths
    +     *            would be relative to this root - ie 
getting/setting/etc...
    +     *            "/foo/bar" would result in operations being run on
    +     *            "/app/a/foo/bar" (from the server perspective).
    +     * @param sessionTimeout
    +     *            session timeout in milliseconds
    +     * @param watcher
    +     *            a watcher object which will be notified of state 
changes, may
    +     *            also be notified for node events
    +     * @param sessionId
    +     *            specific session id to use if reconnecting
    +     * @param sessionPasswd
    +     *            password for this session
    +     * @param canBeReadOnly
    +     *            (added in 3.4) whether the created client is allowed to 
go to
    +     *            read-only mode in case of partitioning. Read-only mode
    +     *            basically means that if the client can't find any 
majority
    +     *            servers but there's partitioned server it could reach, it
    +     *            connects to one in read-only mode, i.e. read requests are
    +     *            allowed while write requests are not. It continues 
seeking for
    +     *            majority in the background.
    +     * @param conf
    +     *            (added in 3.5.2) passing this conf object gives each 
client the flexibility of
    +     *            configuring properties differently compared to other 
instances
    +     * @throws IOException in cases of network failure
    +     * @throws IllegalArgumentException if an invalid chroot path is 
specified
    +     */
    +    public ZooKeeper(String connectString, int sessionTimeout, Watcher 
watcher,
    +                   long sessionId, byte[] sessionPasswd, boolean 
canBeReadOnly, ZKClientConfig conf)
    +                                   throws IOException {
    +           this(connectString, sessionTimeout, watcher, sessionId, 
sessionPasswd,
    +                           canBeReadOnly, 
createDefaultHostProvider(connectString));
    +    }
    +    
    +    
    +
         // default hostprovider
         private static HostProvider createDefaultHostProvider(String 
connectString) {
             return new StaticHostProvider(
    --- End diff --
    
    +l,LGTM
    need a Unit Test,some inspirations can be found at the 
[old-patch](https://issues.apache.org/jira/secure/attachment/12822755/ZOOKEEPER-2474-01.patch)
 which  may be better to add `newZKClient.close()  ` in the last line


---

Reply via email to