MCPcopy Create free account
hub / github.com/cortexproject/cortex / TestMatcherCache

Function TestMatcherCache

pkg/ingester/ingester_test.go:129–186  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

127}
128
129func TestMatcherCache(t *testing.T) {
130 limits := defaultLimitsTestConfig()
131 limits.EnableNativeHistograms = true
132 userID := "1"
133 tenantLimits := newMockTenantLimits(map[string]*validation.Limits{userID: &limits})
134 registry := prometheus.NewRegistry()
135
136 dir := t.TempDir()
137 chunksDir := filepath.Join(dir, "chunks")
138 blocksDir := filepath.Join(dir, "blocks")
139 require.NoError(t, os.Mkdir(chunksDir, os.ModePerm))
140 require.NoError(t, os.Mkdir(blocksDir, os.ModePerm))
141 cfg := defaultIngesterTestConfig(t)
142 cfg.MatchersCacheMaxItems = 50
143 ing, err := prepareIngesterWithBlocksStorageAndLimits(t, cfg, limits, tenantLimits, blocksDir, registry)
144 require.NoError(t, err)
145 require.NoError(t, services.StartAndAwaitRunning(context.Background(), ing))
146
147 defer services.StopAndAwaitTerminated(context.Background(), ing) //nolint:errcheck
148
149 // Wait until it's ACTIVE
150 test.Poll(t, time.Second, ring.ACTIVE, func() any {
151 return ing.lifecycler.GetState()
152 })
153 ctx := user.InjectOrgID(context.Background(), userID)
154 // Lets have 1 key evicted
155 numberOfDifferentMatchers := cfg.MatchersCacheMaxItems + 1
156 callPerMatcher := 10
157 for j := range numberOfDifferentMatchers {
158 for range callPerMatcher {
159 s := &mockQueryStreamServer{ctx: ctx}
160 err = ing.QueryStream(&client.QueryRequest{
161 StartTimestampMs: math.MinInt64,
162 EndTimestampMs: math.MaxInt64,
163 Matchers: []*client.LabelMatcher{{Type: client.REGEX_MATCH, Name: labels.MetricName, Value: fmt.Sprintf("%d", j)}},
164 }, s)
165 require.NoError(t, err)
166 }
167 }
168
169 require.NoError(t, testutil.GatherAndCompare(registry, bytes.NewBufferString(fmt.Sprintf(`
170 # HELP cortex_ingester_matchers_cache_evicted_total Total number of items evicted from the cache
171 # TYPE cortex_ingester_matchers_cache_evicted_total counter
172 cortex_ingester_matchers_cache_evicted_total 1
173 # HELP cortex_ingester_matchers_cache_hits_total Total number of cache hits for series matchers
174 # TYPE cortex_ingester_matchers_cache_hits_total counter
175 cortex_ingester_matchers_cache_hits_total %v
176 # HELP cortex_ingester_matchers_cache_items Total number of cached items
177 # TYPE cortex_ingester_matchers_cache_items gauge
178 cortex_ingester_matchers_cache_items %v
179 # HELP cortex_ingester_matchers_cache_max_items Maximum number of items that can be cached
180 # TYPE cortex_ingester_matchers_cache_max_items gauge
181 cortex_ingester_matchers_cache_max_items 50
182 # HELP cortex_ingester_matchers_cache_requests_total Total number of cache requests for series matchers
183 # TYPE cortex_ingester_matchers_cache_requests_total counter
184 cortex_ingester_matchers_cache_requests_total %v
185 `, callPerMatcher*numberOfDifferentMatchers-numberOfDifferentMatchers, cfg.MatchersCacheMaxItems, callPerMatcher*numberOfDifferentMatchers)), "ingester_matchers_cache_requests_total", "ingester_matchers_cache_hits_total", "ingester_matchers_cache_items", "ingester_matchers_cache_max_items", "ingester_matchers_cache_evicted_total"))
186}

Callers

nothing calls this directly

Calls 10

StartAndAwaitRunningFunction · 0.92
StopAndAwaitTerminatedFunction · 0.92
PollFunction · 0.92
defaultLimitsTestConfigFunction · 0.85
JoinMethod · 0.80
newMockTenantLimitsFunction · 0.70
QueryStreamMethod · 0.65
GetStateMethod · 0.45

Tested by

no test coverage detected