MCPcopy
hub / github.com/redis/go-redis / newRingShards

Method newRingShards

ring.go:389–422  ·  view source on GitHub ↗
(
	addrs map[string]string, existing *ringShards,
)

Source from the content-addressed store, hash-verified

387}
388
389func (c *ringSharding) newRingShards(
390 addrs map[string]string, existing *ringShards,
391) (shards *ringShards, created, unused map[string]*ringShard) {
392 shards = &ringShards{m: make(map[string]*ringShard, len(addrs))}
393 created = make(map[string]*ringShard) // indexed by addr
394 unused = make(map[string]*ringShard) // indexed by addr
395
396 if existing != nil {
397 for _, shard := range existing.list {
398 unused[shard.addr] = shard
399 }
400 }
401
402 for name, addr := range addrs {
403 if shard, ok := unused[addr]; ok {
404 shards.m[name] = shard
405 delete(unused, addr)
406 } else {
407 shard := newRingShard(c.opt, addr)
408 shards.m[name] = shard
409 created[addr] = shard
410
411 for _, fn := range c.onNewNode {
412 fn(shard.Client)
413 }
414 }
415 }
416
417 for _, shard := range shards.m {
418 shards.list = append(shards.list, shard)
419 }
420
421 return
422}
423
424// Warning: External exposure of `c.shards.list` may cause data races.
425// So keep internal or implement deep copy if exposed.

Callers 1

SetAddrsMethod · 0.95

Calls 1

newRingShardFunction · 0.85

Tested by

no test coverage detected