[sheepdog] [PATCH] zookeeper: add zk_connect()
Ruoyu
liangry at ucweb.com
Mon Mar 2 12:35:50 CET 2015
Applied, thanks.
On 2015年03月02日 17:29, Liu Yuan wrote:
> From: Liu Yuan <liuyuan at cmss.chinamobile.com>
>
> This can reduce duplicated codes into a single function. Also add one comment
> for why we call zookeeper_init() twice.
>
> Signed-off-by: Liu Yuan <liuyuan at cmss.chinamobile.com>
> ---
> sheep/cluster/zookeeper.c | 63 ++++++++++++++++++++++-------------------------
> 1 file changed, 30 insertions(+), 33 deletions(-)
>
> diff --git a/sheep/cluster/zookeeper.c b/sheep/cluster/zookeeper.c
> index 9dace4f..4f85043 100644
> --- a/sheep/cluster/zookeeper.c
> +++ b/sheep/cluster/zookeeper.c
> @@ -1377,12 +1377,36 @@ static void zk_unlock(uint64_t lock_id)
> sd_debug("unlock %"PRIu64, lock_id);
> }
>
> +static int zk_connect(const char *host, watcher_fn watcher, int timeout)
> +{
> + int interval, max_retry, retry;
> +
> + zhandle = zookeeper_init(host, watcher, timeout, NULL, NULL, 0);
> +
> + if (!zhandle) {
> + sd_err("failed to initialize zk server %s", host);
> + return -1;
> + }
> +
> + interval = 100;
> + retry = 0;
> + max_retry = timeout / interval;
> + while (zoo_state(zhandle) != ZOO_CONNECTED_STATE) {
> + usleep(interval * 1000);
> + if (++retry >= max_retry) {
> + sd_err("failed to connect to zk server %s "
> + "after %d retries", host, retry);
> + return -1;
> + }
> + }
> + return 0;
> +}
> +
> static int zk_prepare_root(const char *hosts)
> {
> char root[MAX_NODE_STR_LEN];
> char conn[MAX_NODE_STR_LEN];
> const char *p = strchr(hosts, '/');
> - int interval, max_retry, retry;
> int i = 0;
> if (p) {
> if (strlen(p) >= MAX_NODE_STR_LEN) {
> @@ -1405,25 +1429,13 @@ static int zk_prepare_root(const char *hosts)
> strcpy(conn, hosts);
> }
>
> - zhandle = zookeeper_init(conn, zk_watcher, zk_timeout, NULL, NULL, 0);
> - if (!zhandle) {
> - sd_err("failed to initialize zk server %s", conn);
> + if (zk_connect(conn, zk_watcher, zk_timeout) < 0)
> return -1;
> - }
>
> - interval = 100;
> - retry = 0;
> - max_retry = zk_timeout / interval;
> - while (zoo_state(zhandle) != ZOO_CONNECTED_STATE) {
> - usleep(interval * 1000);
> - if (++retry >= max_retry) {
> - sd_err("failed to connect to zk server %s "
> - "after %d retries", conn, retry);
> - return -1;
> - }
> - }
> sd_debug("sheepdog cluster_id %s", root);
> RETURN_IF_ERROR(zk_init_node(root), "path %s", root);
> +
> + /* We need to close(zhandle) because we might chroot later */
> zookeeper_close(zhandle);
> return 0;
> }
> @@ -1431,7 +1443,7 @@ static int zk_prepare_root(const char *hosts)
> static int zk_init(const char *option)
> {
> char *hosts, *to, *p;
> - int ret, interval, retry = 0, max_retry, timeo;
> + int ret, timeo;
>
> if (!option) {
> sd_err("You must specify zookeeper servers.");
> @@ -1454,23 +1466,8 @@ static int zk_init(const char *option)
>
> sd_info("version %d.%d.%d, address %s, timeout %d", ZOO_MAJOR_VERSION,
> ZOO_MINOR_VERSION, ZOO_PATCH_VERSION, hosts, zk_timeout);
> - zhandle = zookeeper_init(hosts, zk_watcher, zk_timeout, NULL, NULL, 0);
> - if (!zhandle) {
> - sd_err("failed to initialize zk server %s", option);
> + if (zk_connect(hosts, zk_watcher, zk_timeout) < 0)
> return -1;
> - }
> -
> - /* the simplest way to wait and check zk connection */
> - interval = 100;
> - max_retry = zk_timeout / interval;
> - while (zoo_state(zhandle) != ZOO_CONNECTED_STATE) {
> - usleep(interval * 1000);
> - if (++retry >= max_retry) {
> - sd_err("failed to connect to zk server %s "
> - "after %d retries", option, retry);
> - return -1;
> - }
> - }
>
> timeo = zoo_recv_timeout(zhandle);
> sd_info("the negociated session timeout is %d", timeo);
More information about the sheepdog
mailing list