New creates a new Ring. Being a service, Ring needs to be started to do anything.
(cfg Config, name, key string, logger log.Logger, reg prometheus.Registerer)
| 318 | |
| 319 | // New creates a new Ring. Being a service, Ring needs to be started to do anything. |
| 320 | func New(cfg Config, name, key string, logger log.Logger, reg prometheus.Registerer) (*Ring, error) { |
| 321 | codec := GetCodec() |
| 322 | // Suffix all client names with "-ring" to denote this kv client is used by the ring |
| 323 | store, err := kv.NewClient( |
| 324 | cfg.KVStore, |
| 325 | codec, |
| 326 | kv.RegistererWithKVName(reg, name+"-ring"), |
| 327 | logger, |
| 328 | ) |
| 329 | if err != nil { |
| 330 | return nil, err |
| 331 | } |
| 332 | |
| 333 | return NewWithStoreClientAndStrategy(cfg, name, key, store, NewDefaultReplicationStrategy(), reg, logger) |
| 334 | } |
| 335 | |
| 336 | func NewWithStoreClientAndStrategy(cfg Config, name, key string, store kv.Client, strategy ReplicationStrategy, reg prometheus.Registerer, logger log.Logger) (*Ring, error) { |
| 337 | if cfg.ReplicationFactor <= 0 { |