jaegertracing/jaeger · error
deprecated ES rotation flags (%s) are no longer supported; m
Error message
deprecated ES rotation flags (%s) are no longer supported; migrate to 'indices.<type>.rotation' config (see https://github.com/jaegertracing/jaeger/pull/8823); to temporarily disable this check, use --feature-gates=-jaeger.es.config.rejectLegacyRotationFlags
What it means
Configuration.Validate rejects the deprecated top-level ES index rotation flags (e.g. es.index-cleaner/rollover legacy rotation options) when the rejectLegacyRotationFlags feature gate is enabled. Rotation must now be configured per index type under indices.<type>.rotation. The gate exists so operators can temporarily opt out during migration.
Source
Thrown at internal/storage/elasticsearch/config/config.go:479
"the client performs no client-side health check")
}
if c.SendGetBodyAs.HasValue() {
return rejectUnwiredKey("send_get_body_as",
"the client sends each request with a fixed HTTP verb")
}
if c.BulkProcessing.MaxActions.HasValue() {
return rejectUnwiredKey("bulk_processing.max_actions",
"the bulk indexer flushes only on a byte threshold ('bulk_processing.max_bytes') "+
"or a time interval ('bulk_processing.flush_interval'), so an action count has no effect")
}
// Validate rotation config for each index type
if err := c.validateRotationConfig(); err != nil {
return err
}
if RejectLegacyRotationFlags.IsEnabled() && c.hasAnyLegacyRotationFlags() {
return fmt.Errorf(
"deprecated ES rotation flags (%s) "+
"are no longer supported; migrate to 'indices.<type>.rotation' config "+
"(see https://github.com/jaegertracing/jaeger/pull/8823); "+
"to temporarily disable this check, use --feature-gates=-jaeger.es.config.rejectLegacyRotationFlags",
legacyRotationFlagsList,
)
}
if c.getUseILM() && !c.getUseReadWriteAliases() {
return errors.New("UseILM must always be used in conjunction with UseReadWriteAliases to ensure ES writers and readers refer to the single index mapping")
}
if c.CreateIndexTemplates && c.getUseILM() {
return errors.New("when UseILM is set true, CreateIndexTemplates must be set to false and index templates must be created by init process of es-rollover app")
}
hasAnyExplicitAlias := c.getSpanReadAlias() != "" || c.getSpanWriteAlias() != "" ||
c.getServiceReadAlias() != "" || c.getServiceWriteAlias() != ""
View on GitHub (pinned to 806f444784)
Solutions
- Migrate each legacy rotation flag to indices.<type>.rotation (e.g. indices.spans.rotation, indices.services.rotation, indices.dependencies.rotation) in your config.
- If you must start immediately, disable the check with --feature-gates=-jaeger.es.config.rejectLegacyRotationFlags, but plan the migration.
- Diff your config against the new schema docs and remove the flags listed in legacyRotationFlagsList.
- Update deployment templates/Helm values that still render the old es.* rotation options.
- Test the migrated config with jaeger 'start' and confirm log-archive/index rotation behavior is unchanged.
Example fix
# before
es:
index-rotation: daily
# after
es:
indices:
spans:
rotation: daily
services:
rotation: daily
dependencies:
rotation: daily Defensive patterns
Strategy: validation
Validate before calling
// fail fast in CI before deploying legacy flags
legacy := []string{"es.index-rotation", "es.index-rollover", "es.use-aliases-rotation"}
for _, k := range legacy {
if os.Getenv(strings.ToUpper(strings.ReplaceAll(k, ".", "_"))) != "" {
log.Printf("legacy flag %s detected; migrate to indices.<type>.rotation", k)
os.Exit(1)
}
} Try / catch
if err := cfg.Validate(); err != nil {
if strings.Contains(err.Error(), "deprecated ES rotation flags") {
// either migrate config or, temporarily:
// --feature-gates=-jaeger.es.config.rejectLegacyRotationFlags
return fmt.Errorf("config migration required: %w", err)
}
return err
} Prevention
- Move all rotation config under indices.<type>.rotation now; don't rely on the opt-out gate.
- Grep deployment templates/Helm values for legacy es.* rotation keys each upgrade.
- Validate configs in CI with the feature gate enabled so drift is caught pre-deploy.
- Read the PR #8823 migration notes when upgrading.
When it happens
Trigger: Supplying legacy rotation settings (old es.* rotation flags/env vars) in the storage config while the jaeger.es.config.rejectLegacyRotationFlags feature gate is on; starting Jaeger with a config file converted from an older version without moving rotation under indices.*.
Common situations: Upgrading Jaeger after PR #8823 with an old YAML/env config; infrastructure-as-code templates still emitting es.index rotation flags; operators using the feature-gate opt-out past the deprecation window.
Related errors
- the structured query filter is disabled
- service/operation reads require a searcher, but this storage
- invalid version %q: expected one of es7, es8, es9, os1, os2,
- unsupported version %d: set 0 to auto-detect, or use 7/8/9 (
- unrecognized poison_pill_handling %q: valid values are %q an
AI-assisted analysis of jaegertracing/jaeger@806f444784 (2026-09-01).
Data as JSON: /api/errors/95a93e34f41824f5.
Report an issue: GitHub.