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

Method getCachedShuffledSubring

ring/ring.go:1296–1327  ·  view source on GitHub ↗
(identifier string, size int)

Source from the content-addressed store, hash-verified

1294}
1295
1296func (r *Ring) getCachedShuffledSubring(identifier string, size int) *Ring {
1297 if r.cfg.SubringCacheDisabled {
1298 return nil
1299 }
1300
1301 r.mtx.RLock()
1302 defer r.mtx.RUnlock()
1303
1304 // if shuffledSubringCache map is nil, reading it returns default value (nil pointer).
1305 cached := r.shuffledSubringCache[subringCacheKey{identifier: identifier, shardSize: size}]
1306 if cached == nil {
1307 return nil
1308 }
1309
1310 // No need to update cached subring, if it is the original ring itself.
1311 if r == cached {
1312 return cached
1313 }
1314
1315 cached.mtx.Lock()
1316 defer cached.mtx.Unlock()
1317
1318 // Update instance states and timestamps. We know that the topology is the same,
1319 // so zones and tokens are equal.
1320 for name, cachedIng := range cached.ringDesc.Ingesters {
1321 ing := r.ringDesc.Ingesters[name]
1322 cachedIng.State = ing.State
1323 cachedIng.Timestamp = ing.Timestamp
1324 cached.ringDesc.Ingesters[name] = cachedIng
1325 }
1326 return cached
1327}
1328
1329func (r *Ring) setCachedShuffledSubring(identifier string, size int, subring *Ring) {
1330 if subring == nil || r.cfg.SubringCacheDisabled {

Callers 1

ShuffleShardMethod · 0.95

Calls

no outgoing calls

Tested by

no test coverage detected