mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
Merge pull request #13551 from ahrtr/check_ipv6_for_gateway
format listenning address correctly for IPv6 ip address
This commit is contained in:
commit
36351744eb
@ -41,6 +41,7 @@ See [code changes](https://github.com/etcd-io/etcd/compare/v3.5.0...v3.6.0).
|
||||
- Fix [Lease checkpoints don't prevent to reset ttl on leader change](https://github.com/etcd-io/etcd/pull/13508).
|
||||
- Fix [assertion failed due to tx closed when recovering v3 backend from a snapshot db](https://github.com/etcd-io/etcd/pull/13500)
|
||||
- Fix [A client can panic etcd by passing invalid utf-8 in the client-api-version header](https://github.com/etcd-io/etcd/pull/13560)
|
||||
- Fix [etcd gateway doesn't format the endpoint of IPv6 address correctly](https://github.com/etcd-io/etcd/pull/13551)
|
||||
|
||||
### tools/benchmark
|
||||
|
||||
|
@ -19,6 +19,7 @@ import (
|
||||
"io"
|
||||
"math/rand"
|
||||
"net"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
@ -69,13 +70,29 @@ type TCPProxy struct {
|
||||
pickCount int // for round robin
|
||||
}
|
||||
|
||||
// The parameter host is returned by net.SplitHostPort previously,
|
||||
// so it must be a valid host. This function is only to check whether
|
||||
// it's an IPv6 IP address.
|
||||
func isIPv6(host string) bool {
|
||||
return strings.IndexRune(host, ':') != -1
|
||||
}
|
||||
|
||||
// A literal IPv6 address in hostport must be enclosed in square
|
||||
// brackets, as in "[::1]:80", "[::1%lo0]:80".
|
||||
func formatAddr(host string, port uint16) string {
|
||||
if isIPv6(host) {
|
||||
return fmt.Sprintf("[%s]:%d", host, port)
|
||||
}
|
||||
return fmt.Sprintf("%s:%d", host, port)
|
||||
}
|
||||
|
||||
func (tp *TCPProxy) Run() error {
|
||||
tp.donec = make(chan struct{})
|
||||
if tp.MonitorInterval == 0 {
|
||||
tp.MonitorInterval = 5 * time.Minute
|
||||
}
|
||||
for _, srv := range tp.Endpoints {
|
||||
addr := fmt.Sprintf("%s:%d", srv.Target, srv.Port)
|
||||
addr := formatAddr(srv.Target, srv.Port)
|
||||
tp.remotes = append(tp.remotes, &remote{srv: srv, addr: addr})
|
||||
}
|
||||
|
||||
|
@ -129,3 +129,34 @@ func TestUserspaceProxyPriority(t *testing.T) {
|
||||
t.Errorf("got = %s, want %s", got, want)
|
||||
}
|
||||
}
|
||||
|
||||
func TestFormatAddr(t *testing.T) {
|
||||
addrs := []struct {
|
||||
host string
|
||||
port uint16
|
||||
expectedAddr string
|
||||
}{
|
||||
{
|
||||
"192.168.1.10",
|
||||
2379,
|
||||
"192.168.1.10:2379",
|
||||
},
|
||||
{
|
||||
"::1",
|
||||
2379,
|
||||
"[::1]:2379",
|
||||
},
|
||||
{
|
||||
"2001:db8::ff00:42:8329",
|
||||
80,
|
||||
"[2001:db8::ff00:42:8329]:80",
|
||||
},
|
||||
}
|
||||
|
||||
for _, addr := range addrs {
|
||||
actualAddr := formatAddr(addr.host, addr.port)
|
||||
if actualAddr != addr.expectedAddr {
|
||||
t.Errorf("actualAddr: %s, expectedAddr: %s", actualAddr, addr.expectedAddr)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user