@@ -64,7 +64,7 @@ func testPrometheusStoreSeriesE2e(t *testing.T, prefix string) {
64
64
limitMinT := int64 (0 )
65
65
proxy , err := NewPrometheusStore (nil , nil , promclient .NewDefaultClient (), u , component .Sidecar ,
66
66
func () labels.Labels { return labels .FromStrings ("region" , "eu-west" ) },
67
- func () (int64 , int64 ) { return limitMinT , - 1 }, nil ) // Maxt does not matter.
67
+ func () (int64 , int64 ) { return limitMinT , - 1 }, nil , 0 ) // Maxt does not matter.
68
68
testutil .Ok (t , err )
69
69
70
70
// Query all three samples except for the first one. Since we round up queried data
@@ -191,7 +191,7 @@ func TestPrometheusStore_SeriesLabels_e2e(t *testing.T) {
191
191
192
192
promStore , err := NewPrometheusStore (nil , nil , promclient .NewDefaultClient (), u , component .Sidecar ,
193
193
func () labels.Labels { return labels .FromStrings ("region" , "eu-west" ) },
194
- func () (int64 , int64 ) { return math .MinInt64 / 1000 + 62135596801 , math .MaxInt64 / 1000 - 62135596801 }, nil )
194
+ func () (int64 , int64 ) { return math .MinInt64 / 1000 + 62135596801 , math .MaxInt64 / 1000 - 62135596801 }, nil , 0 )
195
195
testutil .Ok (t , err )
196
196
197
197
for _ , tcase := range []struct {
@@ -361,7 +361,7 @@ func TestPrometheusStore_LabelAPIs(t *testing.T) {
361
361
362
362
promStore , err := NewPrometheusStore (nil , nil , promclient .NewDefaultClient (), u , component .Sidecar , func () labels.Labels {
363
363
return extLset
364
- }, nil , func () string { return version })
364
+ }, nil , func () string { return version }, 0 )
365
365
testutil .Ok (t , err )
366
366
367
367
return promStore
@@ -396,7 +396,7 @@ func TestPrometheusStore_Series_MatchExternalLabel(t *testing.T) {
396
396
397
397
proxy , err := NewPrometheusStore (nil , nil , promclient .NewDefaultClient (), u , component .Sidecar ,
398
398
func () labels.Labels { return labels .FromStrings ("region" , "eu-west" ) },
399
- func () (int64 , int64 ) { return 0 , math .MaxInt64 }, nil )
399
+ func () (int64 , int64 ) { return 0 , math .MaxInt64 }, nil , 0 )
400
400
testutil .Ok (t , err )
401
401
srv := newStoreSeriesServer (ctx )
402
402
@@ -430,6 +430,99 @@ func TestPrometheusStore_Series_MatchExternalLabel(t *testing.T) {
430
430
testutil .Equals (t , 0 , len (srv .SeriesSet ))
431
431
}
432
432
433
+ func TestPrometheusStore_Series_LimitMaxMatchedSeries (t * testing.T ) {
434
+ defer testutil .TolerantVerifyLeak (t )
435
+
436
+ p , err := e2eutil .NewPrometheus ()
437
+ testutil .Ok (t , err )
438
+ defer func () { testutil .Ok (t , p .Stop ()) }()
439
+
440
+ baseT := timestamp .FromTime (time .Now ()) / 1000 * 1000
441
+
442
+ a := p .Appender ()
443
+ _ , err = a .Append (0 , labels .FromStrings ("a" , "b" , "b" , "d" ), baseT + 100 , 1 )
444
+ testutil .Ok (t , err )
445
+ _ , err = a .Append (0 , labels .FromStrings ("a" , "c" , "b" , "d" , "job" , "test" ), baseT + 200 , 2 )
446
+ testutil .Ok (t , err )
447
+ _ , err = a .Append (0 , labels .FromStrings ("a" , "d" , "b" , "d" , "job" , "test" ), baseT + 300 , 3 )
448
+ testutil .Ok (t , err )
449
+ _ , err = a .Append (0 , labels .FromStrings ("b" , "d" , "job" , "test" ), baseT + 400 , 4 )
450
+ testutil .Ok (t , err )
451
+ testutil .Ok (t , a .Commit ())
452
+
453
+ ctx , cancel := context .WithCancel (context .Background ())
454
+ defer cancel ()
455
+
456
+ testutil .Ok (t , p .Start ())
457
+
458
+ u , err := url .Parse (fmt .Sprintf ("http://%s" , p .Addr ()))
459
+ testutil .Ok (t , err )
460
+
461
+ req := & storepb.SeriesRequest {
462
+ SkipChunks : true ,
463
+ Matchers : []storepb.LabelMatcher {
464
+ {Type : storepb .LabelMatcher_EQ , Name : "job" , Value : "test" },
465
+ },
466
+ MinTime : baseT ,
467
+ MaxTime : baseT + 300 ,
468
+ }
469
+
470
+ expected2Series := []storepb.Series {
471
+ {
472
+ Labels : []labelpb.ZLabel {{Name : "a" , Value : "c" }, {Name : "b" , Value : "d" }, {Name : "job" , Value : "test" }, {Name : "region" , Value : "eu-west" }},
473
+ },
474
+ {
475
+ Labels : []labelpb.ZLabel {{Name : "a" , Value : "d" }, {Name : "b" , Value : "d" }, {Name : "job" , Value : "test" }, {Name : "region" , Value : "eu-west" }},
476
+ },
477
+ }
478
+
479
+ for _ , tcase := range []struct {
480
+ req * storepb.SeriesRequest
481
+ expected []storepb.Series
482
+ expectedErr error
483
+ limitMaxMatchedSeries int
484
+ }{
485
+ // limit is not active
486
+ {
487
+ limitMaxMatchedSeries : 0 ,
488
+ req : req ,
489
+ expected : expected2Series ,
490
+ },
491
+ // should return limit error as 'limit < matched series'
492
+ {
493
+ limitMaxMatchedSeries : 1 ,
494
+ req : req ,
495
+ expected : expected2Series ,
496
+ expectedErr : ErrSeriesMatchLimitReached ,
497
+ },
498
+ // should succeed as limit is not reached
499
+ {
500
+ limitMaxMatchedSeries : 2 ,
501
+ req : req ,
502
+ expected : expected2Series ,
503
+ },
504
+ } {
505
+ t .Run ("" , func (t * testing.T ) {
506
+ promStore , err := NewPrometheusStore (nil , nil , promclient .NewDefaultClient (), u , component .Sidecar ,
507
+ func () labels.Labels { return labels .FromStrings ("region" , "eu-west" ) },
508
+ func () (int64 , int64 ) { return math .MinInt64 / 1000 + 62135596801 , math .MaxInt64 / 1000 - 62135596801 }, nil ,
509
+ tcase .limitMaxMatchedSeries )
510
+ testutil .Ok (t , err )
511
+
512
+ srv := newStoreSeriesServer (ctx )
513
+ err = promStore .Series (tcase .req , srv )
514
+ if tcase .expectedErr != nil {
515
+ testutil .NotOk (t , err )
516
+ testutil .Equals (t , tcase .expectedErr .Error (), err .Error ())
517
+ return
518
+ }
519
+ testutil .Ok (t , err )
520
+ testutil .Equals (t , []string (nil ), srv .Warnings )
521
+ testutil .Equals (t , tcase .expected , srv .SeriesSet )
522
+ })
523
+ }
524
+ }
525
+
433
526
func TestPrometheusStore_Info (t * testing.T ) {
434
527
defer testutil .TolerantVerifyLeak (t )
435
528
@@ -438,7 +531,7 @@ func TestPrometheusStore_Info(t *testing.T) {
438
531
439
532
proxy , err := NewPrometheusStore (nil , nil , promclient .NewDefaultClient (), nil , component .Sidecar ,
440
533
func () labels.Labels { return labels .FromStrings ("region" , "eu-west" ) },
441
- func () (int64 , int64 ) { return 123 , 456 }, nil )
534
+ func () (int64 , int64 ) { return 123 , 456 }, nil , 0 )
442
535
testutil .Ok (t , err )
443
536
444
537
resp , err := proxy .Info (ctx , & storepb.InfoRequest {})
@@ -516,7 +609,7 @@ func TestPrometheusStore_Series_SplitSamplesIntoChunksWithMaxSizeOf120(t *testin
516
609
517
610
proxy , err := NewPrometheusStore (nil , nil , promclient .NewDefaultClient (), u , component .Sidecar ,
518
611
func () labels.Labels { return labels .FromStrings ("region" , "eu-west" ) },
519
- func () (int64 , int64 ) { return 0 , math .MaxInt64 }, nil )
612
+ func () (int64 , int64 ) { return 0 , math .MaxInt64 }, nil , 0 )
520
613
testutil .Ok (t , err )
521
614
522
615
// We build chunks only for SAMPLES method. Make sure we ask for SAMPLES only.
0 commit comments