Releases: getsentry/snuba
26.4.1
New Features ✨
- Add default value to attribute aggregations by @wmak in #7888
- Make BLQ stale threshold and static friction runtime-configurable by @kylemumma in #7880
Bug Fixes 🐛
- (admin) Allow ClickHouse replace* functions in read-only query validation by @xurui-c in #7876
- (COGS) Unique labels for resource_ids by @xurui-c in #7864
- (outcomes) Deduplicate outcomes by item_id within batch by @untitaker in #7885
Internal Changes 🔧
Eap Outcomes
- Add min_partition tag by @MeredithAnya in #7891
- Add duplicate_item_count metric by @MeredithAnya in #7887
Other
- (ci) Pull out migrations tests maybe lets see by @MeredithAnya in #7881
- (gocd) Bump gocd-jsonnet to v3.0.0 (grouped pipedream) by @mchen-sentry in #7878
- Bump new development version by @sentry-release-bot[bot] in 41fe9b16
26.4.0
New Features ✨
Consumer
- Emit batch_write_bytes metric from RowBinary writer by @onewland in #7863
- Add memory-based batching limit to Rust consumer by @onewland in #7854
Other
- (cross-item) Prepare settings for production by @volokluev in #7706
- (docker) Switch distroless images to DHI by @oioki in #7821
- (manual-jobs) Add job to rerun completed idempotent migrations by @onewland in #7859
- (observability) Add baseline tags to RPC sourced sentry errors by @volokluev in #7845
- (options) Sentry options scaffolding by @kenzoengineer in #7836
- (outcomes) Add
no_parent_spanoutcome by @Lms24 in #7866 - (snql) Add Sentry error tags for SnQL API requests by @volokluev in #7839
- (timeseries) Add 6h interval by @wmak in #7867
- Blq feature flag can be updated without restart by @kylemumma in #7871
- Add a backlog-queue to the snuba consumers by @kylemumma in #7856
- Debugger support for consumers, local metrics support, bugbear by @kylemumma in #7818
Bug Fixes 🐛
Rpc
- Honor deprecated attribute keys in trace item attribute values by @xurui-c in #7853
- Validate that TraceItemTable requests have at least one column by @volokluev in #7837
Other
- (ci) Bump timeout and use --no-project on bump_version test by @kenzoengineer in #7841
- (COGS) Label metrics correctly for query side by @xurui-c in #7826
- (slo) Correctly report TOO_MANY_BYTES from allocation policy as rate-limited by @volokluev in #7846
- (snuba commit log) Modify Rust consumer to produce next message offset to Snuba commit log by @shashjar in #7852
Internal Changes 🔧
Eap Outcomes
- Use sentry-options to change which timestamp to use by @kenzoengineer in #7838
- Add category_metrics by @MeredithAnya in #7847
- Add config to change which timestamp to use by @MeredithAnya in #7834
- Debug -> info by @MeredithAnya in #7824
Other
- (admin) Add skip_on_cluster and cluster_name option for target host by @MeredithAnya in #7823
- (ci) Add cancel-in-progress to pull_request prs by @joshuarli in #7873
- (deps) Bump picomatch from 2.3.1 to 2.3.2 in /snuba/admin by @dependabot in #7840
- (eap) Add arrayExists filter for attribute name queries by @volokluev in #7832
- (INC-2103) Increase distributed_ddl_task_timeout to 300 by @MeredithAnya in #7862
- (metrics) Bump sentry-relay version 0.9.25 by @k-fish in #7825
- Bump sentry-arroyo to 2.38.7 by @getsentry-bot in #7857
- Bump sentry-arroyo to 2.38.5 by @getsentry-bot in #7851
- Bump rust-toolchain to 1.88.0 by @MeredithAnya in #7835
Other
- Volo/fix bools autocomplete by @volokluev in #7848
26.3.1
ref(eap-outcomes): updating committing logic, more metrics (#7813) ## Summary This PR improves the committing and backpressure handling in the accepted outcomes consumer, and adds a `--commit-frequency-sec` parameter to control how often commit requests are emitted. ### Changes - **`CommitOutcomes`**: Added a configurable `commit_frequency` (default 10s) so that offsets are only committed on a timer rather than on every poll. Offsets are now only tracked after a successful produce — if the produce step rejects a message, offsets are **not** advanced. On `join`, a forced commit is issued regardless of the timer. - **`OutcomesAggregator`**: Fixed backpressure handling. Previously, when the next step rejected a message during flush, the batch was silently restored and the flush effectively became a no-op. Now, a rejected message is carried over and retried on the next `poll`. While a message is carried over, incoming `submit` calls return `MessageRejected` so upstream applies backpressure. The `join` path also retries carried-over messages until they succeed or the deadline elapses. - **`ProduceOutcome`**: Added a `timer!` metric (`accepted_outcomes.batch_produce_ms`) to track how long each batch produce takes. - **`accepted_outcomes_consumer` CLI**: Added `--commit-frequency-sec` (default `10`) that is plumbed through to `CommitOutcomes`. ### Future considerations - Might have this just run `RunTask` instead of `RunTaskInThreads` given that producing should be pretty quick and batching will be what takes longer, might be better to prevent flushing a batch until the first once is done producing. If we have multiple threads and something fails that would be more data loss if we are committing early --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
26.3.0
fix(cogs): label metrics correctly (#7815)
26.2.1
ref(tests): refactor migration validator tests (#7754) As a continuation of my journey to see where we are spending our time in tests, it seems like a lot of time is spent in the migrations tests, or really any test that requires `clickhouse_db` marker. Some other PRs aim to run only whats neccesary, see https://github.com/getsentry/snuba/pull/7749 and https://github.com/getsentry/snuba/pull/7751. Here `test_validate_all_migrations` is iterating over all the migrations to validate the order, and the only reason it was using the `clickhouse_db` marker is because it was querying clickhouse in order to do some logic to get the local name for a dist table. We don't need to do all that, we can do what we do in admin https://github.com/getsentry/snuba/blob/5fd5b75ea00fd7c30f631aedf5b33598045d267a/snuba/admin/clickhouse/nodes.py#L31 by looking at the table schema for the storages associated with the storage set key
26.2.0
instrument gettrace endpoint more (#7741) Approach: - Goal: get a high-level signal on where the slowdown is (e.g., validate whether post-processing is the issue), not detailed diagnostics (what is the longest it took to process a row or how many attributes such a row has) - Plan to iterate across multiple PRs to progressively narrow down the bottleneck. - Avoid instrumenting every part of the endpoint to prevent trace waterfall bloat. - Hypothesis: _process_results is the likely bottleneck, so instrumentation is focused there. - Instrumentation is intentionally lightweight until we have stronger evidence. - Some instrumentation may be removed as we rule out potential bottlenecks. <img width="792" height="643" alt="Screenshot 2026-02-15 at 5 17 26 PM" src="https://github.com/user-attachments/assets/8ea1a784-3867-4846-bec0-06cff5a04419" /> --------- Co-authored-by: Rachel Chen <rachelchen@MacBookPro.attlocal.net> Co-authored-by: Rachel Chen <rachelchen@PL6VFX9HP4.local>
26.1.0
New Features ✨
- (ast) Add ArbitrarySQL AST node to allow for subquery optimization by @volokluev in #7636
- (capman) Add detailed observability to allocation policy span data by @volokluev in #7638
- (consumers) Send logs for tracing events at or above INFO by @lcian in #7250
- (eap) Gdpr export endpoint by @xurui-c in #7586
- (health) Allow clickhouse check bypass by @onewland in #7600
- (outcomes) Add 'ignored' reason to client discard reasons list by @Lms24 in #7635
- Add metric that tracks "partitions left to optimize" by @kylemumma in #7620
Build / dependencies / internal 🔧
Deps
- Update rdkafka to 0.38 and librdkafka to 2.10.0 by @Dav1dde in #7630
- Bump docker/setup-buildx-action from 3.11.1 to 3.12.0 by @dependabot in #7608
- Bump js-yaml from 3.14.1 to 3.14.2 in /snuba/admin by @dependabot in #7544
- Bump tracing-subscriber from 0.3.18 to 0.3.20 in /rust_snuba by @dependabot in #7613
- Bump actions/upload-artifact from 5 to 6 by @dependabot in #7593
- Bump actions/download-artifact from 6 to 7 by @dependabot in #7594
- Bump actions/cache from 4 to 5 by @dependabot in #7595
Other
- (deletes) Make error log a metric instead by @MeredithAnya in #7627
- (gocd) Bump gocd lib version to v2.18.0 by @dmajere in #7617
- (metrics) Don't write the histogram timing metrics by @volokluev in #7616
- Upgrade to action-setup-venv 3.2.0 by @joshuarli in #7607
Other
- imp(deletes): ongoing mutations check by @onewland in #7639
- prodeng-605: migrate uwsgi to granian by @gi0baro in #7566
- Kill Veneur metrics for good by @volokluev in #7637
- remove documentation from the rust test image by @volokluev in #7633
- upgrade datadog client by @volokluev in #7554
- debug(deletes): log out data so we can inspect allowlist not working by @onewland in #7626
- cleanup(ci): remove useless test and useless function by @volokluev in #7618
- cleanup(gocd): remove pipeline that deploys everything by @onewland in #7587
- deploy: add eap-items LW delete consumer to deploy list in non-STs by @onewland in #7612
- meta: Bump new development version in ddc2e223
25.12.1
New Features ✨
-
feat(deletes): add EAP deletes allowlist for launch by @onewland in #7591
-
feat(eap): record bytes ingested by item type by @onewland in #7604
Bug Fixes 🐛
- fix notHandled errors for search issues and transactions by @volokluev in #7599
Build / dependencies / internal 🔧
-
chore(eap): Try to understand the number of trace IDs we're fetching by @phacops in #7603
-
chore(snuba): take new_datadog out of metrics config by @volokluev in #7598
Other
- ref(admin): allow system queries on nodes sans clusters by @MeredithAnya in #7605
- Update distribution metric naming convention by @volokluev in #7602
- cleanup: emit item type in metrics as string by @onewland in #7588
- cleanup: remove stale docker-compose by @onewland in #7597
- meta: Bump new development version in 8e2624b3
- ref(eap): kill snuba.web.rpc.v1.resolvers.R_eap_items.common.common by @onewland in #7590
25.12.0
New Features ✨
Eap
-
feat(eap): Allow arrays to be queried from EAP by @phacops in #7551
-
feat(oncall): don't send transient cache set errors to sentry, emit metric by @volokluev in #7560
-
feat(self-hosted): Manually run post release script by @hubertdeng123 in #7563
-
feat: support attribute allowlist in traceitemstats by @kylemumma in #7568
Bug Fixes 🐛
-
fix(image): Ensure we install dev dependencies by @hubertdeng123 in #7578
Build / dependencies / internal 🔧
Deps
-
chore(deps): bump actions/create-github-app-token from 2.1.4 to 2.2.0 by @dependabot in #7550
-
chore(deps): bump actions/dependency-review-action from 4.8.1 to 4.8.2 by @dependabot in #7539
-
chore(deps): bump actions/checkout from 5 to 6 by @dependabot in #7549
-
chore(gocd): remove outcomes-billing consumer from python deploys by @onewland in #7564
Other
- ref(eap): fix outcomes based routing retention downsampling by @MeredithAnya in #7592
- ref: bump sentry-arroyo to 2.35.0 by @getsentry-bot in #7583
- Change new_datadog timing to send distribution metrics by @volokluev in #7582
- Double write metrics to new datadog by @volokluev in #7555
- ref: remove build_target for GAR image by @aldy505 in #7571
- ref(redis): increase changes limit from 25 to 100 by @MeredithAnya in #7572
- ref: bump sentry-protos to 0.4.8 by @getsentry-bot in #7569
- ref: bump sentry-arroyo to 2.34.0 by @getsentry-bot in #7567
- dep: bump granian to 2.6 by @gi0baro in #7565
25.11.1
Build / dependencies / internal 🔧
- ref: bump sentry-protos to 0.4.7 by @getsentry-bot in #7559
- chore: enable trace pagination support by default by @kylemumma in #7558
- ref: bump sentry-protos to 0.4.6 by @getsentry-bot in #7553
- ref(consumer): change BytesInsertBatch to support builder pattern by @onewland in #7479
New Features ✨
- feat(eap): record item type counts in batches by @onewland in #7481
- feat(processor): Handle casted columns in UUID column processor by @Zylphrex in #7552
Bug Fixes 🐛
- fix: subscription executors should not crash when there are too many concurrent queries by @xurui-c in #7547
- fix(gocd): fix gocd filters for rs/py deploys by @onewland in #7545
Other
- ref(runtime-config): update write_node_replacements_global default by @MeredithAnya in #7556
- feat(query-pipeline): Add configs to customize maximum size of a query by @phacops in #7546
- ref(runtime-config): remove *_matview_version by @MeredithAnya in #7543
- ref(runtime-config): remove use_split by @MeredithAnya in #7540
- meta: Bump new development version in 2fdaba59
- ref(runtime-config): remove use_readthrough_query_cache by @MeredithAnya in #7541