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

  1. Migrate each legacy rotation flag to indices.<type>.rotation (e.g. indices.spans.rotation, indices.services.rotation, indices.dependencies.rotation) in your config.
  2. If you must start immediately, disable the check with --feature-gates=-jaeger.es.config.rejectLegacyRotationFlags, but plan the migration.
  3. Diff your config against the new schema docs and remove the flags listed in legacyRotationFlagsList.
  4. Update deployment templates/Helm values that still render the old es.* rotation options.
  5. 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

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


AI-assisted analysis of jaegertracing/jaeger@806f444784 (2026-09-01). Data as JSON: /api/errors/95a93e34f41824f5. Report an issue: GitHub.