mirror of https://github.com/status-im/consul.git
Updates memberlist to pick up https://github.com/hashicorp/memberlist/pull/69.
Fixes #3671
This commit is contained in:
parent
a373c7357a
commit
e738bd584c
|
@ -308,23 +308,17 @@ func (m *Memberlist) tcpLookupIP(host string, defaultPort uint16) ([]ipPort, err
|
||||||
// resolveAddr is used to resolve the address into an address,
|
// resolveAddr is used to resolve the address into an address,
|
||||||
// port, and error. If no port is given, use the default
|
// port, and error. If no port is given, use the default
|
||||||
func (m *Memberlist) resolveAddr(hostStr string) ([]ipPort, error) {
|
func (m *Memberlist) resolveAddr(hostStr string) ([]ipPort, error) {
|
||||||
// Normalize the incoming string to host:port so we can apply Go's
|
// This captures the supplied port, or the default one.
|
||||||
// parser to it.
|
hostStr = ensurePort(hostStr, m.config.BindPort)
|
||||||
port := uint16(0)
|
|
||||||
if !hasPort(hostStr) {
|
|
||||||
hostStr += ":" + strconv.Itoa(m.config.BindPort)
|
|
||||||
}
|
|
||||||
host, sport, err := net.SplitHostPort(hostStr)
|
host, sport, err := net.SplitHostPort(hostStr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// This will capture the supplied port, or the default one added above.
|
|
||||||
lport, err := strconv.ParseUint(sport, 10, 16)
|
lport, err := strconv.ParseUint(sport, 10, 16)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
port = uint16(lport)
|
port := uint16(lport)
|
||||||
|
|
||||||
// If it looks like an IP address we are done. The SplitHostPort() above
|
// If it looks like an IP address we are done. The SplitHostPort() above
|
||||||
// will make sure the host part is in good shape for parsing, even for
|
// will make sure the host part is in good shape for parsing, even for
|
||||||
|
|
|
@ -117,7 +117,7 @@ func (s *suspicion) Confirm(from string) bool {
|
||||||
// stop the timer then we will call the timeout function directly from
|
// stop the timer then we will call the timeout function directly from
|
||||||
// here.
|
// here.
|
||||||
n := atomic.AddInt32(&s.n, 1)
|
n := atomic.AddInt32(&s.n, 1)
|
||||||
elapsed := time.Now().Sub(s.start)
|
elapsed := time.Since(s.start)
|
||||||
remaining := remainingSuspicionTime(n, s.k, elapsed, s.min, s.max)
|
remaining := remainingSuspicionTime(n, s.k, elapsed, s.min, s.max)
|
||||||
if s.timer.Stop() {
|
if s.timer.Stop() {
|
||||||
if remaining > 0 {
|
if remaining > 0 {
|
||||||
|
|
|
@ -217,20 +217,6 @@ func decodeCompoundMessage(buf []byte) (trunc int, parts [][]byte, err error) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// Given a string of the form "host", "host:port",
|
|
||||||
// "ipv6::addr" or "[ipv6::address]:port",
|
|
||||||
// return true if the string includes a port.
|
|
||||||
func hasPort(s string) bool {
|
|
||||||
last := strings.LastIndex(s, ":")
|
|
||||||
if last == -1 {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
if s[0] == '[' {
|
|
||||||
return s[last-1] == ']'
|
|
||||||
}
|
|
||||||
return strings.Index(s, ":") == last
|
|
||||||
}
|
|
||||||
|
|
||||||
// compressPayload takes an opaque input buffer, compresses it
|
// compressPayload takes an opaque input buffer, compresses it
|
||||||
// and wraps it in a compress{} message that is encoded.
|
// and wraps it in a compress{} message that is encoded.
|
||||||
func compressPayload(inp []byte) (*bytes.Buffer, error) {
|
func compressPayload(inp []byte) (*bytes.Buffer, error) {
|
||||||
|
@ -294,3 +280,31 @@ func decompressBuffer(c *compress) ([]byte, error) {
|
||||||
func joinHostPort(host string, port uint16) string {
|
func joinHostPort(host string, port uint16) string {
|
||||||
return net.JoinHostPort(host, strconv.Itoa(int(port)))
|
return net.JoinHostPort(host, strconv.Itoa(int(port)))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// hasPort is given a string of the form "host", "host:port", "ipv6::address",
|
||||||
|
// or "[ipv6::address]:port", and returns true if the string includes a port.
|
||||||
|
func hasPort(s string) bool {
|
||||||
|
// IPv6 address in brackets.
|
||||||
|
if strings.LastIndex(s, "[") == 0 {
|
||||||
|
return strings.LastIndex(s, ":") > strings.LastIndex(s, "]")
|
||||||
|
}
|
||||||
|
|
||||||
|
// Otherwise the presence of a single colon determines if there's a port
|
||||||
|
// since IPv6 addresses outside of brackets (count > 1) can't have a
|
||||||
|
// port.
|
||||||
|
return strings.Count(s, ":") == 1
|
||||||
|
}
|
||||||
|
|
||||||
|
// ensurePort makes sure the given string has a port number on it, otherwise it
|
||||||
|
// appends the given port as a default.
|
||||||
|
func ensurePort(s string, port int) string {
|
||||||
|
if hasPort(s) {
|
||||||
|
return s
|
||||||
|
}
|
||||||
|
|
||||||
|
// If this is an IPv6 address, the join call will add another set of
|
||||||
|
// brackets, so we have to trim before we add the default port.
|
||||||
|
s = strings.Trim(s, "[]")
|
||||||
|
s = net.JoinHostPort(s, strconv.Itoa(port))
|
||||||
|
return s
|
||||||
|
}
|
||||||
|
|
|
@ -59,7 +59,7 @@
|
||||||
{"path":"github.com/hashicorp/hil","checksumSHA1":"kqCMCHy2b+RBMKC+ER+OPqp8C3E=","revision":"1e86c6b523c55d1fa6c6e930ce80b548664c95c2","revisionTime":"2016-07-11T23:18:37Z"},
|
{"path":"github.com/hashicorp/hil","checksumSHA1":"kqCMCHy2b+RBMKC+ER+OPqp8C3E=","revision":"1e86c6b523c55d1fa6c6e930ce80b548664c95c2","revisionTime":"2016-07-11T23:18:37Z"},
|
||||||
{"path":"github.com/hashicorp/hil/ast","checksumSHA1":"UICubs001+Q4MsUf9zl2vcMzWQQ=","revision":"1e86c6b523c55d1fa6c6e930ce80b548664c95c2","revisionTime":"2016-07-11T23:18:37Z"},
|
{"path":"github.com/hashicorp/hil/ast","checksumSHA1":"UICubs001+Q4MsUf9zl2vcMzWQQ=","revision":"1e86c6b523c55d1fa6c6e930ce80b548664c95c2","revisionTime":"2016-07-11T23:18:37Z"},
|
||||||
{"path":"github.com/hashicorp/logutils","checksumSHA1":"vt+P9D2yWDO3gdvdgCzwqunlhxU=","revision":"0dc08b1671f34c4250ce212759ebd880f743d883","revisionTime":"2015-06-09T07:04:31Z"},
|
{"path":"github.com/hashicorp/logutils","checksumSHA1":"vt+P9D2yWDO3gdvdgCzwqunlhxU=","revision":"0dc08b1671f34c4250ce212759ebd880f743d883","revisionTime":"2015-06-09T07:04:31Z"},
|
||||||
{"path":"github.com/hashicorp/memberlist","checksumSHA1":"vwj2yOi577Mmn+IfJwV8YXYeALk=","revision":"687988a0b5daaf7ed5051e5e374aef27f8254822","revisionTime":"2017-09-19T17:31:51Z"},
|
{"path":"github.com/hashicorp/memberlist","checksumSHA1":"W1MrXPyP9I630SENN7b9Vn/K5r0=","revision":"caa5d20d6a642b7543b3745e54031a96008bee57","revisionTime":"2017-11-10T01:18:39Z"},
|
||||||
{"path":"github.com/hashicorp/net-rpc-msgpackrpc","checksumSHA1":"qnlqWJYV81ENr61SZk9c65R1mDo=","revision":"a14192a58a694c123d8fe5481d4a4727d6ae82f3","revisionTime":"2015-11-16T02:03:38Z"},
|
{"path":"github.com/hashicorp/net-rpc-msgpackrpc","checksumSHA1":"qnlqWJYV81ENr61SZk9c65R1mDo=","revision":"a14192a58a694c123d8fe5481d4a4727d6ae82f3","revisionTime":"2015-11-16T02:03:38Z"},
|
||||||
{"path":"github.com/hashicorp/raft","checksumSHA1":"JjJtGJi1ywWhVhs/PvTXxe4TeD8=","revision":"6d14f0c70869faabd9e60ba7ed88a6cbbd6a661f","revisionTime":"2017-10-03T22:09:13Z","version":"v1.0.0","versionExact":"v1.0.0"},
|
{"path":"github.com/hashicorp/raft","checksumSHA1":"JjJtGJi1ywWhVhs/PvTXxe4TeD8=","revision":"6d14f0c70869faabd9e60ba7ed88a6cbbd6a661f","revisionTime":"2017-10-03T22:09:13Z","version":"v1.0.0","versionExact":"v1.0.0"},
|
||||||
{"path":"github.com/hashicorp/raft-boltdb","checksumSHA1":"QAxukkv54/iIvLfsUP6IK4R0m/A=","revision":"d1e82c1ec3f15ee991f7cc7ffd5b67ff6f5bbaee","revisionTime":"2015-02-01T20:08:39Z"},
|
{"path":"github.com/hashicorp/raft-boltdb","checksumSHA1":"QAxukkv54/iIvLfsUP6IK4R0m/A=","revision":"d1e82c1ec3f15ee991f7cc7ffd5b67ff6f5bbaee","revisionTime":"2015-02-01T20:08:39Z"},
|
||||||
|
|
Loading…
Reference in New Issue