Merge pull request #40 from msolo/fix-zk-ipv6

libzookeeper_mt prior to 3.4.x doesn't handle IPv6, so prune the resolve...
This commit is contained in:
Alain Jobart 2014-04-17 09:20:05 -07:00
Родитель 11430a74c0 f5bea5bb48
Коммит c4d1cdf7ea
2 изменённых файлов: 18 добавлений и 1 удалений

Просмотреть файл

@ -138,3 +138,19 @@ func ResolveIpAddr(addr string) (string, error) {
}
return net.JoinHostPort(ipAddrs[0], port), nil
}
// ResolveIpAddr resolves the address:port part into an IP address:port pair
func ResolveIPv4Addr(addr string) (string, error) {
host, port, err := net.SplitHostPort(addr)
if err != nil {
return "", err
}
ipAddrs, err := net.LookupIP(host)
for _, ipAddr := range ipAddrs {
ipv4 := ipAddr.To4()
if ipv4 != nil {
return net.JoinHostPort(ipv4.String(), port), nil
}
}
return "", fmt.Errorf("no IPv4addr for name %v", host)
}

Просмотреть файл

@ -150,7 +150,8 @@ func resolveZkAddr(zkAddr string) (string, error) {
parts := strings.Split(zkAddr, ",")
resolved := make([]string, 0, len(parts))
for _, part := range parts {
if r, err := netutil.ResolveIpAddr(part); err != nil {
// The zookeeper client cannot handle IPv6 addresses before version 3.4.x.
if r, err := netutil.ResolveIPv4Addr(part); err != nil {
log.Infof("cannot resolve %v, will not use it: %v", part, err)
} else {
resolved = append(resolved, r)