(identifier string, size int, zoneStableSharding bool)
| 944 | } |
| 945 | |
| 946 | func (r *Ring) getCachedShuffledSubring(identifier string, size int, zoneStableSharding bool) *Ring { |
| 947 | if r.cfg.SubringCacheDisabled { |
| 948 | return nil |
| 949 | } |
| 950 | |
| 951 | r.mtx.RLock() |
| 952 | defer r.mtx.RUnlock() |
| 953 | |
| 954 | // if shuffledSubringCache map is nil, reading it returns default value (nil pointer). |
| 955 | cached := r.shuffledSubringCache[subringCacheKey{identifier: identifier, shardSize: size, zoneStableSharding: zoneStableSharding}] |
| 956 | if cached == nil { |
| 957 | return nil |
| 958 | } |
| 959 | |
| 960 | cached.mtx.Lock() |
| 961 | defer cached.mtx.Unlock() |
| 962 | |
| 963 | // Update instance states and timestamps. We know that the topology is the same, |
| 964 | // so zones and tokens are equal. |
| 965 | for name, cachedIng := range cached.ringDesc.Ingesters { |
| 966 | ing := r.ringDesc.Ingesters[name] |
| 967 | cachedIng.State = ing.State |
| 968 | cachedIng.Timestamp = ing.Timestamp |
| 969 | cached.ringDesc.Ingesters[name] = cachedIng |
| 970 | } |
| 971 | return cached |
| 972 | } |
| 973 | |
| 974 | func (r *Ring) setCachedShuffledSubring(identifier string, size int, zoneStableSharding bool, subring *Ring) { |
| 975 | if subring == nil || r.cfg.SubringCacheDisabled { |
no outgoing calls
no test coverage detected