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

  1. Read the wrapped underlying error from NewTripperware for the failing component.
  2. Bisect feature flags to isolate the problematic tripperware option.
  3. Check for known issues in your Thanos version; upgrade to a patched release.
  4. 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

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


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)