@@ -22,9 +22,12 @@ import (
22
22
"github.com/prometheus/prometheus/promql"
23
23
"github.com/prometheus/prometheus/storage"
24
24
"github.com/prometheus/prometheus/tsdb/chunkenc"
25
+ v1 "github.com/prometheus/prometheus/web/api/v1"
25
26
"github.com/stretchr/testify/assert"
26
27
"github.com/stretchr/testify/mock"
27
28
"github.com/stretchr/testify/require"
29
+ "github.com/thanos-community/promql-engine/engine"
30
+ "github.com/thanos-community/promql-engine/logicalplan"
28
31
"github.com/thanos-io/thanos/pkg/store/hintspb"
29
32
"github.com/thanos-io/thanos/pkg/store/labelpb"
30
33
"github.com/thanos-io/thanos/pkg/store/storepb"
@@ -1319,6 +1322,13 @@ func TestBlocksStoreQuerier_SelectSortedShouldHonorQueryStoreAfter(t *testing.T)
1319
1322
}
1320
1323
1321
1324
func TestBlocksStoreQuerier_PromQLExecution (t * testing.T ) {
1325
+ logger := log .NewNopLogger ()
1326
+ opts := promql.EngineOpts {
1327
+ Logger : logger ,
1328
+ Timeout : 10 * time .Second ,
1329
+ MaxSamples : 1e6 ,
1330
+ }
1331
+
1322
1332
block1 := ulid .MustNew (1 , nil )
1323
1333
block2 := ulid .MustNew (2 , nil )
1324
1334
series1 := []labelpb.ZLabel {{Name : "__name__" , Value : "metric_1" }}
@@ -1341,103 +1351,109 @@ func TestBlocksStoreQuerier_PromQLExecution(t *testing.T) {
1341
1351
{T : 1589760015000 , V : 2 },
1342
1352
{T : 1589760030000 , V : 2 },
1343
1353
}
1354
+ for _ , thanosEngine := range []bool {false , true } {
1355
+ var queryEngine v1.QueryEngine
1356
+ if thanosEngine {
1357
+ queryEngine = engine .New (engine.Opts {
1358
+ EngineOpts : opts ,
1359
+ LogicalOptimizers : logicalplan .AllOptimizers ,
1360
+ })
1361
+ } else {
1362
+ queryEngine = promql .NewEngine (opts )
1363
+ }
1344
1364
1345
- // Mock the finder to simulate we need to query two blocks.
1346
- finder := & blocksFinderMock {
1347
- Service : services .NewIdleService (nil , nil ),
1348
- }
1349
- finder .On ("GetBlocks" , mock .Anything , "user-1" , mock .Anything , mock .Anything ).Return (bucketindex.Blocks {
1350
- {ID : block1 },
1351
- {ID : block2 },
1352
- }, map [ulid.ULID ]* bucketindex.BlockDeletionMark (nil ), error (nil ))
1353
-
1354
- // Mock the store to simulate each block is queried from a different store-gateway.
1355
- gateway1 := & storeGatewayClientMock {remoteAddr : "1.1.1.1" , mockedSeriesResponses : []* storepb.SeriesResponse {
1356
- {
1357
- Result : & storepb.SeriesResponse_Series {
1358
- Series : & storepb.Series {
1359
- Labels : series1 ,
1360
- Chunks : []storepb.AggrChunk {
1361
- createAggrChunkWithSamples (series1Samples [:3 ]... ), // First half.
1365
+ t .Run (fmt .Sprintf ("thanos engine enabled=%t" , thanosEngine ), func (t * testing.T ) {
1366
+ // Mock the finder to simulate we need to query two blocks.
1367
+ finder := & blocksFinderMock {
1368
+ Service : services .NewIdleService (nil , nil ),
1369
+ }
1370
+ finder .On ("GetBlocks" , mock .Anything , "user-1" , mock .Anything , mock .Anything ).Return (bucketindex.Blocks {
1371
+ {ID : block1 },
1372
+ {ID : block2 },
1373
+ }, map [ulid.ULID ]* bucketindex.BlockDeletionMark (nil ), error (nil ))
1374
+
1375
+ // Mock the store to simulate each block is queried from a different store-gateway.
1376
+ gateway1 := & storeGatewayClientMock {remoteAddr : "1.1.1.1" , mockedSeriesResponses : []* storepb.SeriesResponse {
1377
+ {
1378
+ Result : & storepb.SeriesResponse_Series {
1379
+ Series : & storepb.Series {
1380
+ Labels : series1 ,
1381
+ Chunks : []storepb.AggrChunk {
1382
+ createAggrChunkWithSamples (series1Samples [:3 ]... ), // First half.
1383
+ },
1384
+ },
1362
1385
},
1363
- },
1364
- },
1365
- }, {
1366
- Result : & storepb. SeriesResponse_Series {
1367
- Series : & storepb.Series {
1368
- Labels : series2 ,
1369
- Chunks : []storepb. AggrChunk {
1370
- createAggrChunkWithSamples ( series2Samples [: 3 ] ... ) ,
1386
+ }, {
1387
+ Result : & storepb. SeriesResponse_Series {
1388
+ Series : & storepb. Series {
1389
+ Labels : series2 ,
1390
+ Chunks : [] storepb.AggrChunk {
1391
+ createAggrChunkWithSamples ( series2Samples [: 3 ] ... ) ,
1392
+ },
1393
+ } ,
1371
1394
},
1372
1395
},
1373
- },
1374
- },
1375
- mockHintsResponse (block1 ),
1376
- }}
1377
-
1378
- gateway2 := & storeGatewayClientMock {remoteAddr : "2.2.2.2" , mockedSeriesResponses : []* storepb.SeriesResponse {
1379
- {
1380
- Result : & storepb.SeriesResponse_Series {
1381
- Series : & storepb.Series {
1382
- Labels : series1 ,
1383
- Chunks : []storepb.AggrChunk {
1384
- createAggrChunkWithSamples (series1Samples [3 :]... ), // Second half.
1396
+ mockHintsResponse (block1 ),
1397
+ }}
1398
+
1399
+ gateway2 := & storeGatewayClientMock {remoteAddr : "2.2.2.2" , mockedSeriesResponses : []* storepb.SeriesResponse {
1400
+ {
1401
+ Result : & storepb.SeriesResponse_Series {
1402
+ Series : & storepb.Series {
1403
+ Labels : series1 ,
1404
+ Chunks : []storepb.AggrChunk {
1405
+ createAggrChunkWithSamples (series1Samples [3 :]... ), // Second half.
1406
+ },
1407
+ },
1408
+ },
1409
+ }, {
1410
+ Result : & storepb.SeriesResponse_Series {
1411
+ Series : & storepb.Series {
1412
+ Labels : series2 ,
1413
+ Chunks : []storepb.AggrChunk {
1414
+ createAggrChunkWithSamples (series2Samples [3 :]... ),
1415
+ },
1416
+ },
1385
1417
},
1386
1418
},
1387
- },
1388
- }, {
1389
- Result : & storepb.SeriesResponse_Series {
1390
- Series : & storepb.Series {
1391
- Labels : series2 ,
1392
- Chunks : []storepb.AggrChunk {
1393
- createAggrChunkWithSamples (series2Samples [3 :]... ),
1419
+ mockHintsResponse (block2 ),
1420
+ }}
1421
+
1422
+ stores := & blocksStoreSetMock {
1423
+ Service : services .NewIdleService (nil , nil ),
1424
+ mockedResponses : []interface {}{
1425
+ map [BlocksStoreClient ][]ulid.ULID {
1426
+ gateway1 : {block1 },
1427
+ gateway2 : {block2 },
1394
1428
},
1395
1429
},
1396
- },
1397
- },
1398
- mockHintsResponse (block2 ),
1399
- }}
1430
+ }
1400
1431
1401
- stores := & blocksStoreSetMock {
1402
- Service : services .NewIdleService (nil , nil ),
1403
- mockedResponses : []interface {}{
1404
- map [BlocksStoreClient ][]ulid.ULID {
1405
- gateway1 : {block1 },
1406
- gateway2 : {block2 },
1407
- },
1408
- },
1432
+ // Instance the querier that will be executed to run the query.
1433
+ queryable , err := NewBlocksStoreQueryable (stores , finder , NewBlocksConsistencyChecker (0 , 0 , logger , nil ), & blocksStoreLimitsMock {}, 0 , logger , nil )
1434
+ require .NoError (t , err )
1435
+ require .NoError (t , services .StartAndAwaitRunning (context .Background (), queryable ))
1436
+ defer services .StopAndAwaitTerminated (context .Background (), queryable ) // nolint:errcheck
1437
+
1438
+ // Run a query.
1439
+ q , err := queryEngine .NewRangeQuery (queryable , nil , `{__name__=~"metric.*"}` , time .Unix (1589759955 , 0 ), time .Unix (1589760030 , 0 ), 15 * time .Second )
1440
+ require .NoError (t , err )
1441
+
1442
+ ctx := user .InjectOrgID (context .Background (), "user-1" )
1443
+ res := q .Exec (ctx )
1444
+ require .NoError (t , err )
1445
+ require .NoError (t , res .Err )
1446
+
1447
+ matrix , err := res .Matrix ()
1448
+ require .NoError (t , err )
1449
+ require .Len (t , matrix , 2 )
1450
+
1451
+ assert .Equal (t , labelpb .ZLabelsToPromLabels (series1 ), matrix [0 ].Metric )
1452
+ assert .Equal (t , labelpb .ZLabelsToPromLabels (series2 ), matrix [1 ].Metric )
1453
+ assert .Equal (t , series1Samples , matrix [0 ].Points )
1454
+ assert .Equal (t , series2Samples , matrix [1 ].Points )
1455
+ })
1409
1456
}
1410
-
1411
- // Instance the querier that will be executed to run the query.
1412
- logger := log .NewNopLogger ()
1413
- queryable , err := NewBlocksStoreQueryable (stores , finder , NewBlocksConsistencyChecker (0 , 0 , logger , nil ), & blocksStoreLimitsMock {}, 0 , logger , nil )
1414
- require .NoError (t , err )
1415
- require .NoError (t , services .StartAndAwaitRunning (context .Background (), queryable ))
1416
- defer services .StopAndAwaitTerminated (context .Background (), queryable ) // nolint:errcheck
1417
-
1418
- engine := promql .NewEngine (promql.EngineOpts {
1419
- Logger : logger ,
1420
- Timeout : 10 * time .Second ,
1421
- MaxSamples : 1e6 ,
1422
- })
1423
-
1424
- // Run a query.
1425
- q , err := engine .NewRangeQuery (queryable , nil , `{__name__=~"metric.*"}` , time .Unix (1589759955 , 0 ), time .Unix (1589760030 , 0 ), 15 * time .Second )
1426
- require .NoError (t , err )
1427
-
1428
- ctx := user .InjectOrgID (context .Background (), "user-1" )
1429
- res := q .Exec (ctx )
1430
- require .NoError (t , err )
1431
- require .NoError (t , res .Err )
1432
-
1433
- matrix , err := res .Matrix ()
1434
- require .NoError (t , err )
1435
- require .Len (t , matrix , 2 )
1436
-
1437
- assert .Equal (t , labelpb .ZLabelsToPromLabels (series1 ), matrix [0 ].Metric )
1438
- assert .Equal (t , labelpb .ZLabelsToPromLabels (series2 ), matrix [1 ].Metric )
1439
- assert .Equal (t , series1Samples , matrix [0 ].Points )
1440
- assert .Equal (t , series2Samples , matrix [1 ].Points )
1441
1457
}
1442
1458
1443
1459
type blocksStoreSetMock struct {
0 commit comments