{"record":{"id":"e008574b07cf76c5","repo":"thanos-io/thanos","slug":"split-queries-interval-should-be-greater-than-0-w","errorCode":null,"errorMessage":"split queries interval should be greater than 0  when caching is enabled","messagePattern":"split queries interval should be greater than 0  when caching is enabled","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/queryfrontend/config.go","lineNumber":289,"sourceCode":"\t\tif err := cfg.QueryRangeConfig.ResultsCacheConfig.Validate(ignoredQueryConfig); err != nil {\n\t\t\treturn errors.Wrap(err, \"invalid ResultsCache config for query_range tripperware\")\n\t\t}\n\t}\n\n\tif cfg.isDynamicSplitSet() && cfg.isStaticSplitSet() {\n\t\treturn errors.New(\"split queries interval and dynamic query split interval cannot be set at the same time\")\n\t}\n\n\tif cfg.isDynamicSplitSet() {\n\n\t\tif err := cfg.validateDynamicSplitParams(); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\tif cfg.LabelsConfig.ResultsCacheConfig != nil {\n\t\tif cfg.LabelsConfig.SplitQueriesByInterval <= 0 {\n\t\t\treturn errors.New(\"split queries interval should be greater than 0  when caching is enabled\")\n\t\t}\n\t\tif err := cfg.LabelsConfig.ResultsCacheConfig.Validate(querier.Config{}); err != nil {\n\t\t\treturn errors.Wrap(err, \"invalid ResultsCache config for labels tripperware\")\n\t\t}\n\t}\n\n\tif cfg.DefaultTimeRange == 0 {\n\t\treturn errors.New(\"labels.default-time-range cannot be set to 0\")\n\t}\n\n\tif cfg.DownstreamURL == \"\" {\n\t\treturn errors.New(\"downstream URL should be configured\")\n\t}\n\n\treturn nil\n}\n\nfunc (cfg *Config) validateDynamicSplitParams() error {","sourceCodeStart":271,"sourceCodeEnd":307,"githubUrl":"https://github.com/thanos-io/thanos/blob/35b8b991177def87ed52dcf10f9b6d87f07282c8/pkg/queryfrontend/config.go#L271-L307","documentation":"Validate checks the labels tripperware configuration: when the labels results cache is enabled (LabelsConfig.ResultsCacheConfig != nil), LabelsConfig.SplitQueriesByInterval must be > 0 so label queries can be split into cacheable chunks. Note the message contains a double space ('> 0  when'), a known typo.","triggerScenarios":"Labels caching is enabled while cfg.LabelsConfig.SplitQueriesByInterval is 0 or negative.","commonSituations":"Operator enables --labels.response-cache-config but forgets --labels.split-queries-by-interval; flag defaults changed between Thanos versions leaving it unset.","solutions":["Set --labels.split-queries-by-interval to a positive duration (e.g. 24h).","Or disable the labels results cache if splitting is not desired.","Review Thanos release notes for labels caching defaults after upgrades."],"exampleFix":"// before\nflags := []string{\"--labels.response-cache-config-file=cache.yml\"}\n// after\nflags := []string{\"--labels.response-cache-config-file=cache.yml\", \"--labels.split-queries-by-interval=24h\"}","handlingStrategy":"validation","validationCode":"if labelsCachingEnabled && labelsSplitInterval <= 0 {\n    return errors.New(\"--labels.split-queries-by-interval must be > 0 when labels caching is enabled\")\n}","typeGuard":null,"tryCatchPattern":"if err := cfg.Validate(); err != nil {\n    if strings.Contains(err.Error(), \"split queries interval should be greater than 0\") && labelsCachingEnabled {\n        return fmt.Errorf(\"set --labels.split-queries-by-interval: %w\", err)\n    }\n    return err\n}","preventionTips":["Pair --labels.response-cache-config with --labels.split-queries-by-interval in all deployments.","Add flag-combination checks to CI pipelines.","Review labels caching defaults after each Thanos upgrade."],"tags":["config","validation","caching","labels","query-frontend"],"backgroundTag":"invalid-config-value","analyzedSha":"35b8b991177def87ed52dcf10f9b6d87f07282c8","analyzedAt":"2026-09-07T01:49:59.689Z","contentChangedAt":"2026-09-07T01:49:59.689Z","schemaVersion":2},"datasetVersion":"2026-09-15T23:17:13.987Z"}