From 1644c2d111484cd5e51f8fffea68ed1c05c08f7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20S=CC=8Ctibrany=CC=81?= Date: Fri, 22 May 2020 22:54:20 +0200 Subject: [PATCH 1/4] Allow using multiple memcached clients at the same time. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Peter Štibraný --- pkg/cacheutil/memcached_client.go | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/pkg/cacheutil/memcached_client.go b/pkg/cacheutil/memcached_client.go index 5ee937c48e..05ae88282a 100644 --- a/pkg/cacheutil/memcached_client.go +++ b/pkg/cacheutil/memcached_client.go @@ -182,6 +182,9 @@ func NewMemcachedClientWithConfig(logger log.Logger, name string, config Memcach client.Timeout = config.Timeout client.MaxIdleConns = config.MaxIdleConnections + if reg != nil { + reg = prometheus.WrapRegistererWith(prometheus.Labels{"name": name}, reg) + } return newMemcachedClient(logger, name, client, selector, config, reg) } @@ -196,7 +199,7 @@ func newMemcachedClient( dnsProvider := dns.NewProvider( logger, extprom.WrapRegistererWithPrefix("thanos_memcached_", reg), - dns.ResolverType(dns.GolangResolverType), + dns.GolangResolverType, ) c := &memcachedClient{ @@ -214,34 +217,30 @@ func newMemcachedClient( } c.operations = promauto.With(reg).NewCounterVec(prometheus.CounterOpts{ - Name: "thanos_memcached_operations_total", - Help: "Total number of operations against memcached.", - ConstLabels: prometheus.Labels{"name": name}, + Name: "thanos_memcached_operations_total", + Help: "Total number of operations against memcached.", }, []string{"operation"}) c.operations.WithLabelValues(opGetMulti) c.operations.WithLabelValues(opSet) c.failures = promauto.With(reg).NewCounterVec(prometheus.CounterOpts{ - Name: "thanos_memcached_operation_failures_total", - Help: "Total number of operations against memcached that failed.", - ConstLabels: prometheus.Labels{"name": name}, + Name: "thanos_memcached_operation_failures_total", + Help: "Total number of operations against memcached that failed.", }, []string{"operation"}) c.failures.WithLabelValues(opGetMulti) c.failures.WithLabelValues(opSet) c.skipped = promauto.With(reg).NewCounterVec(prometheus.CounterOpts{ - Name: "thanos_memcached_operation_skipped_total", - Help: "Total number of operations against memcached that have been skipped.", - ConstLabels: prometheus.Labels{"name": name}, + Name: "thanos_memcached_operation_skipped_total", + Help: "Total number of operations against memcached that have been skipped.", }, []string{"operation", "reason"}) c.skipped.WithLabelValues(opGetMulti, reasonMaxItemSize) c.skipped.WithLabelValues(opSet, reasonMaxItemSize) c.duration = promauto.With(reg).NewHistogramVec(prometheus.HistogramOpts{ - Name: "thanos_memcached_operation_duration_seconds", - Help: "Duration of operations against memcached.", - ConstLabels: prometheus.Labels{"name": name}, - Buckets: []float64{0.001, 0.005, 0.01, 0.025, 0.05, 0.1, 0.2, 0.5, 1, 3, 6, 10}, + Name: "thanos_memcached_operation_duration_seconds", + Help: "Duration of operations against memcached.", + Buckets: []float64{0.001, 0.005, 0.01, 0.025, 0.05, 0.1, 0.2, 0.5, 1, 3, 6, 10}, }, []string{"operation"}) c.duration.WithLabelValues(opGetMulti) c.duration.WithLabelValues(opSet) From aab7a7bbc0e925da67433067cafe8af6f17dbebe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20S=CC=8Ctibrany=CC=81?= Date: Fri, 22 May 2020 23:01:01 +0200 Subject: [PATCH 2/4] Added unit test to verify that we can have multiple clients. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Peter Štibraný --- pkg/cacheutil/memcached_client_test.go | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/pkg/cacheutil/memcached_client_test.go b/pkg/cacheutil/memcached_client_test.go index ede486a1a1..90e5352a35 100644 --- a/pkg/cacheutil/memcached_client_test.go +++ b/pkg/cacheutil/memcached_client_test.go @@ -13,6 +13,7 @@ import ( "github.com/fortytw2/leaktest" "github.com/go-kit/kit/log" "github.com/pkg/errors" + "github.com/prometheus/client_golang/prometheus" prom_testutil "github.com/prometheus/client_golang/prometheus/testutil" "github.com/thanos-io/thanos/pkg/model" "github.com/thanos-io/thanos/pkg/testutil" @@ -439,3 +440,18 @@ func (c *memcachedClientBackendMock) waitItems(expected int) error { return errors.New("timeout expired while waiting for items in the memcached mock") } + +func TestMultipleClientsCanUseSameRegistry(t *testing.T) { + reg := prometheus.NewRegistry() + + config := defaultMemcachedClientConfig + config.Addresses = []string{"127.0.0.1:11211"} + + client1, err := NewMemcachedClientWithConfig(log.NewNopLogger(), "a", config, reg) + testutil.Ok(t, err) + defer client1.Stop() + + client2, err := NewMemcachedClientWithConfig(log.NewNopLogger(), "b", config, reg) + testutil.Ok(t, err) + defer client2.Stop() +} From 8bcd8ea3714980dc96835b1ed22e8588c7803de1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20S=CC=8Ctibrany=CC=81?= Date: Fri, 22 May 2020 23:04:13 +0200 Subject: [PATCH 3/4] Added CHANGELOG.md entry. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Peter Štibraný --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b3a1676a06..da152de230 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ We use *breaking* word for marking changes that are not backward compatible (rel ### Fixed * [#2637](https://github.com/thanos-io/thanos/pull/2637) Compact: detect retryable errors that are inside of a wrapped `tsdb.MultiError` +* [#2648](https://github.com/thanos-io/thanos/pull/2648) Store: allow index cache and caching bucket to be configured at the same time. ## [v0.13.0](https://github.com/thanos-io/thanos/releases) - IN PROGRESS From aac6c5b4667fcbadfc60de8aefee63c6bb3d6271 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20S=CC=8Ctibrany=CC=81?= Date: Sat, 23 May 2020 09:02:57 +0200 Subject: [PATCH 4/4] Remove unused argument. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Peter Štibraný --- pkg/cacheutil/memcached_client.go | 3 +-- pkg/cacheutil/memcached_client_test.go | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/pkg/cacheutil/memcached_client.go b/pkg/cacheutil/memcached_client.go index 05ae88282a..6dbfb3a2d4 100644 --- a/pkg/cacheutil/memcached_client.go +++ b/pkg/cacheutil/memcached_client.go @@ -185,12 +185,11 @@ func NewMemcachedClientWithConfig(logger log.Logger, name string, config Memcach if reg != nil { reg = prometheus.WrapRegistererWith(prometheus.Labels{"name": name}, reg) } - return newMemcachedClient(logger, name, client, selector, config, reg) + return newMemcachedClient(logger, client, selector, config, reg) } func newMemcachedClient( logger log.Logger, - name string, client memcachedClientBackend, selector *MemcachedJumpHashSelector, config MemcachedClientConfig, diff --git a/pkg/cacheutil/memcached_client_test.go b/pkg/cacheutil/memcached_client_test.go index 90e5352a35..b97eecb658 100644 --- a/pkg/cacheutil/memcached_client_test.go +++ b/pkg/cacheutil/memcached_client_test.go @@ -379,7 +379,7 @@ func TestMemcachedClient_GetMulti(t *testing.T) { func prepare(config MemcachedClientConfig, backendMock *memcachedClientBackendMock) (*memcachedClient, error) { logger := log.NewNopLogger() selector := &MemcachedJumpHashSelector{} - client, err := newMemcachedClient(logger, "test", backendMock, selector, config, nil) + client, err := newMemcachedClient(logger, backendMock, selector, config, nil) return client, err }