func (c *Client) watchLeader() { var ( conn zkhelper.Conn err error ) for { conn, err = zkhelper.ConnectToZkWithTimeout(c.conf.ZKAddr, time.Second) if err != nil { log.Errorf("connect zk err %v, retry later", err) time.Sleep(3 * time.Second) continue } break } defer conn.Close() var lastAddr string for { addr, watcher, err := util.GetWatchLeader(conn, c.conf.RootPath) if err != nil { log.Errorf("get tso leader err %v, retry later", err) time.Sleep(3 * time.Second) continue } if lastAddr != addr { log.Warnf("leader change %s -> %s", lastAddr, addr) lastAddr = addr c.leaderCh <- addr } // watch the leader changes. <-watcher } }