Skip to content

Commit 790135b

Browse files
authored
feat: RF1 improves replication stategy to support 1 replica (#13469)
1 parent 6ea83b4 commit 790135b

File tree

1 file changed

+18
-1
lines changed

1 file changed

+18
-1
lines changed

pkg/ingester-rf1/ring_client.go

+18-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"fmt"
66

77
"github.com/go-kit/log"
8+
"github.com/grafana/dskit/kv"
89
"github.com/grafana/dskit/ring"
910
ring_client "github.com/grafana/dskit/ring/client"
1011
"github.com/grafana/dskit/services"
@@ -36,7 +37,7 @@ func NewRingClient(
3637
logger: log.With(logger, "component", "ingester-rf1-client"),
3738
cfg: cfg,
3839
}
39-
ringClient.ring, err = ring.New(cfg.LifecyclerConfig.RingConfig, "ingester-rf1", "ingester-rf1-ring", ringClient.logger, registerer)
40+
ringClient.ring, err = newRing(cfg.LifecyclerConfig.RingConfig, "ingester-rf1", "ingester-rf1-ring", ringClient.logger, registerer)
4041
if err != nil {
4142
return nil, err
4243
}
@@ -59,6 +60,22 @@ func NewRingClient(
5960
return ringClient, nil
6061
}
6162

63+
func newRing(cfg ring.Config, name, key string, logger log.Logger, reg prometheus.Registerer) (*ring.Ring, error) {
64+
codec := ring.GetCodec()
65+
// Suffix all client names with "-ring" to denote this kv client is used by the ring
66+
store, err := kv.NewClient(
67+
cfg.KVStore,
68+
codec,
69+
kv.RegistererWithKVName(reg, name+"-ring"),
70+
logger,
71+
)
72+
if err != nil {
73+
return nil, err
74+
}
75+
76+
return ring.NewWithStoreClientAndStrategy(cfg, name, key, store, ring.NewIgnoreUnhealthyInstancesReplicationStrategy(), reg, logger)
77+
}
78+
6279
func (q *RingClient) starting(ctx context.Context) error {
6380
return services.StartManagerAndAwaitHealthy(ctx, q.subservices)
6481
}

0 commit comments

Comments
 (0)