Skip to content

Commit 4e69b84

Browse files
authored
Add rand to sparse requests for rejoin memberlist cluster (#4747)
Signed-off-by: Daniel Blando <[email protected]>
1 parent 8a416fc commit 4e69b84

File tree

2 files changed

+21
-10
lines changed

2 files changed

+21
-10
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
* [ENHANCEMENT] Blocks storage: Add `-blocks-storage.azure.http.*`, `-alertmanager-storage.azure.http.*`, and `-ruler-storage.azure.http.*` to configure the Azure storage client. #4581
2929
* [ENHANCEMENT] Optimise memberlist receive path when used as a backing store for rings with a large number of members. #4601
3030
* [ENHANCEMENT] Add length and limit to labelNameTooLongError and labelValueTooLongError #4595
31+
* [ENHANCEMENT] Add jitter to rejoinInterval. #4747
3132
* [BUGFIX] AlertManager: remove stale template files. #4495
3233
* [BUGFIX] Distributor: fix bug in query-exemplar where some results would get dropped. #4583
3334
* [BUGFIX] Update Thanos dependency: compactor tracing support, azure blocks storage memory fix. #4585

pkg/ring/kv/memberlist/memberlist_client.go

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
"flag"
1010
"fmt"
1111
"math"
12+
mathrand "math/rand"
1213
"strings"
1314
"sync"
1415
"time"
@@ -462,6 +463,12 @@ func (m *KV) running(ctx context.Context) error {
462463
var tickerChan <-chan time.Time
463464
if m.cfg.RejoinInterval > 0 && len(m.cfg.JoinMembers) > 0 {
464465
t := time.NewTicker(m.cfg.RejoinInterval)
466+
t.Stop()
467+
time.AfterFunc(time.Duration(uint64(mathrand.Int63())%uint64(m.cfg.RejoinInterval)), func() {
468+
m.rejoinMemberlist(ctx)
469+
470+
t.Reset(m.cfg.RejoinInterval)
471+
})
465472
defer t.Stop()
466473

467474
tickerChan = t.C
@@ -470,22 +477,25 @@ func (m *KV) running(ctx context.Context) error {
470477
for {
471478
select {
472479
case <-tickerChan:
473-
members := m.discoverMembers(ctx, m.cfg.JoinMembers)
474-
475-
reached, err := m.memberlist.Join(members)
476-
if err == nil {
477-
level.Info(m.logger).Log("msg", "re-joined memberlist cluster", "reached_nodes", reached)
478-
} else {
479-
// Don't report error from rejoin, otherwise KV service would be stopped completely.
480-
level.Warn(m.logger).Log("msg", "re-joining memberlist cluster failed", "err", err)
481-
}
482-
480+
m.rejoinMemberlist(ctx)
483481
case <-ctx.Done():
484482
return nil
485483
}
486484
}
487485
}
488486

487+
func (m *KV) rejoinMemberlist(ctx context.Context) {
488+
members := m.discoverMembers(ctx, m.cfg.JoinMembers)
489+
490+
reached, err := m.memberlist.Join(members)
491+
if err == nil {
492+
level.Info(m.logger).Log("msg", "re-joined memberlist cluster", "reached_nodes", reached)
493+
} else {
494+
// Don't report error from rejoin, otherwise KV service would be stopped completely.
495+
level.Warn(m.logger).Log("msg", "re-joining memberlist cluster failed", "err", err)
496+
}
497+
}
498+
489499
// GetCodec returns codec for given ID or nil.
490500
func (m *KV) GetCodec(codecID string) codec.Codec {
491501
return m.codecs[codecID]

0 commit comments

Comments
 (0)