[sheepdog] [PATCH v5 6/6] zookeeper: handle session timeout for all zookeeper operations
MORITA Kazutaka
morita.kazutaka at lab.ntt.co.jp
Fri Jun 21 05:55:23 CEST 2013
At Thu, 20 Jun 2013 12:00:22 -0700,
Kai Zhang wrote:
>
> @@ -365,19 +397,12 @@ static void zk_queue_pop_advance(struct zk_event *ev)
> len = sizeof(*ev);
> snprintf(path, sizeof(path), QUEUE_ZNODE "/%010"PRId32, queue_pos);
> rc = zk_get_data(path, ev, &len);
> - if (rc != ZOK)
> - panic("failed to get data from %s, %s", path, zerror(rc));
> - sd_dprintf("%s, type:%d, len:%d, pos:%"PRId32, path, ev->type, len,
> - queue_pos);
> - queue_pos++;
> -}
> -
> -static int zk_member_empty(void)
> -{
> - struct String_vector strs;
> -
> - zk_get_children(MEMBER_ZNODE, &strs);
> - return (strs.count == 0);
> + if (rc == ZOK) {
> + sd_dprintf("%s, type:%d, len:%d, pos:%"PRId32, path, ev->type,
> + len, queue_pos);
> + queue_pos++;
> + } else
> + sd_eprintf("failed, path %s, %s", path, zerror(rc));
> }
With this change, this function can return without setting ev.
However, the caller zk_event_handler() access the zk_event
unconditionally.
> @@ -568,15 +611,17 @@ static void zk_get_least_seq(const char *parent, char *least_seq_path,
>
> if (rc == ZOK) {
> strncpy(least_seq_path, path, path_len);
> - break;
> + return ZOK;
> } else if (rc == ZNONODE)
> continue;
> - else
> - panic("failed, path:%s, %s", path, zerror(rc));
> + else {
> + sd_eprintf("failed, %s", zerror(rc));
> + return rc;
Same here. This function can return without setting least_seq_path,
but zk_find_master() doesn't check the return value of this function.
Thanks,
Kazutaka
More information about the sheepdog
mailing list