@@ -1450,3 +1450,124 @@ func TestQuerierDistributedExecution(t *testing.T) {
14501450 require .NoError (t , err )
14511451 require .Equal (t , expectedVector2 , val .(model.Vector ))
14521452}
1453+
1454+ func TestDistributedExecResults (t * testing.T ) {
1455+ // e2e test setup
1456+ s , err := e2e .NewScenario (networkName )
1457+ require .NoError (t , err )
1458+ defer s .Close ()
1459+
1460+ // initialize the flags
1461+ flags := mergeFlags (
1462+ BlocksStorageFlags (),
1463+ map [string ]string {
1464+ "-blocks-storage.tsdb.block-ranges-period" : (5 * time .Second ).String (),
1465+ "-blocks-storage.tsdb.ship-interval" : "1s" ,
1466+ "-blocks-storage.tsdb.retention-period" : ((5 * time .Second * 2 ) - 1 ).String (),
1467+ "-querier.thanos-engine" : "true" ,
1468+ "-querier.distributed-exec-enabled" : "true" ,
1469+ },
1470+ )
1471+
1472+ flags2 := mergeFlags (
1473+ BlocksStorageFlags (),
1474+ map [string ]string {
1475+ "-blocks-storage.tsdb.block-ranges-period" : (5 * time .Second ).String (),
1476+ "-blocks-storage.tsdb.ship-interval" : "1s" ,
1477+ "-blocks-storage.tsdb.retention-period" : ((5 * time .Second * 2 ) - 1 ).String (),
1478+ "-querier.thanos-engine" : "true" ,
1479+ "-querier.distributed-exec-enabled" : "false" ,
1480+ },
1481+ )
1482+
1483+ minio := e2edb .NewMinio (9000 , flags ["-blocks-storage.s3.bucket-name" ])
1484+ consul := e2edb .NewConsul ()
1485+ require .NoError (t , s .StartAndWaitReady (consul , minio ))
1486+
1487+ // START SERVICE 1
1488+ distributor := e2ecortex .NewDistributor ("distributor" , e2ecortex .RingStoreConsul , consul .NetworkHTTPEndpoint (), flags , "" )
1489+ ingester := e2ecortex .NewIngester ("ingester" , e2ecortex .RingStoreConsul , consul .NetworkHTTPEndpoint (), flags , "" )
1490+ queryScheduler := e2ecortex .NewQueryScheduler ("query-scheduler" , flags , "" )
1491+ storeGateway := e2ecortex .NewStoreGateway ("store-gateway" , e2ecortex .RingStoreConsul , consul .NetworkHTTPEndpoint (), flags , "" )
1492+ require .NoError (t , s .StartAndWaitReady (queryScheduler , distributor , ingester , storeGateway ))
1493+ flags = mergeFlags (flags , map [string ]string {
1494+ "-querier.store-gateway-addresses" : strings .Join ([]string {storeGateway .NetworkGRPCEndpoint ()}, "," ),
1495+ })
1496+ queryFrontend := e2ecortex .NewQueryFrontend ("query-frontend" , mergeFlags (flags , map [string ]string {
1497+ "-frontend.scheduler-address" : queryScheduler .NetworkGRPCEndpoint (),
1498+ }), "" )
1499+ require .NoError (t , s .Start (queryFrontend ))
1500+ querier := e2ecortex .NewQuerier ("querier" , e2ecortex .RingStoreConsul , consul .NetworkHTTPEndpoint (), mergeFlags (flags , map [string ]string {
1501+ "-querier.scheduler-address" : queryScheduler .NetworkGRPCEndpoint (),
1502+ }), "" )
1503+ require .NoError (t , s .StartAndWaitReady (querier ))
1504+
1505+ require .NoError (t , distributor .WaitSumMetrics (e2e .Equals (512 ), "cortex_ring_tokens_total" ))
1506+ require .NoError (t , querier .WaitSumMetrics (e2e .Equals (2 * 512 ), "cortex_ring_tokens_total" ))
1507+
1508+ c , err := e2ecortex .NewClient (distributor .HTTPEndpoint (), queryFrontend .HTTPEndpoint (), "" , "" , "user-1" )
1509+ require .NoError (t , err )
1510+
1511+ // START SERVICE 2
1512+ distributor2 := e2ecortex .NewDistributor ("distributor" , e2ecortex .RingStoreConsul , consul .NetworkHTTPEndpoint (), flags2 , "" )
1513+ ingester2 := e2ecortex .NewIngester ("ingester" , e2ecortex .RingStoreConsul , consul .NetworkHTTPEndpoint (), flags2 , "" )
1514+ queryScheduler2 := e2ecortex .NewQueryScheduler ("query-scheduler" , flags2 , "" )
1515+ storeGateway2 := e2ecortex .NewStoreGateway ("store-gateway" , e2ecortex .RingStoreConsul , consul .NetworkHTTPEndpoint (), flags , "" )
1516+ require .NoError (t , s .StartAndWaitReady (queryScheduler2 , distributor2 , ingester2 , storeGateway2 ))
1517+ flags2 = mergeFlags (flags2 , map [string ]string {
1518+ "-querier.store-gateway-addresses" : strings .Join ([]string {storeGateway2 .NetworkGRPCEndpoint ()}, "," ),
1519+ })
1520+ queryFrontend2 := e2ecortex .NewQueryFrontend ("query-frontend" , mergeFlags (flags2 , map [string ]string {
1521+ "-frontend.scheduler-address" : queryScheduler2 .NetworkGRPCEndpoint (),
1522+ }), "" )
1523+ require .NoError (t , s .Start (queryFrontend2 ))
1524+ querier2 := e2ecortex .NewQuerier ("querier" , e2ecortex .RingStoreConsul , consul .NetworkHTTPEndpoint (), mergeFlags (flags2 , map [string ]string {
1525+ "-querier.scheduler-address" : queryScheduler2 .NetworkGRPCEndpoint (),
1526+ }), "" )
1527+ require .NoError (t , s .StartAndWaitReady (querier2 ))
1528+ require .NoError (t , distributor2 .WaitSumMetrics (e2e .Equals (512 ), "cortex_ring_tokens_total" ))
1529+ require .NoError (t , querier2 .WaitSumMetrics (e2e .Equals (2 * 512 ), "cortex_ring_tokens_total" ))
1530+ c2 , err := e2ecortex .NewClient (distributor .HTTPEndpoint (), queryFrontend2 .HTTPEndpoint (), "" , "" , "user-2" )
1531+ require .NoError (t , err )
1532+
1533+ // INJECT DATA
1534+ series1Timestamp := time .Now ()
1535+ series2Timestamp := series1Timestamp
1536+ series1 , expectedVector1 := generateSeries ("series_1" , series1Timestamp , prompb.Label {Name : "series_1" , Value : "series_1" })
1537+ series2 , expectedVector2 := generateSeries ("series_2" , series2Timestamp , prompb.Label {Name : "series_2" , Value : "series_2" })
1538+
1539+ res , err := c .Push (series1 )
1540+ require .NoError (t , err )
1541+ require .Equal (t , 200 , res .StatusCode )
1542+ res , err = c2 .Push (series1 )
1543+ require .NoError (t , err )
1544+ require .Equal (t , 200 , res .StatusCode )
1545+
1546+ res , err = c .Push (series2 )
1547+ require .NoError (t , err )
1548+ require .Equal (t , 200 , res .StatusCode )
1549+ res , err = c2 .Push (series2 )
1550+ require .NoError (t , err )
1551+ require .Equal (t , 200 , res .StatusCode )
1552+
1553+ var val model.Value
1554+ val , err = c .Query ("series_1" , series1Timestamp )
1555+ require .NoError (t , err )
1556+ require .Equal (t , expectedVector1 , val .(model.Vector ))
1557+ val , err = c .Query ("series_2" , series2Timestamp )
1558+ require .NoError (t , err )
1559+ require .Equal (t , expectedVector2 , val .(model.Vector ))
1560+
1561+ val , err = c2 .Query ("series_1" , series1Timestamp )
1562+ require .NoError (t , err )
1563+ require .Equal (t , expectedVector1 , val .(model.Vector ))
1564+ val , err = c2 .Query ("series_2" , series2Timestamp )
1565+ require .NoError (t , err )
1566+ require .Equal (t , expectedVector2 , val .(model.Vector ))
1567+
1568+ val , err = c .Query ("sum(series_1)+sum(series_2)" , series1Timestamp )
1569+ require .NoError (t , err )
1570+ val_distributed , err := c2 .Query ("sum(series_1)+sum(series_2)" , series1Timestamp )
1571+ require .NoError (t , err )
1572+ require .Equal (t , val , val_distributed )
1573+ }
0 commit comments