Skip to content

Commit 9e41258

Browse files
committed
Use selectParams in Select() to tell if we need samples or metadata
Move from one brittle assumption about Prometheus to another.
1 parent c44c7f0 commit 9e41258

File tree

4 files changed

+20
-28
lines changed

4 files changed

+20
-28
lines changed

cmd/lite/main.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -146,12 +146,11 @@ func main() {
146146
defer rulerServer.Stop()
147147
}
148148

149-
sampleQueryable := querier.NewQueryable(dist, chunkStore, false)
150-
metadataQueryable := querier.NewQueryable(dist, chunkStore, true)
149+
sampleQueryable := querier.NewQueryable(dist, chunkStore)
151150

152151
api := v1.NewAPI(
153152
engine,
154-
metadataQueryable,
153+
sampleQueryable,
155154
querier.DummyTargetRetriever{},
156155
querier.DummyAlertmanagerRetriever{},
157156
func() config.Config { return config.Config{} },

cmd/querier/main.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -88,13 +88,12 @@ func main() {
8888
}
8989
defer chunkStore.Stop()
9090

91-
sampleQueryable := querier.NewQueryable(dist, chunkStore, false)
92-
metadataQueryable := querier.NewQueryable(dist, chunkStore, true)
91+
queryable := querier.NewQueryable(dist, chunkStore)
9392

9493
engine := promql.NewEngine(util.Logger, nil, querierConfig.MaxConcurrent, querierConfig.Timeout)
9594
api := v1.NewAPI(
9695
engine,
97-
metadataQueryable,
96+
queryable,
9897
querier.DummyTargetRetriever{},
9998
querier.DummyAlertmanagerRetriever{},
10099
func() config.Config { return config.Config{} },
@@ -108,7 +107,7 @@ func main() {
108107

109108
subrouter := server.HTTP.PathPrefix("/api/prom").Subrouter()
110109
subrouter.PathPrefix("/api/v1").Handler(middleware.AuthenticateUser.Wrap(promRouter))
111-
subrouter.Path("/read").Handler(middleware.AuthenticateUser.Wrap(http.HandlerFunc(sampleQueryable.RemoteReadHandler)))
110+
subrouter.Path("/read").Handler(middleware.AuthenticateUser.Wrap(http.HandlerFunc(queryable.RemoteReadHandler)))
112111
subrouter.Path("/validate_expr").Handler(middleware.AuthenticateUser.Wrap(http.HandlerFunc(dist.ValidateExprHandler)))
113112
subrouter.Path("/user_stats").Handler(middleware.AuthenticateUser.Wrap(http.HandlerFunc(dist.UserStatsHandler)))
114113

pkg/querier/querier.go

Lines changed: 10 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -38,21 +38,20 @@ type ChunkStore interface {
3838

3939
// NewEngine creates a new promql.Engine for cortex.
4040
func NewEngine(distributor Querier, chunkStore ChunkStore, reg prometheus.Registerer, maxConcurrent int, timeout time.Duration) (*promql.Engine, storage.Queryable) {
41-
queryable := NewQueryable(distributor, chunkStore, false)
41+
queryable := NewQueryable(distributor, chunkStore)
4242
engine := promql.NewEngine(util.Logger, reg, maxConcurrent, timeout)
4343
return engine, queryable
4444
}
4545

4646
// NewQueryable creates a new Queryable for cortex.
47-
func NewQueryable(distributor Querier, chunkStore ChunkStore, mo bool) MergeQueryable {
47+
func NewQueryable(distributor Querier, chunkStore ChunkStore) MergeQueryable {
4848
return MergeQueryable{
4949
queriers: []Querier{
5050
distributor,
5151
&chunkQuerier{
5252
store: chunkStore,
5353
},
5454
},
55-
metadataOnly: mo,
5655
}
5756
}
5857

@@ -125,18 +124,16 @@ func mergeMatrices(matrices chan model.Matrix, errors chan error, n int) (model.
125124
// A MergeQueryable is a storage.Queryable that produces a storage.Querier which merges
126125
// results from multiple underlying Queriers.
127126
type MergeQueryable struct {
128-
queriers []Querier
129-
metadataOnly bool
127+
queriers []Querier
130128
}
131129

132130
// Querier implements storage.Queryable.
133131
func (q MergeQueryable) Querier(ctx context.Context, mint, maxt int64) (storage.Querier, error) {
134132
return mergeQuerier{
135-
ctx: ctx,
136-
queriers: q.queriers,
137-
mint: mint,
138-
maxt: maxt,
139-
metadataOnly: q.metadataOnly,
133+
ctx: ctx,
134+
queriers: q.queriers,
135+
mint: mint,
136+
maxt: maxt,
140137
}, nil
141138
}
142139

@@ -205,16 +202,12 @@ type mergeQuerier struct {
205202
queriers []Querier
206203
mint int64
207204
maxt int64
208-
// Whether this querier should only load series metadata in Select().
209-
// Necessary for remote storage implementations of the storage.Querier
210-
// interface because both metadata and bulk data loading happens via
211-
// the Select() method.
212-
metadataOnly bool
213205
}
214206

215-
func (mq mergeQuerier) Select(_ *storage.SelectParams, matchers ...*labels.Matcher) (storage.SeriesSet, error) {
207+
func (mq mergeQuerier) Select(sp *storage.SelectParams, matchers ...*labels.Matcher) (storage.SeriesSet, error) {
216208
// TODO: Update underlying selectors to return errors directly.
217-
if mq.metadataOnly {
209+
// Kludge: Prometheus passes nil SelectParams if it is doing a 'series' operation, which needs only metadata
210+
if sp == nil {
218211
return mq.selectMetadata(matchers...), nil
219212
}
220213
return mq.selectSamples(matchers...), nil

pkg/querier/querier_test.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212
"github.com/golang/snappy"
1313
"github.com/prometheus/common/model"
1414
"github.com/prometheus/prometheus/pkg/labels"
15+
"github.com/prometheus/prometheus/storage"
1516
"github.com/stretchr/testify/require"
1617
"github.com/weaveworks/cortex/pkg/ingester/client"
1718
"github.com/weaveworks/cortex/pkg/prom1/storage/metric"
@@ -104,13 +105,13 @@ func TestMergeQuerierSortsMetricLabels(t *testing.T) {
104105
},
105106
},
106107
},
107-
mint: 0,
108-
maxt: 0,
109-
metadataOnly: false,
108+
mint: 0,
109+
maxt: 0,
110110
}
111111
m, err := labels.NewMatcher(labels.MatchEqual, model.MetricNameLabel, "testmetric")
112112
require.NoError(t, err)
113-
ss, err := mq.Select(nil, m)
113+
dummyParams := storage.SelectParams{}
114+
ss, err := mq.Select(&dummyParams, m)
114115
require.NoError(t, err)
115116
require.NoError(t, ss.Err())
116117
ss.Next()

0 commit comments

Comments
 (0)