5
5
"fmt"
6
6
7
7
"github.com/go-kit/log"
8
+ "github.com/grafana/dskit/kv"
8
9
"github.com/grafana/dskit/ring"
9
10
ring_client "github.com/grafana/dskit/ring/client"
10
11
"github.com/grafana/dskit/services"
@@ -36,7 +37,7 @@ func NewRingClient(
36
37
logger : log .With (logger , "component" , "ingester-rf1-client" ),
37
38
cfg : cfg ,
38
39
}
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 )
40
41
if err != nil {
41
42
return nil , err
42
43
}
@@ -59,6 +60,22 @@ func NewRingClient(
59
60
return ringClient , nil
60
61
}
61
62
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
+
62
79
func (q * RingClient ) starting (ctx context.Context ) error {
63
80
return services .StartManagerAndAwaitHealthy (ctx , q .subservices )
64
81
}
0 commit comments