Skip to content

Commit 193352b

Browse files
committed
address comments
1 parent f3b2dfb commit 193352b

File tree

5 files changed

+35
-33
lines changed

5 files changed

+35
-33
lines changed

pkg/cacheutil/memcached_client.go

+6-1
Original file line numberDiff line numberDiff line change
@@ -182,8 +182,12 @@ type memcachedClient struct {
182182
dataSize *prometheus.HistogramVec
183183
}
184184

185+
// AddressProvider performs node address resolution given a list of clusters.
185186
type AddressProvider interface {
187+
// Resolves the provided list of memcached cluster to the actual nodes
186188
Resolve(context.Context, []string) error
189+
190+
// Returns the nodes
187191
Addresses() []string
188192
}
189193

@@ -237,7 +241,8 @@ func newMemcachedClient(
237241
addressProvider = memcacheDiscovery.NewProvider(
238242
logger,
239243
promRegisterer,
240-
2*time.Second)
244+
config.Timeout,
245+
)
241246
} else {
242247
addressProvider = dns.NewProvider(
243248
logger,

pkg/discovery/memcache/provider.go

+7-3
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,12 @@ import (
1717
"github.com/thanos-io/thanos/pkg/extprom"
1818
)
1919

20+
// Provider is a stateful cache for asynchronous memcached auto-discovery resolution. It provides a way to resolve
21+
// addresses and obtain them.
2022
type Provider struct {
2123
sync.RWMutex
2224
resolver Resolver
23-
clusterConfigs map[string]*ClusterConfig
25+
clusterConfigs map[string]*clusterConfig
2426
logger log.Logger
2527

2628
configVersion *extprom.TxGaugeVec
@@ -32,7 +34,7 @@ type Provider struct {
3234
func NewProvider(logger log.Logger, reg prometheus.Registerer, dialTimeout time.Duration) *Provider {
3335
p := &Provider{
3436
resolver: &memcachedAutoDiscovery{dialTimeout: dialTimeout},
35-
clusterConfigs: map[string]*ClusterConfig{},
37+
clusterConfigs: map[string]*clusterConfig{},
3638
configVersion: extprom.NewTxGaugeVec(reg, prometheus.GaugeOpts{
3739
Name: "auto_discovery_config_version",
3840
Help: "The current auto discovery config version",
@@ -54,8 +56,9 @@ func NewProvider(logger log.Logger, reg prometheus.Registerer, dialTimeout time.
5456
return p
5557
}
5658

59+
// Resolve stores a list of nodes auto-discovered from the provided addresses.
5760
func (p *Provider) Resolve(ctx context.Context, addresses []string) error {
58-
clusterConfigs := map[string]*ClusterConfig{}
61+
clusterConfigs := map[string]*clusterConfig{}
5962
errs := errutil.MultiError{}
6063

6164
for _, address := range addresses {
@@ -96,6 +99,7 @@ func (p *Provider) Resolve(ctx context.Context, addresses []string) error {
9699
return errs.Err()
97100
}
98101

102+
// Addresses returns the latest addresses present in the Provider.
99103
func (p *Provider) Addresses() []string {
100104
var result []string
101105
for _, config := range p.clusterConfigs {

pkg/discovery/memcache/provider_test.go

+11-18
Original file line numberDiff line numberDiff line change
@@ -20,29 +20,25 @@ func TestProviderUpdatesAddresses(t *testing.T) {
2020
clusters := []string{"memcached-cluster-1", "memcached-cluster-2"}
2121
provider := NewProvider(log.NewNopLogger(), nil, 5*time.Second)
2222
resolver := mockResolver{
23-
configs: map[string]*ClusterConfig{
23+
configs: map[string]*clusterConfig{
2424
"memcached-cluster-1": {nodes: []Node{{dns: "dns-1", ip: "ip-1", port: 11211}}},
2525
"memcached-cluster-2": {nodes: []Node{{dns: "dns-2", ip: "ip-2", port: 8080}}},
2626
},
2727
}
2828
provider.resolver = &resolver
2929

30-
err := provider.Resolve(ctx, clusters)
30+
testutil.Ok(t, provider.Resolve(ctx, clusters))
3131
addresses := provider.Addresses()
32-
sort.Strings(addresses)
33-
34-
testutil.Ok(t, err)
3532
testutil.Equals(t, []string{"dns-1:11211", "dns-2:8080"}, addresses)
3633

37-
resolver.configs = map[string]*ClusterConfig{
34+
resolver.configs = map[string]*clusterConfig{
3835
"memcached-cluster-1": {nodes: []Node{{dns: "dns-1", ip: "ip-1", port: 11211}, {dns: "dns-3", ip: "ip-3", port: 11211}}},
3936
"memcached-cluster-2": {nodes: []Node{{dns: "dns-2", ip: "ip-2", port: 8080}}},
4037
}
41-
err = provider.Resolve(ctx, clusters)
38+
39+
testutil.Ok(t, provider.Resolve(ctx, clusters))
4240
addresses = provider.Addresses()
4341
sort.Strings(addresses)
44-
45-
testutil.Ok(t, err)
4642
testutil.Equals(t, []string{"dns-1:11211", "dns-2:8080", "dns-3:11211"}, addresses)
4743
}
4844

@@ -51,36 +47,33 @@ func TestProviderDoesNotUpdateAddressIfFailed(t *testing.T) {
5147
clusters := []string{"memcached-cluster-1", "memcached-cluster-2"}
5248
provider := NewProvider(log.NewNopLogger(), nil, 5*time.Second)
5349
resolver := mockResolver{
54-
configs: map[string]*ClusterConfig{
50+
configs: map[string]*clusterConfig{
5551
"memcached-cluster-1": {nodes: []Node{{dns: "dns-1", ip: "ip-1", port: 11211}}},
5652
"memcached-cluster-2": {nodes: []Node{{dns: "dns-2", ip: "ip-2", port: 8080}}},
5753
},
5854
}
5955
provider.resolver = &resolver
6056

61-
err := provider.Resolve(ctx, clusters)
57+
testutil.Ok(t, provider.Resolve(ctx, clusters))
6258
addresses := provider.Addresses()
6359
sort.Strings(addresses)
64-
65-
testutil.Ok(t, err)
6660
testutil.Equals(t, []string{"dns-1:11211", "dns-2:8080"}, addresses)
6761

6862
resolver.configs = nil
6963
resolver.err = errors.New("oops")
70-
err = provider.Resolve(ctx, clusters)
64+
65+
testutil.NotOk(t, provider.Resolve(ctx, clusters))
7166
addresses = provider.Addresses()
7267
sort.Strings(addresses)
73-
74-
testutil.NotOk(t, err)
7568
testutil.Equals(t, []string{"dns-1:11211", "dns-2:8080"}, addresses)
7669
}
7770

7871
type mockResolver struct {
79-
configs map[string]*ClusterConfig
72+
configs map[string]*clusterConfig
8073
err error
8174
}
8275

83-
func (r *mockResolver) Resolve(_ context.Context, address string) (*ClusterConfig, error) {
76+
func (r *mockResolver) Resolve(_ context.Context, address string) (*clusterConfig, error) {
8477
if r.err != nil {
8578
return nil, r.err
8679
}

pkg/discovery/memcache/resolver.go

+8-8
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,11 @@ import (
1111
"strconv"
1212
"strings"
1313
"time"
14+
15+
"github.com/thanos-io/thanos/pkg/runutil"
1416
)
1517

16-
type ClusterConfig struct {
18+
type clusterConfig struct {
1719
version int
1820
nodes []Node
1921
}
@@ -25,21 +27,19 @@ type Node struct {
2527
}
2628

2729
type Resolver interface {
28-
Resolve(ctx context.Context, address string) (*ClusterConfig, error)
30+
Resolve(ctx context.Context, address string) (*clusterConfig, error)
2931
}
3032

3133
type memcachedAutoDiscovery struct {
3234
dialTimeout time.Duration
3335
}
3436

35-
func (s *memcachedAutoDiscovery) Resolve(ctx context.Context, address string) (config *ClusterConfig, err error) {
37+
func (s *memcachedAutoDiscovery) Resolve(ctx context.Context, address string) (config *clusterConfig, err error) {
3638
conn, err := net.DialTimeout("tcp", address, s.dialTimeout)
3739
if err != nil {
3840
return nil, err
3941
}
40-
defer func() {
41-
err = conn.Close()
42-
}()
42+
defer runutil.CloseWithErrCapture(&err, conn, "closing connection")
4343

4444
rw := bufio.NewReadWriter(bufio.NewReader(conn), bufio.NewWriter(conn))
4545
if _, err := fmt.Fprintf(rw, "config get cluster\n"); err != nil {
@@ -57,8 +57,8 @@ func (s *memcachedAutoDiscovery) Resolve(ctx context.Context, address string) (c
5757
return config, err
5858
}
5959

60-
func (s *memcachedAutoDiscovery) parseConfig(reader *bufio.Reader) (*ClusterConfig, error) {
61-
clusterConfig := new(ClusterConfig)
60+
func (s *memcachedAutoDiscovery) parseConfig(reader *bufio.Reader) (*clusterConfig, error) {
61+
clusterConfig := new(clusterConfig)
6262

6363
configMeta, err := reader.ReadString('\n')
6464
if err != nil {

pkg/discovery/memcache/resolver_test.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,13 @@ func TestGoodClusterConfigs(t *testing.T) {
1717
resolver := memcachedAutoDiscovery{}
1818
testCases := []struct {
1919
content string
20-
config ClusterConfig
20+
config clusterConfig
2121
}{
2222
{"CONFIG cluster 0 23\r\n100\r\ndns-1|ip-1|11211\r\nEND\r\n",
23-
ClusterConfig{nodes: []Node{{dns: "dns-1", ip: "ip-1", port: 11211}}, version: 100},
23+
clusterConfig{nodes: []Node{{dns: "dns-1", ip: "ip-1", port: 11211}}, version: 100},
2424
},
2525
{"CONFIG cluster 0 37\r\n0\r\ndns-1|ip-1|11211 dns-2|ip-2|8080\r\nEND\r\n",
26-
ClusterConfig{nodes: []Node{{dns: "dns-1", ip: "ip-1", port: 11211}, {dns: "dns-2", ip: "ip-2", port: 8080}}, version: 0},
26+
clusterConfig{nodes: []Node{{dns: "dns-1", ip: "ip-1", port: 11211}, {dns: "dns-2", ip: "ip-2", port: 8080}}, version: 0},
2727
},
2828
}
2929

0 commit comments

Comments
 (0)