Skip to content

Commit ecd5fda

Browse files
committed
Using highest value for ruler delay
Signed-off-by: Daniel Deluiggi <ddeluigg@amazon.com>
1 parent 70183b0 commit ecd5fda

File tree

3 files changed

+29
-3
lines changed

3 files changed

+29
-3
lines changed

CHANGELOG.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
* [CHANGE] Querier: Deprecate and enable by default `querier.ingester-metadata-streaming` flag. #6147
1010
* [CHANGE] QueryFrontend/QueryScheduler: Deprecate `-querier.max-outstanding-requests-per-tenant` and `-query-scheduler.max-outstanding-requests-per-tenant` flags. Use frontend.max-outstanding-requests-per-tenant instead. #6146
1111
* [CHANGE] Ingesters: Enable 'snappy-block' compression on ingester clients by default. #6148
12-
* [CHANGE] Ruler: Mark `evaluation-delay-duration` flag as deprecated. #6149
12+
* [CHANGE] Ruler: Scheduling `evaluation-delay-duration` to be deprecated. Use the highest value between `evaluation-delay-duration` and `ruler.query_offset` #6149
1313
* [FEATURE] Ingester/Distributor: Experimental: Enable native histogram ingestion via `-blocks-storage.tsdb.enable-native-histograms` flag. #5986 #6010 #6020
1414
* [FEATURE] Querier: Enable querying native histogram chunks. #5944 #6031
1515
* [FEATURE] Query Frontend: Support native histogram in query frontend response. #5996 #6043

pkg/util/validation/limits.go

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"encoding/json"
66
"errors"
77
"flag"
8+
"github.com/go-kit/log/level"
89
"math"
910
"regexp"
1011
"strings"
@@ -174,6 +175,7 @@ type Limits struct {
174175
QueryRejection QueryRejection `yaml:"query_rejection" json:"query_rejection" doc:"nocli|description=Configuration for query rejection."`
175176

176177
// Ruler defaults and limits.
178+
RulerEvaluationDelay model.Duration `yaml:"ruler_evaluation_delay_duration" json:"ruler_evaluation_delay_duration"`
177179
RulerTenantShardSize int `yaml:"ruler_tenant_shard_size" json:"ruler_tenant_shard_size"`
178180
RulerMaxRulesPerRuleGroup int `yaml:"ruler_max_rules_per_rule_group" json:"ruler_max_rules_per_rule_group"`
179181
RulerMaxRuleGroupsPerTenant int `yaml:"ruler_max_rule_groups_per_tenant" json:"ruler_max_rule_groups_per_tenant"`
@@ -212,7 +214,6 @@ type Limits struct {
212214
// RegisterFlags adds the flags required to config this to the given FlagSet
213215
func (l *Limits) RegisterFlags(f *flag.FlagSet) {
214216
flagext.DeprecatedFlag(f, "ingester.max-series-per-query", "Deprecated: The maximum number of series for which a query can fetch samples from each ingester. This limit is enforced only in the ingesters (when querying samples not flushed to the storage yet) and it's a per-instance limit. This limit is ignored when running the Cortex blocks storage. When running Cortex with blocks storage use -querier.max-fetched-series-per-query limit instead.", util_log.Logger)
215-
flagext.DeprecatedFlag(f, "ruler.evaluation-delay-duration", "Deprecated: Duration to delay the evaluation of rules to ensure the underlying metrics have been pushed to Cortex. This limit was replaced by ruler.query-offset", util_log.Logger)
216217

217218
f.IntVar(&l.IngestionTenantShardSize, "distributor.ingestion-tenant-shard-size", 0, "The default tenant's shard size when the shuffle-sharding strategy is used. Must be set both on ingesters and distributors. When this setting is specified in the per-tenant overrides, a value of 0 disables shuffle sharding for the tenant.")
218219
f.Float64Var(&l.IngestionRate, "distributor.ingestion-rate-limit", 25000, "Per-user ingestion rate limit in samples per second.")
@@ -265,6 +266,7 @@ func (l *Limits) RegisterFlags(f *flag.FlagSet) {
265266

266267
f.IntVar(&l.MaxOutstandingPerTenant, "frontend.max-outstanding-requests-per-tenant", 100, "Maximum number of outstanding requests per tenant per request queue (either query frontend or query scheduler); requests beyond this error with HTTP 429.")
267268

269+
f.Var(&l.RulerEvaluationDelay, "ruler.evaluation-delay-duration", "Deprecated(use ruler.query-offset instead) and will be removed in v1.19.0: Duration to delay the evaluation of rules to ensure the underlying metrics have been pushed to Cortex.")
268270
f.IntVar(&l.RulerTenantShardSize, "ruler.tenant-shard-size", 0, "The default tenant's shard size when the shuffle-sharding strategy is used by ruler. When this setting is specified in the per-tenant overrides, a value of 0 disables shuffle sharding for the tenant.")
269271
f.IntVar(&l.RulerMaxRulesPerRuleGroup, "ruler.max-rules-per-rule-group", 0, "Maximum number of rules per rule group per-tenant. 0 to disable.")
270272
f.IntVar(&l.RulerMaxRuleGroupsPerTenant, "ruler.max-rule-groups-per-tenant", 0, "Maximum number of rule groups per-tenant. 0 to disable.")
@@ -789,7 +791,13 @@ func (o *Overrides) RulerMaxRuleGroupsPerTenant(userID string) int {
789791

790792
// RulerQueryOffset returns the rule query offset for a given user.
791793
func (o *Overrides) RulerQueryOffset(userID string) time.Duration {
792-
return time.Duration(o.GetOverridesForUser(userID).RulerQueryOffset)
794+
ruleOffset := time.Duration(o.GetOverridesForUser(userID).RulerQueryOffset)
795+
evaluationDelay := time.Duration(o.GetOverridesForUser(userID).RulerEvaluationDelay)
796+
if evaluationDelay > ruleOffset {
797+
level.Warn(util_log.Logger).Log("msg", "ruler.query-offset was overridden by highest value in [Deprecated]ruler.evaluation-delay-duration", "ruler.query-offset", ruleOffset, "ruler.evaluation-delay-duration", evaluationDelay)
798+
return evaluationDelay
799+
}
800+
return ruleOffset
793801
}
794802

795803
// StoreGatewayTenantShardSize returns the store-gateway shard size for a given user.

pkg/util/validation/limits_test.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -764,3 +764,21 @@ func TestCompileQueryPriorityRegex(t *testing.T) {
764764
require.NoError(t, err)
765765
require.Nil(t, l.QueryPriority.Priorities[0].QueryAttributes[0].CompiledRegex)
766766
}
767+
768+
func TestEvaluationDelayHigherThanRulerQueryOffset(t *testing.T) {
769+
tenant := "tenant"
770+
evaluationDelay := time.Duration(10)
771+
tenantLimits := map[string]*Limits{
772+
tenant: {
773+
RulerQueryOffset: 5,
774+
RulerEvaluationDelay: model.Duration(evaluationDelay),
775+
},
776+
}
777+
778+
defaults := Limits{}
779+
ov, err := NewOverrides(defaults, newMockTenantLimits(tenantLimits))
780+
require.NoError(t, err)
781+
782+
rulerQueryOffset := ov.RulerQueryOffset(tenant)
783+
assert.Equal(t, evaluationDelay, rulerQueryOffset)
784+
}

0 commit comments

Comments
 (0)