5
5
"time"
6
6
7
7
"github.com/go-kit/log"
8
+ "github.com/go-kit/log/level"
8
9
"github.com/pkg/errors"
9
10
"github.com/prometheus-community/parquet-common/schema"
10
11
"github.com/prometheus-community/parquet-common/search"
@@ -22,8 +23,10 @@ import (
22
23
"github.com/cortexproject/cortex/pkg/storage/tsdb/bucketindex"
23
24
"github.com/cortexproject/cortex/pkg/tenant"
24
25
"github.com/cortexproject/cortex/pkg/util"
26
+ util_log "github.com/cortexproject/cortex/pkg/util/log"
25
27
"github.com/cortexproject/cortex/pkg/util/multierror"
26
28
"github.com/cortexproject/cortex/pkg/util/services"
29
+ "github.com/cortexproject/cortex/pkg/util/validation"
27
30
)
28
31
29
32
type parquetQueryableFallbackMetrics struct {
@@ -59,12 +62,15 @@ type parquetQueryableWithFallback struct {
59
62
60
63
// metrics
61
64
metrics * parquetQueryableFallbackMetrics
65
+
66
+ limits * validation.Overrides
67
+ logger log.Logger
62
68
}
63
69
64
70
func NewParquetQueryable (
65
71
config Config ,
66
72
storageCfg cortex_tsdb.BlocksStorageConfig ,
67
- limits BlocksStoreLimits ,
73
+ limits * validation. Overrides ,
68
74
blockStorageQueryable * BlocksStoreQueryable ,
69
75
logger log.Logger ,
70
76
reg prometheus.Registerer ,
@@ -115,6 +121,8 @@ func NewParquetQueryable(
115
121
subservicesWatcher : services .NewFailureWatcher (),
116
122
finder : blockStorageQueryable .finder ,
117
123
metrics : newParquetQueryableFallbackMetrics (reg ),
124
+ limits : limits ,
125
+ logger : logger ,
118
126
}
119
127
120
128
p .Service = services .NewBasicService (p .starting , p .running , p .stopping )
@@ -164,6 +172,8 @@ func (p *parquetQueryableWithFallback) Querier(mint, maxt int64) (storage.Querie
164
172
blocksStoreQuerier : bsq ,
165
173
finder : p .finder ,
166
174
metrics : p .metrics ,
175
+ limits : p .limits ,
176
+ logger : p .logger ,
167
177
}, nil
168
178
}
169
179
@@ -181,9 +191,24 @@ type parquetQuerierWithFallback struct {
181
191
182
192
// metrics
183
193
metrics * parquetQueryableFallbackMetrics
194
+
195
+ limits * validation.Overrides
196
+ logger log.Logger
184
197
}
185
198
186
199
func (q * parquetQuerierWithFallback ) LabelValues (ctx context.Context , name string , hints * storage.LabelHints , matchers ... * labels.Matcher ) ([]string , annotations.Annotations , error ) {
200
+ userID , err := tenant .TenantID (ctx )
201
+ if err != nil {
202
+ return nil , nil , err
203
+ }
204
+
205
+ if q .limits .QueryVerticalShardSize (userID ) > 1 {
206
+ uLogger := util_log .WithUserID (userID , q .logger )
207
+ level .Warn (uLogger ).Log ("msg" , "parquet queryable enabled but vertival sharding > 0. Falling back to the block storage" )
208
+
209
+ return q .blocksStoreQuerier .LabelValues (ctx , name , hints , matchers ... )
210
+ }
211
+
187
212
remaining , parquet , err := q .getBlocks (ctx , q .minT , q .maxT )
188
213
if err != nil {
189
214
return nil , nil , err
@@ -229,6 +254,18 @@ func (q *parquetQuerierWithFallback) LabelValues(ctx context.Context, name strin
229
254
}
230
255
231
256
func (q * parquetQuerierWithFallback ) LabelNames (ctx context.Context , hints * storage.LabelHints , matchers ... * labels.Matcher ) ([]string , annotations.Annotations , error ) {
257
+ userID , err := tenant .TenantID (ctx )
258
+ if err != nil {
259
+ return nil , nil , err
260
+ }
261
+
262
+ if q .limits .QueryVerticalShardSize (userID ) > 1 {
263
+ uLogger := util_log .WithUserID (userID , q .logger )
264
+ level .Warn (uLogger ).Log ("msg" , "parquet queryable enabled but vertival sharding > 0. Falling back to the block storage" )
265
+
266
+ return q .blocksStoreQuerier .LabelNames (ctx , hints , matchers ... )
267
+ }
268
+
232
269
remaining , parquet , err := q .getBlocks (ctx , q .minT , q .maxT )
233
270
if err != nil {
234
271
return nil , nil , err
@@ -275,6 +312,18 @@ func (q *parquetQuerierWithFallback) LabelNames(ctx context.Context, hints *stor
275
312
}
276
313
277
314
func (q * parquetQuerierWithFallback ) Select (ctx context.Context , sortSeries bool , hints * storage.SelectHints , matchers ... * labels.Matcher ) storage.SeriesSet {
315
+ userID , err := tenant .TenantID (ctx )
316
+ if err != nil {
317
+ storage .ErrSeriesSet (err )
318
+ }
319
+
320
+ if q .limits .QueryVerticalShardSize (userID ) > 1 {
321
+ uLogger := util_log .WithUserID (userID , q .logger )
322
+ level .Warn (uLogger ).Log ("msg" , "parquet queryable enabled but vertival sharding > 0. Falling back to the block storage" )
323
+
324
+ return q .blocksStoreQuerier .Select (ctx , sortSeries , hints , matchers ... )
325
+ }
326
+
278
327
mint , maxt , limit := q .minT , q .maxT , 0
279
328
280
329
if hints != nil {
@@ -288,6 +337,11 @@ func (q *parquetQuerierWithFallback) Select(ctx context.Context, sortSeries bool
288
337
289
338
serieSets := []storage.SeriesSet {}
290
339
340
+ // Lets sort the series to merge
341
+ if len (parquet ) > 0 && len (remaining ) > 0 {
342
+ sortSeries = true
343
+ }
344
+
291
345
if len (parquet ) > 0 {
292
346
serieSets = append (serieSets , q .parquetQuerier .Select (InjectBlocksIntoContext (ctx , parquet ... ), sortSeries , hints , matchers ... ))
293
347
}
0 commit comments