thanos-io/thanos · error
setup tripperwares
Error message
setup tripperwares
What it means
This wraps errors from queryfrontend.NewTripperware, which constructs the tripperware chain (query-range/labels middleware, results cache, limits). Failure means the validated config could not be instantiated into middleware — typically an internal configuration-dependent construction error such as invalid codec or limits setup.
Solutions
- Read the wrapped underlying error from NewTripperware for the failing component.
- Bisect feature flags to isolate the problematic tripperware option.
- Check for known issues in your Thanos version; upgrade to a patched release.
- Verify config matches the schema documented for your exact version.
Example fix
// before query-frontend --query-range-response-cache-compression=zstd --enable-feature=unsupported-flag // after query-frontend --query-range-response-cache-compression=zstd
Defensive patterns
Strategy: try-catch
Try / catch
tw, err := queryfrontend.NewTripperware(cfg.Config, reg, logger)
if err != nil {
return fmt.Errorf("setup tripperwares: %w", err)
} Prevention
- Keep Thanos and config schema versions aligned
- Bisect feature flags when startup fails here
- Check upstream issue tracker for known bugs
When it happens
Trigger: NewTripperware returning an error for a config that passed Validate but cannot build its components (e.g. problematic per-tenant limits, response cache setup edge cases).
Common situations: Bugs or version mismatches between the config schema and the tripperware builder, unusual combinations of feature flags, or custom builds with incompatible Cortex queryfrontend versions.
Related errors
- create syncer
- unable to load config file
- unable to create config reloader
- unable to load config initially
- tracing failed
AI-assisted analysis of thanos-io/thanos@35b8b99117 (2026-09-07).
Data as JSON: /api/errors/cf9561b2de4052b8.
Report an issue: GitHub.
Appendix: source
Thrown at cmd/thanos/query_frontend.go:321
return errors.Wrap(err, "error validating the config")
}
if cfg.EnableXFunctions {
maps.Copy(parser.Functions, parse.XFunctions)
}
if len(cfg.EnableFeatures) > 0 {
for _, feature := range cfg.EnableFeatures {
if feature == promqlExperimentalFunctions {
parser.EnableExperimentalFunctions = true
level.Info(logger).Log("msg", "Experimental PromQL functions enabled.", "option", promqlExperimentalFunctions)
}
}
}
tripperWare, err := queryfrontend.NewTripperware(cfg.Config, reg, logger)
if err != nil {
return errors.Wrap(err, "setup tripperwares")
}
// Create a downstream roundtripper.
downstreamTripperConfContentYaml, err := cfg.DownstreamTripperConfig.CachePathOrContent.Content()
if err != nil {
return err
}
downstreamTripper, err := parseTransportConfiguration(downstreamTripperConfContentYaml)
if err != nil {
return err
}
downstreamRT, err := cortexfrontend.NewDownstreamRoundTripper(cfg.DownstreamURL, downstreamTripper)
if err != nil {
return errors.Wrap(err, "setup downstream roundtripper")
}
// Wrap the downstream RoundTripper into query frontend Tripperware.View on GitHub (pinned to 35b8b99117)