At Wed, 23 Jul 2014 15:50:39 +0800,
Ruoyu wrote:
> 
> 
> On 2014年07月23日 12:19, Hitoshi Mitake wrote:
> > At Wed, 23 Jul 2014 12:02:10 +0800,
> > Ruoyu wrote:
> >> zookeeper session establishment is asynchronous. It means that
> >> we cannot judge the session is connected by checking the
> >> return value of the func zookeeper_init. Instead, we should
> >> check the zookeeper handler's state in a loop to ensure
> >> the session is connected.
> >>
> >> Signed-off-by: Ruoyu <lian...@ucweb.com>
> >> ---
> >>   sheep/cluster/zookeeper.c | 16 ++++++++++++++--
> >>   1 file changed, 14 insertions(+), 2 deletions(-)
> > Applied, thanks.
> >
> > It would be nice if the value of interval can be specified by user.
> Maybe keep it simple is better. If I am the user, I don't care how many 
> times sheep tries to connect zookeeper cluster. I just care whether the 
> session is connected or not during expiry.

OK, I understand.

Thanks,
Hitoshi

> >
> > Thanks,
> > Hitoshi
> >
> >> diff --git a/sheep/cluster/zookeeper.c b/sheep/cluster/zookeeper.c
> >> index 64613ca..96acce6 100644
> >> --- a/sheep/cluster/zookeeper.c
> >> +++ b/sheep/cluster/zookeeper.c
> >> @@ -1351,7 +1351,7 @@ static void zk_unlock(uint64_t lock_id)
> >>   static int zk_init(const char *option)
> >>   {
> >>    char *hosts, *to, *p;
> >> -  int ret;
> >> +  int ret, interval, retry = 0, max_retry;
> >>   
> >>    if (!option) {
> >>            sd_err("You must specify zookeeper servers.");
> >> @@ -1371,10 +1371,22 @@ static int zk_init(const char *option)
> >>             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 connect to zk server %s", option);
> >> +          sd_err("failed to initialize zk server %s", option);
> >>            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;
> >> +          }
> >> +  }
> >> +
> >>    uatomic_set_false(&stop);
> >>    uatomic_set_false(&is_master);
> >>    if (zk_queue_init() != ZOK)
> >> -- 
> >> 1.8.3.2
> >>
> >>
> >> -- 
> >> sheepdog mailing list
> >> sheepdog@lists.wpkg.org
> >> http://lists.wpkg.org/mailman/listinfo/sheepdog
> 
> 
> -- 
> sheepdog mailing list
> sheepdog@lists.wpkg.org
> http://lists.wpkg.org/mailman/listinfo/sheepdog
-- 
sheepdog mailing list
sheepdog@lists.wpkg.org
http://lists.wpkg.org/mailman/listinfo/sheepdog

Reply via email to