Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 2 additions & 11 deletions engine/engine.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ package engine
import (
"context"
"log/slog"
"maps"
"math"
"runtime"
"slices"
Expand Down Expand Up @@ -142,12 +141,6 @@ func NewWithScanners(opts Opts, scanners engstorage.Scanners) *Engine {
)
}

functions := make(map[string]*parser.Function, len(parser.Functions))
maps.Copy(functions, parser.Functions)
if opts.EnableXFunctions {
maps.Copy(functions, parse.XFunctions)
}

metrics := &engineMetrics{
currentQueries: promauto.With(opts.Reg).NewGauge(
prometheus.GaugeOpts{
Expand Down Expand Up @@ -179,7 +172,6 @@ func NewWithScanners(opts Opts, scanners engstorage.Scanners) *Engine {
}

return &Engine{
functions: functions,
scanners: scanners,
activeQueryTracker: queryTracker,

Expand Down Expand Up @@ -210,7 +202,6 @@ var (
)

type Engine struct {
functions map[string]*parser.Function
scanners engstorage.Scanners
activeQueryTracker promql.QueryTracker

Expand Down Expand Up @@ -238,7 +229,7 @@ func (e *Engine) MakeInstantQuery(ctx context.Context, q storage.Queryable, opts
}
defer e.activeQueryTracker.Delete(idx)

expr, err := parser.NewParser(qs, parser.WithFunctions(e.functions)).ParseExpr()
expr, err := parser.NewParser(parser.Options{}).ParseExpr(qs)
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -336,7 +327,7 @@ func (e *Engine) MakeRangeQuery(ctx context.Context, q storage.Queryable, opts *
}
defer e.activeQueryTracker.Delete(idx)

expr, err := parser.NewParser(qs, parser.WithFunctions(e.functions)).ParseExpr()
expr, err := parser.NewParser(parser.Options{}).ParseExpr(qs)
if err != nil {
return nil, err
}
Expand Down
15 changes: 6 additions & 9 deletions engine/engine_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,6 @@ import (
"github.com/prometheus/prometheus/model/labels"
"github.com/prometheus/prometheus/model/timestamp"
"github.com/prometheus/prometheus/promql"
"github.com/prometheus/prometheus/promql/parser"
"github.com/prometheus/prometheus/promql/promqltest"
"github.com/prometheus/prometheus/storage"
"github.com/prometheus/prometheus/tsdb/chunkenc"
Expand All @@ -52,7 +51,6 @@ import (
)

func TestMain(m *testing.M) {
parser.EnableExperimentalFunctions = true
goleak.VerifyTestMain(m,
// https://github.com/census-instrumentation/opencensus-go/blob/d7677d6af5953e0506ac4c08f349c62b917a443a/stats/view/worker.go#L34
goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"),
Expand All @@ -73,10 +71,6 @@ func (s *skipTest) Run(name string, t func(*testing.T)) bool {
}

func TestPromqlAcceptance(t *testing.T) {
// promql acceptance tests disable experimental functions again
// since we use them in our tests too we need to enable them afterwards again
t.Cleanup(func() { parser.EnableExperimentalFunctions = true })

engine := engine.New(engine.Opts{
EngineOpts: promql.EngineOpts{
Logger: promslog.NewNopLogger(),
Expand Down Expand Up @@ -112,6 +106,7 @@ func TestVectorSelectorWithGaps(t *testing.T) {
}

series := storage.MockSeries(
[]int64{240, 270, 300, 600, 630, 660},
[]int64{240, 270, 300, 600, 630, 660},
[]float64{1, 2, 3, 4, 5, 6},
[]string{labels.MetricName, "foo"},
Expand Down Expand Up @@ -5653,7 +5648,8 @@ func (m *mockIterator) AtFloatHistogram(_ *histogram.FloatHistogram) (int64, *hi
return 0, nil
}

func (m *mockIterator) AtT() int64 { return m.timestamps[m.i] }
func (m *mockIterator) AtT() int64 { return m.timestamps[m.i] }
func (m *mockIterator) AtST() int64 { return m.timestamps[m.i] }

func (m *mockIterator) Err() error { return nil }

Expand All @@ -5676,7 +5672,7 @@ func (s *slowSeriesSet) Next() bool {
}

func (s slowSeriesSet) At() storage.Series {
return storage.MockSeries([]int64{0}, []float64{0}, nil)
return storage.MockSeries([]int64{0}, []int64{0}, []float64{0}, nil)
}

func (s slowSeriesSet) Err() error { return nil }
Expand Down Expand Up @@ -5745,7 +5741,8 @@ func (d *slowIterator) Seek(t int64) chunkenc.ValueType {
d.ts = t
return chunkenc.ValFloat
}
func (d *slowIterator) Err() error { return nil }
func (d *slowIterator) AtST() int64 { return d.ts }
func (d *slowIterator) Err() error { return nil }

type mockRuntimeErr struct{}

Expand Down
5 changes: 5 additions & 0 deletions engine/explain_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ func TestQueryExplain(t *testing.T) {
t.Parallel()
opts := promql.EngineOpts{Timeout: 1 * time.Hour}
series := storage.MockSeries(
[]int64{240, 270, 300, 600, 630, 660},
[]int64{240, 270, 300, 600, 630, 660},
[]float64{1, 2, 3, 4, 5, 6},
[]string{labels.MetricName, "foo"},
Expand Down Expand Up @@ -167,21 +168,25 @@ func TestQueryAnalyze(t *testing.T) {
opts := promql.EngineOpts{Timeout: 1 * time.Hour}
seriesList := []storage.Series{
storage.MockSeries(
[]int64{240, 270, 300, 600, 630, 660},
[]int64{240, 270, 300, 600, 630, 660},
[]float64{1, 2, 3, 4, 5, 6},
[]string{labels.MetricName, "foo"},
),
storage.MockSeries(
[]int64{240, 270, 300, 600, 630, 660},
[]int64{240, 270, 300, 600, 630, 660},
[]float64{1, 2, 3, 4, 5, 6},
[]string{labels.MetricName, "http_requests_total", "pod", "nginx-1"},
),
storage.MockSeries(
[]int64{240, 270, 300, 600, 630, 660},
[]int64{240, 270, 300, 600, 630, 660},
[]float64{1, 2, 3, 4, 5, 6},
[]string{labels.MetricName, "http_requests_total", "pod", "nginx-2"},
),
storage.MockSeries(
[]int64{240, 270, 300, 600, 630, 660},
[]int64{240, 270, 300, 600, 630, 660},
[]float64{1, 2, 3, 4, 5, 6},
[]string{labels.MetricName, "http_requests_total", "pod", "nginx-3"},
Expand Down
10 changes: 0 additions & 10 deletions engine/testdata/fuzz/FuzzNativeHistogramQuery/04c926f3bdeff7b0

This file was deleted.

10 changes: 0 additions & 10 deletions engine/testdata/fuzz/FuzzNativeHistogramQuery/07a2aa0f5786055d

This file was deleted.

10 changes: 0 additions & 10 deletions engine/testdata/fuzz/FuzzNativeHistogramQuery/313842d99fde393f

This file was deleted.

10 changes: 0 additions & 10 deletions engine/testdata/fuzz/FuzzNativeHistogramQuery/531dcf7d644da227

This file was deleted.

10 changes: 0 additions & 10 deletions engine/testdata/fuzz/FuzzNativeHistogramQuery/aea9c02480c8be8a

This file was deleted.

10 changes: 0 additions & 10 deletions engine/testdata/fuzz/FuzzNativeHistogramQuery/b8509c2646902b89

This file was deleted.

10 changes: 0 additions & 10 deletions engine/testdata/fuzz/FuzzNativeHistogramQuery/fccf25699b4fc3f7

This file was deleted.

4 changes: 2 additions & 2 deletions execution/function/histogram.go
Original file line number Diff line number Diff line change
Expand Up @@ -281,10 +281,10 @@ func (o *histogramOperator) processInputSeries(ctx context.Context, vectors []mo
buf[n].AppendSample(uint64(i), math.NaN())
continue
}
v, forcedMonotonicity, _ := promql.BucketQuantile(o.scalar1Points[stepIndex], stepBuckets)
v, forcedMonotonicity, _, minBucket, maxBucket, maxDiff := promql.BucketQuantile(o.scalar1Points[stepIndex], stepBuckets)
buf[n].AppendSample(uint64(i), v)
if forcedMonotonicity {
warnings.AddToContext(annotations.NewHistogramQuantileForcedMonotonicityInfo(o.inputSeriesNames[i], posrange.PositionRange{}), ctx)
warnings.AddToContext(annotations.NewHistogramQuantileForcedMonotonicityInfo(o.inputSeriesNames[i], posrange.PositionRange{}, vector.T, minBucket, maxBucket, maxDiff), ctx)
}
case "histogram_fraction":
// BucketFraction handles single bucket and other edge cases properly.
Expand Down
6 changes: 6 additions & 0 deletions execution/parse/functions.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,12 @@ import (
"github.com/prometheus/prometheus/promql/parser"
)

func init() {
for name, fn := range XFunctions {
parser.Functions[name] = fn
}
}

var XFunctions = map[string]*parser.Function{
"xdelta": {
Name: "xdelta",
Expand Down
Loading