MCPcopy
hub / github.com/grafana/dskit / setRingStateFromDesc

Method setRingStateFromDesc

ring/ring.go:449–495  ·  view source on GitHub ↗
(ringDesc *Desc, updateMetrics, updateRegisteredTimestampCache, updateReadOnlyInstances bool)

Source from the content-addressed store, hash-verified

447}
448
449func (r *Ring) setRingStateFromDesc(ringDesc *Desc, updateMetrics, updateRegisteredTimestampCache, updateReadOnlyInstances bool) {
450 now := time.Now()
451 ringTokens := ringDesc.GetTokens()
452 ringTokensByZone := ringDesc.getTokensByZone()
453 ringInstanceByToken := ringDesc.getTokensInfo()
454 ringZones := getZones(ringTokensByZone)
455 oldestRegisteredTimestamp := ringDesc.getOldestRegisteredTimestamp()
456 instancesWithTokensCount := ringDesc.instancesWithTokensCount()
457 instancesCountPerZone := ringDesc.instancesCountPerZone()
458 instancesWithTokensCountPerZone := ringDesc.instancesWithTokensCountPerZone()
459 writableInstancesWithTokensCount := ringDesc.writableInstancesWithTokensCount()
460 writableInstancesWithTokensCountPerZone := ringDesc.writableInstancesWithTokensCountPerZone()
461 readOnlyInstances, oldestReadOnlyUpdatedTimestamp := ringDesc.readOnlyInstancesAndOldestReadOnlyUpdatedTimestamp()
462
463 r.mtx.Lock()
464 defer r.mtx.Unlock()
465 r.ringDesc = ringDesc
466 r.ringTokens = ringTokens
467 r.ringTokensByZone = ringTokensByZone
468 r.ringInstanceByToken = ringInstanceByToken
469 r.updateRingZones(ringZones)
470 r.instancesWithTokensCount = instancesWithTokensCount
471 r.instancesCountPerZone = instancesCountPerZone
472 r.instancesWithTokensCountPerZone = instancesWithTokensCountPerZone
473 r.writableInstancesWithTokensCount = writableInstancesWithTokensCount
474 r.writableInstancesWithTokensCountPerZone = writableInstancesWithTokensCountPerZone
475 if updateRegisteredTimestampCache {
476 r.oldestRegisteredTimestamp = oldestRegisteredTimestamp
477 }
478 r.lastTopologyChange = now
479 if updateReadOnlyInstances {
480 r.readOnlyInstances = &readOnlyInstances
481 r.oldestReadOnlyUpdatedTimestamp = &oldestReadOnlyUpdatedTimestamp
482 }
483
484 // Invalidate all cached subrings.
485 if r.shuffledSubringCache != nil {
486 r.shuffledSubringCache = make(map[subringCacheKey]*Ring)
487 }
488 if r.shuffledSubringWithLookbackCache != nil {
489 r.shuffledSubringWithLookbackCache = make(map[subringCacheKey]cachedSubringWithLookback[*Ring])
490 }
491
492 if updateMetrics {
493 r.updateRingMetrics()
494 }
495}
496
497// Get returns n (or more) instances which form the replicas for the given key.
498func (r *Ring) Get(key uint32, op Operation, bufDescs []InstanceDesc, bufHosts, _ []string) (ReplicationSet, error) {