@@ -1788,62 +1788,77 @@ func getHistogram(t *testing.T, reg *prometheus.Registry, name string) *dto.Hist
1788
1788
}
1789
1789
1790
1790
func TestActiveQueryTracker (t * testing.T ) {
1791
- for _ , shouldSucceed := range []bool {true , false } {
1792
- t .Run (fmt .Sprintf ("successful query = %v" , shouldSucceed ), func (t * testing.T ) {
1793
- opts := NewTestEngineOpts ()
1794
- tracker := & testQueryTracker {}
1795
- opts .CommonOpts .ActiveQueryTracker = tracker
1796
- engine , err := NewEngine (opts , NewStaticQueryLimitsProvider (0 ), stats .NewQueryMetrics (nil ), nil , log .NewNopLogger ())
1797
- require .NoError (t , err )
1798
-
1799
- innerStorage := promqltest .LoadedStorage (t , "" )
1800
- t .Cleanup (func () { require .NoError (t , innerStorage .Close ()) })
1801
-
1802
- // Use a fake queryable as a way to check that the query is recorded as active while the query is in progress.
1803
- queryTrackingTestingQueryable := & activeQueryTrackerQueryable {
1804
- innerStorage : innerStorage ,
1805
- tracker : tracker ,
1806
- }
1807
-
1808
- if ! shouldSucceed {
1809
- queryTrackingTestingQueryable .err = errors .New ("something went wrong inside the query" )
1810
- }
1811
-
1812
- queryTypes := map [string ]func (expr string ) (promql.Query , error ){
1813
- "range" : func (expr string ) (promql.Query , error ) {
1814
- return engine .NewRangeQuery (context .Background (), queryTrackingTestingQueryable , nil , expr , timestamp .Time (0 ), timestamp .Time (0 ).Add (time .Hour ), time .Minute )
1815
- },
1816
- "instant" : func (expr string ) (promql.Query , error ) {
1817
- return engine .NewInstantQuery (context .Background (), queryTrackingTestingQueryable , nil , expr , timestamp .Time (0 ))
1818
- },
1819
- }
1820
-
1821
- for queryType , createQuery := range queryTypes {
1822
- t .Run (queryType + " query" , func (t * testing.T ) {
1823
- expr := "test_" + queryType + "_query"
1824
- queryTrackingTestingQueryable .activeQueryAtQueryTime = trackedQuery {}
1825
-
1826
- q , err := createQuery (expr )
1791
+ for _ , usePlanner := range []bool {true , false } {
1792
+ t .Run (fmt .Sprintf ("use planner = %v" , usePlanner ), func (t * testing.T ) {
1793
+ for _ , shouldSucceed := range []bool {true , false } {
1794
+ t .Run (fmt .Sprintf ("successful query = %v" , shouldSucceed ), func (t * testing.T ) {
1795
+ opts := NewTestEngineOpts ()
1796
+ opts .UseQueryPlanning = usePlanner
1797
+ tracker := & testQueryTracker {}
1798
+ opts .CommonOpts .ActiveQueryTracker = tracker
1799
+ planner := NewQueryPlanner (opts )
1800
+ engine , err := NewEngine (opts , NewStaticQueryLimitsProvider (0 ), stats .NewQueryMetrics (nil ), planner , log .NewNopLogger ())
1827
1801
require .NoError (t , err )
1828
- defer q .Close ()
1829
1802
1830
- res := q .Exec (context .Background ())
1803
+ innerStorage := promqltest .LoadedStorage (t , "" )
1804
+ t .Cleanup (func () { require .NoError (t , innerStorage .Close ()) })
1831
1805
1832
- if shouldSucceed {
1833
- require . NoError ( t , res . Err )
1834
- } else {
1835
- require . EqualError ( t , res . Err , "something went wrong inside the query" )
1806
+ // Use a fake queryable as a way to check that the query is recorded as active while the query is in progress.
1807
+ queryTrackingTestingQueryable := & activeQueryTrackerQueryable {
1808
+ innerStorage : innerStorage ,
1809
+ tracker : tracker ,
1836
1810
}
1837
1811
1838
- // Check that the query was active in the query tracker while the query was executing.
1839
- require . Equal ( t , expr , queryTrackingTestingQueryable . activeQueryAtQueryTime . expr )
1840
- require . False ( t , queryTrackingTestingQueryable . activeQueryAtQueryTime . deleted )
1812
+ if ! shouldSucceed {
1813
+ queryTrackingTestingQueryable . err = errors . New ( "something went wrong inside the query" )
1814
+ }
1841
1815
1842
- // Check that the query has now been marked as deleted in the query tracker.
1843
- require .NotEmpty (t , tracker .queries )
1844
- trackedQuery := tracker .queries [len (tracker .queries )- 1 ]
1845
- require .Equal (t , expr , trackedQuery .expr )
1846
- require .Equal (t , true , trackedQuery .deleted )
1816
+ queryTypes := map [string ]func (expr string ) (promql.Query , error ){
1817
+ "range" : func (expr string ) (promql.Query , error ) {
1818
+ return engine .NewRangeQuery (context .Background (), queryTrackingTestingQueryable , nil , expr , timestamp .Time (0 ), timestamp .Time (0 ).Add (time .Hour ), time .Minute )
1819
+ },
1820
+ "instant" : func (expr string ) (promql.Query , error ) {
1821
+ return engine .NewInstantQuery (context .Background (), queryTrackingTestingQueryable , nil , expr , timestamp .Time (0 ))
1822
+ },
1823
+ }
1824
+
1825
+ for queryType , createQuery := range queryTypes {
1826
+ t .Run (queryType + " query" , func (t * testing.T ) {
1827
+ expr := "test_" + queryType + "_query"
1828
+ queryTrackingTestingQueryable .activeQueryAtQueryTime = trackedQuery {}
1829
+ tracker .Clear ()
1830
+
1831
+ q , err := createQuery (expr )
1832
+ require .NoError (t , err )
1833
+ defer q .Close ()
1834
+
1835
+ if usePlanner {
1836
+ expectedPlanningActivities := []trackedQuery {
1837
+ {expr : expr + " # (planning)" , deleted : true },
1838
+ {expr : expr + " # (materialization)" , deleted : true },
1839
+ }
1840
+ require .Equal (t , expectedPlanningActivities , tracker .queries )
1841
+ }
1842
+
1843
+ res := q .Exec (context .Background ())
1844
+
1845
+ if shouldSucceed {
1846
+ require .NoError (t , res .Err )
1847
+ } else {
1848
+ require .EqualError (t , res .Err , "something went wrong inside the query" )
1849
+ }
1850
+
1851
+ // Check that the query was active in the query tracker while the query was executing.
1852
+ require .Equal (t , expr , queryTrackingTestingQueryable .activeQueryAtQueryTime .expr )
1853
+ require .False (t , queryTrackingTestingQueryable .activeQueryAtQueryTime .deleted )
1854
+
1855
+ // Check that the query has now been marked as deleted in the query tracker.
1856
+ require .NotEmpty (t , tracker .queries )
1857
+ trackedQuery := tracker .queries [len (tracker .queries )- 1 ]
1858
+ require .Equal (t , expr , trackedQuery .expr )
1859
+ require .Equal (t , true , trackedQuery .deleted )
1860
+ })
1861
+ }
1847
1862
})
1848
1863
}
1849
1864
})
@@ -1880,6 +1895,10 @@ func (qt *testQueryTracker) Close() error {
1880
1895
return nil
1881
1896
}
1882
1897
1898
+ func (qt * testQueryTracker ) Clear () {
1899
+ qt .queries = nil
1900
+ }
1901
+
1883
1902
type activeQueryTrackerQueryable struct {
1884
1903
tracker * testQueryTracker
1885
1904
0 commit comments