@@ -109,6 +109,7 @@ func TestIngesterPerLabelsetLimitExceeded(t *testing.T) {
109
109
require .NoError (t , os .Mkdir (blocksDir , os .ModePerm ))
110
110
111
111
ing , err := prepareIngesterWithBlocksStorageAndLimits (t , defaultIngesterTestConfig (t ), limits , tenantLimits , blocksDir , registry )
112
+ registry .MustRegister (validation .DiscardedSamples )
112
113
require .NoError (t , err )
113
114
require .NoError (t , services .StartAndAwaitRunning (context .Background (), ing ))
114
115
// Wait until it's ACTIVE
@@ -132,13 +133,13 @@ func TestIngesterPerLabelsetLimitExceeded(t *testing.T) {
132
133
}
133
134
}
134
135
135
- ing .updateActiveSeries ()
136
+ ing .updateActiveSeries (ctx )
136
137
require .NoError (t , testutil .GatherAndCompare (registry , bytes .NewBufferString (`
137
138
# HELP cortex_ingester_active_series_per_labelset Number of currently active series per user and labelset.
138
139
# TYPE cortex_ingester_active_series_per_labelset gauge
139
140
cortex_ingester_active_series_per_labelset{labelset="{label1=\"value1\"}",user="1"} 3
140
141
cortex_ingester_active_series_per_labelset{labelset="{label2=\"value2\"}",user="1"} 2
141
- ` ), "cortex_ingester_active_series_per_labelset" ))
142
+ ` ), "cortex_ingester_active_series_per_labelset" , "cortex_discarded_samples_total" ))
142
143
143
144
// Should impose limits
144
145
for _ , set := range limits .MaxSeriesPerLabelSet {
@@ -154,13 +155,16 @@ func TestIngesterPerLabelsetLimitExceeded(t *testing.T) {
154
155
require .ErrorContains (t , err , set .Id )
155
156
}
156
157
157
- ing .updateActiveSeries ()
158
+ ing .updateActiveSeries (ctx )
158
159
require .NoError (t , testutil .GatherAndCompare (registry , bytes .NewBufferString (`
160
+ # HELP cortex_discarded_samples_total The total number of samples that were discarded.
161
+ # TYPE cortex_discarded_samples_total counter
162
+ cortex_discarded_samples_total{reason="per_labelset_series_limit",user="1"} 2
159
163
# HELP cortex_ingester_active_series_per_labelset Number of currently active series per user and labelset.
160
164
# TYPE cortex_ingester_active_series_per_labelset gauge
161
165
cortex_ingester_active_series_per_labelset{labelset="{label1=\"value1\"}",user="1"} 3
162
166
cortex_ingester_active_series_per_labelset{labelset="{label2=\"value2\"}",user="1"} 2
163
- ` ), "cortex_ingester_active_series_per_labelset" ))
167
+ ` ), "cortex_ingester_active_series_per_labelset" , "cortex_discarded_samples_total" ))
164
168
165
169
// Should apply composite limits
166
170
limits .MaxSeriesPerLabelSet = append (limits .MaxSeriesPerLabelSet ,
@@ -187,6 +191,21 @@ func TestIngesterPerLabelsetLimitExceeded(t *testing.T) {
187
191
require .NoError (t , limits .UnmarshalJSON (b ))
188
192
tenantLimits .setLimits (userID , & limits )
189
193
194
+ // Should backfill
195
+ ing .updateActiveSeries (ctx )
196
+ require .NoError (t , testutil .GatherAndCompare (registry , bytes .NewBufferString (`
197
+ # HELP cortex_discarded_samples_total The total number of samples that were discarded.
198
+ # TYPE cortex_discarded_samples_total counter
199
+ cortex_discarded_samples_total{reason="per_labelset_series_limit",user="1"} 2
200
+ # HELP cortex_ingester_active_series_per_labelset Number of currently active series per user and labelset.
201
+ # TYPE cortex_ingester_active_series_per_labelset gauge
202
+ cortex_ingester_active_series_per_labelset{labelset="{comp1=\"compValue1\", comp2=\"compValue2\"}",user="1"} 0
203
+ cortex_ingester_active_series_per_labelset{labelset="{comp1=\"compValue1\"}",user="1"} 0
204
+ cortex_ingester_active_series_per_labelset{labelset="{comp2=\"compValue2\"}",user="1"} 0
205
+ cortex_ingester_active_series_per_labelset{labelset="{label1=\"value1\"}",user="1"} 3
206
+ cortex_ingester_active_series_per_labelset{labelset="{label2=\"value2\"}",user="1"} 2
207
+ ` ), "cortex_ingester_active_series_per_labelset" , "cortex_discarded_samples_total" ))
208
+
190
209
// Adding 5 metrics with only 1 label
191
210
for i := 0 ; i < 5 ; i ++ {
192
211
lbls := []string {labels .MetricName , "metric_name" , "comp1" , "compValue1" }
@@ -211,16 +230,19 @@ func TestIngesterPerLabelsetLimitExceeded(t *testing.T) {
211
230
assert .Equal (t , http .StatusBadRequest , int (httpResp .Code ))
212
231
require .ErrorContains (t , err , labels .FromStrings ("comp1" , "compValue1" , "comp2" , "compValue2" ).String ())
213
232
214
- ing .updateActiveSeries ()
233
+ ing .updateActiveSeries (ctx )
215
234
require .NoError (t , testutil .GatherAndCompare (registry , bytes .NewBufferString (`
235
+ # HELP cortex_discarded_samples_total The total number of samples that were discarded.
236
+ # TYPE cortex_discarded_samples_total counter
237
+ cortex_discarded_samples_total{reason="per_labelset_series_limit",user="1"} 3
216
238
# HELP cortex_ingester_active_series_per_labelset Number of currently active series per user and labelset.
217
239
# TYPE cortex_ingester_active_series_per_labelset gauge
218
240
cortex_ingester_active_series_per_labelset{labelset="{label1=\"value1\"}",user="1"} 3
219
241
cortex_ingester_active_series_per_labelset{labelset="{label2=\"value2\"}",user="1"} 2
220
242
cortex_ingester_active_series_per_labelset{labelset="{comp1=\"compValue1\", comp2=\"compValue2\"}",user="1"} 2
221
243
cortex_ingester_active_series_per_labelset{labelset="{comp1=\"compValue1\"}",user="1"} 7
222
244
cortex_ingester_active_series_per_labelset{labelset="{comp2=\"compValue2\"}",user="1"} 2
223
- ` ), "cortex_ingester_active_series_per_labelset" ))
245
+ ` ), "cortex_ingester_active_series_per_labelset" , "cortex_discarded_samples_total" ))
224
246
225
247
// Should bootstrap and apply limits when configuration change
226
248
limits .MaxSeriesPerLabelSet = append (limits .MaxSeriesPerLabelSet ,
@@ -249,7 +271,7 @@ func TestIngesterPerLabelsetLimitExceeded(t *testing.T) {
249
271
assert .Equal (t , http .StatusBadRequest , int (httpResp .Code ))
250
272
require .ErrorContains (t , err , labels .FromStrings (lbls ... ).String ())
251
273
252
- ing .updateActiveSeries ()
274
+ ing .updateActiveSeries (ctx )
253
275
require .NoError (t , testutil .GatherAndCompare (registry , bytes .NewBufferString (`
254
276
# HELP cortex_ingester_active_series_per_labelset Number of currently active series per user and labelset.
255
277
# TYPE cortex_ingester_active_series_per_labelset gauge
@@ -267,7 +289,7 @@ func TestIngesterPerLabelsetLimitExceeded(t *testing.T) {
267
289
require .NoError (t , err )
268
290
require .NoError (t , limits .UnmarshalJSON (b ))
269
291
tenantLimits .setLimits (userID , & limits )
270
- ing .updateActiveSeries ()
292
+ ing .updateActiveSeries (ctx )
271
293
require .NoError (t , testutil .GatherAndCompare (registry , bytes .NewBufferString (`
272
294
# HELP cortex_ingester_active_series_per_labelset Number of currently active series per user and labelset.
273
295
# TYPE cortex_ingester_active_series_per_labelset gauge
@@ -281,7 +303,7 @@ func TestIngesterPerLabelsetLimitExceeded(t *testing.T) {
281
303
ing , err = prepareIngesterWithBlocksStorageAndLimits (t , defaultIngesterTestConfig (t ), limits , tenantLimits , blocksDir , registry )
282
304
require .NoError (t , err )
283
305
require .NoError (t , services .StartAndAwaitRunning (context .Background (), ing ))
284
- ing .updateActiveSeries ()
306
+ ing .updateActiveSeries (ctx )
285
307
require .NoError (t , testutil .GatherAndCompare (registry , bytes .NewBufferString (`
286
308
# HELP cortex_ingester_active_series_per_labelset Number of currently active series per user and labelset.
287
309
# TYPE cortex_ingester_active_series_per_labelset gauge
@@ -1207,7 +1229,7 @@ func TestIngester_Push(t *testing.T) {
1207
1229
1208
1230
// Update active series for metrics check.
1209
1231
if ! testData .disableActiveSeries {
1210
- i .updateActiveSeries ()
1232
+ i .updateActiveSeries (ctx )
1211
1233
}
1212
1234
1213
1235
// Append additional metrics to assert on.
@@ -1274,7 +1296,7 @@ func TestIngester_Push_ShouldCorrectlyTrackMetricsInMultiTenantScenario(t *testi
1274
1296
}
1275
1297
1276
1298
// Update active series for metrics check.
1277
- i .updateActiveSeries ()
1299
+ i .updateActiveSeries (context . Background () )
1278
1300
1279
1301
// Check tracked Prometheus metrics
1280
1302
expectedMetrics := `
@@ -1361,7 +1383,7 @@ func TestIngester_Push_DecreaseInactiveSeries(t *testing.T) {
1361
1383
time .Sleep (200 * time .Millisecond )
1362
1384
1363
1385
// Update active series for metrics check. This will remove inactive series.
1364
- i .updateActiveSeries ()
1386
+ i .updateActiveSeries (context . Background () )
1365
1387
1366
1388
// Check tracked Prometheus metrics
1367
1389
expectedMetrics := `
@@ -3733,7 +3755,7 @@ func TestIngesterCompactAndCloseIdleTSDB(t *testing.T) {
3733
3755
})
3734
3756
3735
3757
pushSingleSampleWithMetadata (t , i )
3736
- i .updateActiveSeries ()
3758
+ i .updateActiveSeries (context . Background () )
3737
3759
3738
3760
require .Equal (t , int64 (1 ), i .TSDBState .seriesCount .Load ())
3739
3761
@@ -3774,7 +3796,7 @@ func TestIngesterCompactAndCloseIdleTSDB(t *testing.T) {
3774
3796
})
3775
3797
3776
3798
require .Greater (t , testutil .ToFloat64 (i .TSDBState .idleTsdbChecks .WithLabelValues (string (tsdbIdleClosed ))), float64 (0 ))
3777
- i .updateActiveSeries ()
3799
+ i .updateActiveSeries (context . Background () )
3778
3800
require .Equal (t , int64 (0 ), i .TSDBState .seriesCount .Load ()) // Flushing removed all series from memory.
3779
3801
3780
3802
// Verify that user has disappeared from metrics.
@@ -3799,7 +3821,7 @@ func TestIngesterCompactAndCloseIdleTSDB(t *testing.T) {
3799
3821
3800
3822
// Pushing another sample will recreate TSDB.
3801
3823
pushSingleSampleWithMetadata (t , i )
3802
- i .updateActiveSeries ()
3824
+ i .updateActiveSeries (context . Background () )
3803
3825
3804
3826
// User is back.
3805
3827
require .NoError (t , testutil .GatherAndCompare (r , strings .NewReader (`
0 commit comments