Skip to content

Commit 0d7771a

Browse files
authored
fix(ring): use net.JoinHostPort to support IPv6 addresses (#3903)
* fix(ring): use net.JoinHostPort to support IPv6 addresses
1 parent ae0067f commit 0d7771a

File tree

7 files changed

+44
-13
lines changed

7 files changed

+44
-13
lines changed

pkg/compactor/compactor_ring.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ package compactor
77

88
import (
99
"flag"
10-
"fmt"
10+
"net"
11+
"strconv"
1112
"time"
1213

1314
"github.com/go-kit/log"
@@ -64,7 +65,7 @@ func (cfg *RingConfig) ToBasicLifecyclerConfig(logger log.Logger) (ring.BasicLif
6465

6566
return ring.BasicLifecyclerConfig{
6667
ID: cfg.Common.InstanceID,
67-
Addr: fmt.Sprintf("%s:%d", instanceAddr, instancePort),
68+
Addr: net.JoinHostPort(instanceAddr, strconv.Itoa(instancePort)),
6869
HeartbeatPeriod: cfg.Common.HeartbeatPeriod,
6970
HeartbeatTimeout: cfg.Common.HeartbeatTimeout,
7071
TokensObservePeriod: cfg.ObservePeriod,

pkg/distributor/distributor_ring.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
package distributor
22

33
import (
4-
"fmt"
4+
"net"
5+
"strconv"
56

67
"github.com/go-kit/log"
78
"github.com/grafana/dskit/ring"
@@ -26,7 +27,7 @@ func toBasicLifecyclerConfig(cfg util.CommonRingConfig, logger log.Logger) (ring
2627

2728
return ring.BasicLifecyclerConfig{
2829
ID: cfg.InstanceID,
29-
Addr: fmt.Sprintf("%s:%d", instanceAddr, instancePort),
30+
Addr: net.JoinHostPort(instanceAddr, strconv.Itoa(instancePort)),
3031
HeartbeatPeriod: cfg.HeartbeatPeriod,
3132
HeartbeatTimeout: cfg.HeartbeatTimeout,
3233
TokensObservePeriod: 0,

pkg/experiment/metastore/discovery/kuberesolver.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@ package discovery
22

33
import (
44
"fmt"
5+
"net"
56
"net/url"
7+
"strconv"
68
"strings"
79
"sync"
810

@@ -103,7 +105,7 @@ func convertEndpoints(e kuberesolver2.Endpoints, ti targetInfo) []Server {
103105
raftServerId := fmt.Sprintf("%s.%s.%s.svc.cluster.local.:%d", podName, ti.service, ti.namespace, port.Port)
104106

105107
servers = append(servers, Server{
106-
ResolvedAddress: fmt.Sprintf("%s:%d", addr.IP, port.Port),
108+
ResolvedAddress: net.JoinHostPort(addr.IP, strconv.Itoa(port.Port)),
107109
Raft: raft.Server{
108110
ID: raft.ServerID(raftServerId),
109111
Address: raft.ServerAddress(raftServerId),

pkg/scheduler/schedulerdiscovery/ring.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
package schedulerdiscovery
44

55
import (
6-
"fmt"
6+
"net"
7+
"strconv"
78

89
"github.com/go-kit/log"
910
"github.com/grafana/dskit/kv"
@@ -42,7 +43,7 @@ func toBasicLifecyclerConfig(cfg util.CommonRingConfig, logger log.Logger) (ring
4243

4344
return ring.BasicLifecyclerConfig{
4445
ID: cfg.InstanceID,
45-
Addr: fmt.Sprintf("%s:%d", instanceAddr, instancePort),
46+
Addr: net.JoinHostPort(instanceAddr, strconv.Itoa(instancePort)),
4647
HeartbeatPeriod: cfg.HeartbeatPeriod,
4748
HeartbeatTimeout: cfg.HeartbeatTimeout,
4849
TokensObservePeriod: 0,

pkg/scheduler/schedulerdiscovery/ring_test.go

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
package schedulerdiscovery
44

55
import (
6-
"fmt"
6+
"net"
7+
"strconv"
78
"testing"
89
"time"
910

@@ -22,7 +23,7 @@ func TestRingConfig_DefaultConfigToBasicLifecyclerConfig(t *testing.T) {
2223

2324
expected := ring.BasicLifecyclerConfig{
2425
ID: cfg.SchedulerRing.InstanceID,
25-
Addr: fmt.Sprintf("%s:%d", cfg.SchedulerRing.InstanceAddr, cfg.SchedulerRing.InstancePort),
26+
Addr: net.JoinHostPort(cfg.SchedulerRing.InstanceAddr, strconv.Itoa(cfg.SchedulerRing.InstancePort)),
2627
HeartbeatPeriod: cfg.SchedulerRing.HeartbeatPeriod,
2728
HeartbeatTimeout: cfg.SchedulerRing.HeartbeatTimeout,
2829
TokensObservePeriod: 0,
@@ -50,7 +51,7 @@ func TestRingConfig_CustomConfigToBasicLifecyclerConfig(t *testing.T) {
5051
// ring config
5152
expected := ring.BasicLifecyclerConfig{
5253
ID: "test",
53-
Addr: "1.2.3.4:10",
54+
Addr: net.JoinHostPort(cfg.SchedulerRing.InstanceAddr, strconv.Itoa(cfg.SchedulerRing.InstancePort)),
5455
HeartbeatPeriod: 1 * time.Second,
5556
HeartbeatTimeout: 10 * time.Second,
5657
TokensObservePeriod: 0,
@@ -62,3 +63,25 @@ func TestRingConfig_CustomConfigToBasicLifecyclerConfig(t *testing.T) {
6263
require.NoError(t, err)
6364
assert.Equal(t, expected, actual)
6465
}
66+
67+
func TestRingConfig_AddressFamilies(t *testing.T) {
68+
cfg := Config{}
69+
flagext.DefaultValues(&cfg)
70+
71+
t.Run("IPv4", func(t *testing.T) {
72+
cfg.SchedulerRing.InstanceAddr = "1.2.3.4"
73+
cfg.SchedulerRing.InstancePort = 10
74+
actual, err := toBasicLifecyclerConfig(cfg.SchedulerRing, log.NewNopLogger())
75+
require.NoError(t, err)
76+
assert.Equal(t, "1.2.3.4:10", actual.Addr)
77+
})
78+
79+
t.Run("IPv6", func(t *testing.T) {
80+
cfg.SchedulerRing.InstanceAddr = "::1"
81+
cfg.SchedulerRing.InstancePort = 10
82+
cfg.SchedulerRing.EnableIPv6 = true
83+
actual, err := toBasicLifecyclerConfig(cfg.SchedulerRing, log.NewNopLogger())
84+
require.NoError(t, err)
85+
assert.Equal(t, "[::1]:10", actual.Addr)
86+
})
87+
}

pkg/storegateway/gateway_ring.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@ package storegateway
22

33
import (
44
"flag"
5-
"fmt"
5+
"net"
6+
"strconv"
67
"time"
78

89
"github.com/go-kit/log"
@@ -109,7 +110,7 @@ func (cfg *RingConfig) ToLifecyclerConfig(logger log.Logger) (ring.BasicLifecycl
109110

110111
return ring.BasicLifecyclerConfig{
111112
ID: cfg.Ring.InstanceID,
112-
Addr: fmt.Sprintf("%s:%d", instanceAddr, instancePort),
113+
Addr: net.JoinHostPort(instanceAddr, strconv.Itoa(instancePort)),
113114
Zone: cfg.InstanceZone,
114115
HeartbeatPeriod: cfg.Ring.HeartbeatPeriod,
115116
HeartbeatTimeout: cfg.Ring.HeartbeatTimeout,

pkg/validation/exporter/ring.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import (
66
"context"
77
"flag"
88
"fmt"
9+
"net"
10+
"strconv"
911
"time"
1012

1113
"github.com/go-kit/log"
@@ -74,7 +76,7 @@ func (c *RingConfig) toBasicLifecyclerConfig(logger log.Logger) (ring.BasicLifec
7476

7577
return ring.BasicLifecyclerConfig{
7678
ID: c.Ring.InstanceID,
77-
Addr: fmt.Sprintf("%s:%d", instanceAddr, instancePort),
79+
Addr: net.JoinHostPort(instanceAddr, strconv.Itoa(instancePort)),
7880
HeartbeatPeriod: c.Ring.HeartbeatPeriod,
7981
HeartbeatTimeout: c.Ring.HeartbeatTimeout,
8082
TokensObservePeriod: 0,

0 commit comments

Comments
 (0)