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
---