Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
## main / unreleased

* [ENHANCEMENT] Expose MinIO retry settings via S3 config [#6561](https://github.com/grafana/tempo/pull/6561) (@rwhitty)
* [BUGFIX] Fix integer overflow in query parameters by using `strconv.ParseUint` instead of `strconv.Atoi`/`strconv.ParseInt` for unsigned integer fields. [#6612](https://github.com/grafana/tempo/pull/6612) (@bejaratommy)

* [CHANGE] **BREAKING CHANGE** Centralize block and WAL config: `block_builder` and `live_store` now always use `storage.trace.block` settings; per-module block config fields are removed. [#6647](https://github.com/grafana/tempo/pull/6647) (@stoewer)
Comment on lines 3 to 5
Copy link

Copilot AI Apr 8, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The ## main / unreleased section now has an extra blank line between list items (line 4), and the first entry is an [ENHANCEMENT] that sits above the [CHANGE] block. Could we remove the blank line and keep entries grouped/sorted by type (CHANGE/FEATURE/ENHANCEMENT/BUGFIX) to match the checklist guidance and the rest of the file’s structure?

Copilot uses AI. Check for mistakes.
* [CHANGE] **BREAKING CHANGE** Remove Opencensus receiver [#6523](https://github.com/grafana/tempo/pull/6523) (@javiermolinar)
* [CHANGE] Upgrade Tempo to Go 1.26.0 [#6443](https://github.com/grafana/tempo/pull/6443) (@stoewer)
Expand Down Expand Up @@ -51,9 +51,10 @@
* [ENHANCEMENT] Add support for per-tenant left-padding of trace IDs [#6439](https://github.com/grafana/tempo/pull/6489) (@mapno)
* [ENHANCEMENT] Add new metric for generator ring size: `tempo_distributor_metrics_generator_tenant_ring_size` [#5686](https://github.com/grafana/tempo/pull/5686) (@zalegrala)
* [ENHANCEMENT] Remove explicit `runtime.GC()` calls in vParquet5 compactor/block creation and CLI [#6603](https://github.com/grafana/tempo/pull/6603) (@oleg-kozlyuk-grafana)
* [ENHANCEMENT] Reduce allocations in `extendReuseSlice` growth path during WAL writes and block creation [#6863](https://github.com/grafana/tempo/pull/6863) (@mapno)
* [ENHANCEMENT] Implemented anti-affinity for pods in same livestore zone [#6757](https://github.com/grafana/tempo/pull/6757) (@zhxiaogg)
* [BUGFIX] Fix integer overflow in query parameters by using `strconv.ParseUint` instead of `strconv.Atoi`/`strconv.ParseInt` for unsigned integer fields. [#6612](https://github.com/grafana/tempo/pull/6612) (@bejaratommy)
* [BUGFIX] Fix live-store SearchTagValuesV2 disk cache never being populated on complete blocks [#6858](https://github.com/grafana/tempo/pull/6858) (@mapno)
* [ENHANCEMENT] Reduce allocations in `extendReuseSlice` growth path during WAL writes and block creation [#6863](https://github.com/grafana/tempo/pull/6863) (@mapno)
* [BUGFIX] Fix dedicated columns fallback in `block_builder` and `live_store` to use `storage.trace.block.parquet_dedicated_columns` when not set via overrides. [#6647](https://github.com/grafana/tempo/pull/6647) (@stoewer)
* [BUGFIX] Force live-store to rehydrate from Kafka lookback period when local data is missing (e.g. PVC wipe, new node) instead of resuming from the committed consumer group offset [#6428](https://github.com/grafana/tempo/pull/6428) (@oleg-kozlyuk-grafana)
* [BUGFIX] fix: reload span_name_sanitization overrides during runtime [#6435](https://github.com/grafana/tempo/pull/6435) (@electron0zero)
Expand All @@ -78,6 +79,7 @@

### 3.0 Cleanup

* [CHANGE] **BREAKING CHANGE** Remove ingest.enabled config [#6873](https://github.com/grafana/tempo/pull/6873) (@javiermolinar)
* [CHANGE] **BREAKING CHANGE** Disable legacy (flat, unscoped) overrides by default. Tempo will refuse to start if legacy overrides are detected. Set `enable_legacy_overrides: true` or `-config.enable-legacy-overrides=true` to opt back in temporarily. Legacy overrides will be removed in a future release. [#6741](https://github.com/grafana/tempo/pull/6741) (@electron0zero)
* [CHANGE] tempo-cli: Rewrite `migrate overrides-config` and add `migrate overrides-per-tenant` command to help migrate legacy flat overrides to the new scoped format. [#6793](https://github.com/grafana/tempo/pull/6793) (@electron0zero)
* [CHANGE] **BREAKING CHANGE** Remove remaining app ingester config [#6667](https://github.com/grafana/tempo/pull/6667) (@javiermolinar)
Expand Down
1 change: 0 additions & 1 deletion docs/sources/tempo/configuration/manifest.md
Original file line number Diff line number Diff line change
Expand Up @@ -492,7 +492,6 @@ metrics_generator:
ingest_concurrency: 16
instance_id: hostname
ingest:
enabled: false
kafka:
address: localhost:9092
topic: ""
Expand Down
1 change: 0 additions & 1 deletion example/docker-compose/debug/tempo.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,6 @@ overrides:
generate_native_histograms: both

ingest:
enabled: true
kafka:
address: redpanda:9092
topic: tempo-ingest
Expand Down
1 change: 0 additions & 1 deletion example/docker-compose/distributed/tempo.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,6 @@ overrides:
generate_native_histograms: both

ingest:
enabled: true
kafka:
address: redpanda:9092
topic: tempo-ingest
Expand Down
1 change: 0 additions & 1 deletion example/docker-compose/multitenant/tempo.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,6 @@ storage:
path: /var/tempo/blocks

ingest:
enabled: true
kafka:
address: redpanda:9092
topic: tempo-ingest
Expand Down
1 change: 0 additions & 1 deletion example/docker-compose/single-binary/tempo.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,6 @@ overrides:
generate_native_histograms: both

ingest:
enabled: true
kafka:
address: redpanda:9092
topic: tempo-ingest
Expand Down
1 change: 0 additions & 1 deletion example/nomad/tempo-distributed/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,6 @@ metrics_generator:
send_exemplars: true

ingest:
enabled: true
kafka:
address: kafka.service.consul:9092
topic: tempo-ingest
Expand Down
1 change: 0 additions & 1 deletion integration/util/config-base.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,6 @@ block_builder:
- 0

ingest:
enabled: true
kafka:
address: kafka:9092
topic: tempo-ingest
Expand Down
2 changes: 1 addition & 1 deletion modules/generator/AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,7 @@ In Tempo 3.0 microservices mode, the metrics-generator consumes trace data from
#### Two generator modes

- **`MetricsGenerator`** (traditional) — Uses ring + memberlist. Can receive PushSpans and/or consume Kafka. gRPC optional.
- **`MetricsGeneratorNoLocalBlocks`** — Kafka-only mode. Uses partition ring watcher and consumes from Kafka as configured by the deployment model. (`ingest.enabled` and `disable_grpc` are deprecated and ignored.)
- **`MetricsGeneratorNoLocalBlocks`** — Kafka-only mode. Uses partition ring watcher and consumes from Kafka as configured by the deployment model. (`disable_grpc` is deprecated and ignored.)

**Code Reference**: `cmd/tempo/app/modules.go`

Expand Down
4 changes: 4 additions & 0 deletions modules/ingester/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,10 @@ type Config struct {
IngestStorageConfig ingest.Config `yaml:"-"`
}

func ingestStorageEnabled(cfg ingest.Config) bool {
return cfg.Kafka.Topic != ""
Comment on lines +37 to +38
Copy link

Copilot AI Apr 8, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ingestStorageEnabled takes ingest.Config by value, which copies the full KafkaConfig (including secret fields and other nested config) each time it’s called. Could this take *ingest.Config (or just the topic string) instead to avoid unnecessary copying and make it clear the helper is read-only?

Suggested change
func ingestStorageEnabled(cfg ingest.Config) bool {
return cfg.Kafka.Topic != ""
func ingestStorageEnabled(cfg *ingest.Config) bool {
return cfg != nil && cfg.Kafka.Topic != ""

Copilot uses AI. Check for mistakes.
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is just to make this thing build. Ingesters are about to disappear

}

// RegisterFlagsAndApplyDefaults registers the flags.
func (cfg *Config) RegisterFlagsAndApplyDefaults(prefix string, f *flag.FlagSet) {
// apply generic defaults and then overlay tempo default
Expand Down
2 changes: 1 addition & 1 deletion modules/ingester/downscale.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
return
}

if !i.cfg.IngestStorageConfig.Enabled {
if !ingestStorageEnabled(i.cfg.IngestStorageConfig) {

Check notice on line 38 in modules/ingester/downscale.go

View workflow job for this annotation

GitHub Actions / Coverage Annotations

Uncovered line

Line 38 is not covered by tests
w.WriteHeader(http.StatusMethodNotAllowed)
return
}
Expand Down
4 changes: 2 additions & 2 deletions modules/ingester/ingester.go
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ func New(cfg Config, store storage.Store, overrides overrides.Interface, reg pro
}
i.lifecycler = lc

if cfg.IngestStorageConfig.Enabled {
if ingestStorageEnabled(cfg.IngestStorageConfig) {
if singlePartition {
// For single-binary don't require hostname to identify a partition.
// Assume partition 0.
Expand Down Expand Up @@ -150,7 +150,7 @@ func New(cfg Config, store storage.Store, overrides overrides.Interface, reg pro

i.subservicesWatcher = services.NewFailureWatcher()
i.subservicesWatcher.WatchService(i.lifecycler)
if cfg.IngestStorageConfig.Enabled {
if ingestStorageEnabled(cfg.IngestStorageConfig) {
i.subservicesWatcher.WatchService(i.ingestPartitionLifecycler)
}

Expand Down
4 changes: 1 addition & 3 deletions pkg/ingest/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,9 +45,7 @@ var (
)

type Config struct {
// Deprecated: this field is ignored and will be removed in a future release.
Enabled bool `yaml:"enabled"`
Kafka KafkaConfig `yaml:"kafka"`
Kafka KafkaConfig `yaml:"kafka"`
}

func (cfg *Config) RegisterFlagsAndApplyDefaults(prefix string, f *flag.FlagSet) {
Expand Down
Loading