From 8229b4575a4c339c451ccfed17e45a9f8186b14c Mon Sep 17 00:00:00 2001 From: Aditi Ahuja <48997495+metonymic-smokey@users.noreply.github.com> Date: Thu, 23 Sep 2021 23:30:19 +0530 Subject: [PATCH] Added experimental features flag (#4679) * added enable features flag Signed-off-by: metonymic-smokey * changelog fixes Signed-off-by: metonymic-smokey * doc changes Signed-off-by: metonymic-smokey * review suggestion added Signed-off-by: metonymic-smokey * updated docs Signed-off-by: metonymic-smokey --- CHANGELOG.md | 1 + cmd/thanos/query.go | 24 ++++++++++++++++++++++++ docs/components/query.md | 3 +++ 3 files changed, 28 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index dde5d56aa3..3da3bf9675 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ We use *breaking :warning:* to mark changes that are not backward compatible (re ### Added - [#4680](https://github.com/thanos-io/thanos/pull/4680) Query: add `exemplar.partial-response` flag to control partial response. +- [#4679](https://github.com/thanos-io/thanos/pull/4679) Added `enable-feature` flag to enable negative offsets and @ modifier, similar to Prometheus. - [#4696](https://github.com/thanos-io/thanos/pull/4696) Query: add cache name to tracing spans. ## v0.23.0 - In Progress diff --git a/cmd/thanos/query.go b/cmd/thanos/query.go index 4d893f212e..50884810e4 100644 --- a/cmd/thanos/query.go +++ b/cmd/thanos/query.go @@ -52,6 +52,11 @@ import ( "github.com/thanos-io/thanos/pkg/ui" ) +const ( + promqlNegativeOffset = "promql-negative-offset" + promqlAtModifier = "promql-at-modifier" +) + // registerQuery registers a query command. func registerQuery(app *extkingpin.App) { comp := component.Query @@ -146,6 +151,8 @@ func registerQuery(app *extkingpin.App) { enableMetricMetadataPartialResponse := cmd.Flag("metric-metadata.partial-response", "Enable partial response for metric metadata endpoint. --no-metric-metadata.partial-response for disabling."). Hidden().Default("true").Bool() + featureList := cmd.Flag("enable-feature", "Comma separated experimental feature names to enable.The current list of features is "+promqlNegativeOffset+" and "+promqlAtModifier+".").Default("").Strings() + enableExemplarPartialResponse := cmd.Flag("exemplar.partial-response", "Enable partial response for exemplar endpoint. --no-exemplar.partial-response for disabling."). Hidden().Default("true").Bool() @@ -163,6 +170,16 @@ func registerQuery(app *extkingpin.App) { return errors.Wrap(err, "parse federation labels") } + var enableNegativeOffset, enableAtModifier bool + for _, feature := range *featureList { + if feature == promqlNegativeOffset { + enableNegativeOffset = true + } + if feature == promqlAtModifier { + enableAtModifier = true + } + } + if dup := firstDuplicate(*stores); dup != "" { return errors.Errorf("Address %s is duplicated for --store flag.", dup) } @@ -266,6 +283,8 @@ func registerQuery(app *extkingpin.App) { *defaultMetadataTimeRange, *strictStores, *webDisableCORS, + enableAtModifier, + enableNegativeOffset, component.Query, ) }) @@ -329,6 +348,8 @@ func runQuery( defaultMetadataTimeRange time.Duration, strictStores []string, disableCORS bool, + enableAtModifier bool, + enableNegativeOffset bool, comp component.Component, ) error { // TODO(bplotka in PR #513 review): Move arguments into struct. @@ -456,6 +477,9 @@ func runQuery( cancelRun() }) + engineOpts.EnableAtModifier = enableAtModifier + engineOpts.EnableNegativeOffset = enableNegativeOffset + ctxUpdate, cancelUpdate := context.WithCancel(context.Background()) g.Add(func() error { for { diff --git a/docs/components/query.md b/docs/components/query.md index 63f7dd0a2c..41e2cccf89 100644 --- a/docs/components/query.md +++ b/docs/components/query.md @@ -252,6 +252,9 @@ Query node exposing PromQL enabled Query API with data retrieved from multiple store nodes. Flags: + --enable-feature= ... Comma separated experimental feature names to + enable.The current list of features is + promql-negative-offset and promql-at-modifier. --grpc-address="0.0.0.0:10901" Listen ip:port address for gRPC endpoints (StoreAPI). Make sure this address is routable