Skip to content

Commit 54d2b63

Browse files
authored
update function signature to use v1.QueryEngine rather than promql.Engine (#4920)
Signed-off-by: Ben Ye <[email protected]> Signed-off-by: Ben Ye <[email protected]>
1 parent fdf1563 commit 54d2b63

File tree

4 files changed

+31
-15
lines changed

4 files changed

+31
-15
lines changed

pkg/api/handlers.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ import (
1616
dto "github.com/prometheus/client_model/go"
1717
"github.com/prometheus/common/route"
1818
"github.com/prometheus/prometheus/config"
19-
"github.com/prometheus/prometheus/promql"
2019
"github.com/prometheus/prometheus/storage"
2120
v1 "github.com/prometheus/prometheus/web/api/v1"
2221
"github.com/weaveworks/common/instrument"
@@ -158,7 +157,7 @@ func NewQuerierHandler(
158157
cfg Config,
159158
queryable storage.SampleAndChunkQueryable,
160159
exemplarQueryable storage.ExemplarQueryable,
161-
engine *promql.Engine,
160+
engine v1.QueryEngine,
162161
distributor Distributor,
163162
tombstonesLoader purger.TombstonesLoader,
164163
reg prometheus.Registerer,

pkg/cortex/cortex.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ import (
1414
"github.com/go-kit/log/level"
1515
"github.com/pkg/errors"
1616
"github.com/prometheus/client_golang/prometheus"
17-
"github.com/prometheus/prometheus/promql"
1817
prom_storage "github.com/prometheus/prometheus/storage"
18+
v1 "github.com/prometheus/prometheus/web/api/v1"
1919
"github.com/weaveworks/common/server"
2020
"github.com/weaveworks/common/signals"
2121
"google.golang.org/grpc/health/grpc_health_v1"
@@ -303,7 +303,7 @@ type Cortex struct {
303303
TombstonesLoader purger.TombstonesLoader
304304
QuerierQueryable prom_storage.SampleAndChunkQueryable
305305
ExemplarQueryable prom_storage.ExemplarQueryable
306-
QuerierEngine *promql.Engine
306+
QuerierEngine v1.QueryEngine
307307
QueryFrontendTripperware tripperware.Tripperware
308308

309309
Ruler *ruler.Ruler

pkg/querier/querier.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,19 +9,19 @@ import (
99
"sync"
1010
"time"
1111

12-
"github.com/cortexproject/cortex/pkg/ingester/client"
13-
1412
"github.com/go-kit/log"
1513
"github.com/go-kit/log/level"
1614
"github.com/prometheus/client_golang/prometheus"
1715
"github.com/prometheus/common/model"
1816
"github.com/prometheus/prometheus/model/labels"
1917
"github.com/prometheus/prometheus/promql"
2018
"github.com/prometheus/prometheus/storage"
19+
v1 "github.com/prometheus/prometheus/web/api/v1"
2120
"github.com/thanos-io/thanos/pkg/strutil"
2221
"golang.org/x/sync/errgroup"
2322

2423
"github.com/cortexproject/cortex/pkg/chunk"
24+
"github.com/cortexproject/cortex/pkg/ingester/client"
2525
"github.com/cortexproject/cortex/pkg/purger"
2626
"github.com/cortexproject/cortex/pkg/querier/batch"
2727
"github.com/cortexproject/cortex/pkg/querier/iterators"
@@ -139,7 +139,7 @@ func getChunksIteratorFunction(cfg Config) chunkIteratorFunc {
139139
}
140140

141141
// New builds a queryable and promql engine.
142-
func New(cfg Config, limits *validation.Overrides, distributor Distributor, stores []QueryableWithFilter, tombstonesLoader purger.TombstonesLoader, reg prometheus.Registerer, logger log.Logger) (storage.SampleAndChunkQueryable, storage.ExemplarQueryable, *promql.Engine) {
142+
func New(cfg Config, limits *validation.Overrides, distributor Distributor, stores []QueryableWithFilter, tombstonesLoader purger.TombstonesLoader, reg prometheus.Registerer, logger log.Logger) (storage.SampleAndChunkQueryable, storage.ExemplarQueryable, v1.QueryEngine) {
143143
iteratorFunc := getChunksIteratorFunction(cfg)
144144

145145
distributorQueryable := newDistributorQueryable(distributor, cfg.IngesterStreaming, cfg.IngesterMetadataStreaming, iteratorFunc, cfg.QueryIngestersWithin)

pkg/ruler/compat.go

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import (
1717
"github.com/prometheus/prometheus/promql"
1818
"github.com/prometheus/prometheus/rules"
1919
"github.com/prometheus/prometheus/storage"
20+
v1 "github.com/prometheus/prometheus/web/api/v1"
2021
"github.com/weaveworks/common/httpgrpc"
2122
"github.com/weaveworks/common/user"
2223

@@ -138,15 +139,31 @@ type RulesLimits interface {
138139
RulerMaxRulesPerRuleGroup(userID string) int
139140
}
140141

141-
// EngineQueryFunc returns a new query function using the rules.EngineQueryFunc function
142-
// and passing an altered timestamp.
143-
func EngineQueryFunc(engine *promql.Engine, q storage.Queryable, overrides RulesLimits, userID string) rules.QueryFunc {
142+
// EngineQueryFunc returns a new engine query function by passing an altered timestamp.
143+
// Modified from Prometheus rules.EngineQueryFunc
144+
// https://github.com/prometheus/prometheus/blob/v2.39.1/rules/manager.go#L189.
145+
func EngineQueryFunc(engine v1.QueryEngine, q storage.Queryable, overrides RulesLimits, userID string) rules.QueryFunc {
144146
return func(ctx context.Context, qs string, t time.Time) (promql.Vector, error) {
145-
orig := rules.EngineQueryFunc(engine, q)
146-
// Delay the evaluation of all rules by a set interval to give a buffer
147-
// to metric that haven't been forwarded to cortex yet.
148147
evaluationDelay := overrides.EvaluationDelay(userID)
149-
return orig(ctx, qs, t.Add(-evaluationDelay))
148+
q, err := engine.NewInstantQuery(q, nil, qs, t.Add(-evaluationDelay))
149+
if err != nil {
150+
return nil, err
151+
}
152+
res := q.Exec(ctx)
153+
if res.Err != nil {
154+
return nil, res.Err
155+
}
156+
switch v := res.Value.(type) {
157+
case promql.Vector:
158+
return v, nil
159+
case promql.Scalar:
160+
return promql.Vector{promql.Sample{
161+
Point: promql.Point(v),
162+
Metric: labels.Labels{},
163+
}}, nil
164+
default:
165+
return nil, errors.New("rule result is not a vector or scalar")
166+
}
150167
}
151168
}
152169

@@ -227,7 +244,7 @@ type RulesManager interface {
227244
// ManagerFactory is a function that creates new RulesManager for given user and notifier.Manager.
228245
type ManagerFactory func(ctx context.Context, userID string, notifier *notifier.Manager, logger log.Logger, reg prometheus.Registerer) RulesManager
229246

230-
func DefaultTenantManagerFactory(cfg Config, p Pusher, q storage.Queryable, engine *promql.Engine, overrides RulesLimits, reg prometheus.Registerer) ManagerFactory {
247+
func DefaultTenantManagerFactory(cfg Config, p Pusher, q storage.Queryable, engine v1.QueryEngine, overrides RulesLimits, reg prometheus.Registerer) ManagerFactory {
231248
totalWrites := promauto.With(reg).NewCounter(prometheus.CounterOpts{
232249
Name: "cortex_ruler_write_requests_total",
233250
Help: "Number of write requests to ingesters.",

0 commit comments

Comments
 (0)