Repository navigation
fix: backport non-breaking 0.16 fixes and advisories to 0.15 - #229
Merged
Merged
Conversation
…223) * fix(kafka): build the producer at the first publish, not at connect ## Summary `KafkaClient::connect` built an idempotent producer for every client, and librdkafka requests a producer id 500 ms after creation. A broker authorizes that as `IdempotentWrite` on the cluster or `Write` on a topic, which a service that only consumes lacks. - The producer is now built at the first publish, on a blocking thread, and shared by every clone. - `ping` uses one metadata consumer, built at the first probe under the probe's timeout, so a health check builds no producer. - `shutdown` waits for every build in flight, a cancelled publish's included, and refuses a later one. - A configuration librdkafka refuses is reported by the first client built. ## Tests - New `kafka_consume_only_mock`: `a_client_that_only_consumes_sends_no_init_producer_id`, red before the fix with one `InitProducerId`, and `a_client_closed_before_any_publish_builds_no_producer`. - Seven new `client::tests`: `connect_builds_no_producer_and_concurrent_clones_share_one`, `a_publish_after_shutdown_builds_no_producer`, `rejected_tls_material_fails_the_first_publish_and_leaves_the_cell_empty`, `a_producer_build_blocked_in_librdkafka_leaves_the_runtime_free`, `shutdown_waits_for_a_producer_build_in_flight`, `a_probe_times_out_while_its_metadata_consumer_is_built`, `shutdown_waits_for_a_build_whose_publish_was_cancelled`. ## Test plan - `cargo nextest run --features <kafka set>` on the mock files and the Docker-backed `kafka_ping` (27 passed), `--lib` (641 passed), `--no-default-features` (379 passed) - The five Docker-backed Kafka suites (109 passed) - `cargo fmt -- --check` and `cargo clippy -D warnings` on every CI feature set, the nine `--lib` sets included * fix(kafka): build the metadata client at connect and drop the build lock `connect` builds the consumer-type metadata client `ping` probes with, where it used to build the producer. A connection setting librdkafka refuses therefore fails at startup again, and a client keeps one idle librdkafka client as before. The probe in `ping` fetches on that client, so the lazily built metadata cell and its timeout case are gone. `shutdown` no longer holds a lock over producer builds. The failing initializer on the producer cell already waits for a build in flight. The cancelled token refuses every build that starts later, so the lock added nothing. The doc comment on the producer config states the idempotence rationale in two sentences. The comments on the lazy producer shrink to what the code does not say. The ACL paragraph in the Kafka backend page narrows "a service that only consumes" to a service that never publishes, through `publisher()` or a republish. Tests: `rejected_tls_material_fails_connect`, `a_probe_reports_a_refused_configuration` and `a_failed_producer_build_leaves_the_cell_empty_for_the_next_publish` cover the connect-time refusal and the producer build failure. Two tests cover the MSK IAM metadata client: `msk_iam_connect_rejects_tls_material_librdkafka_refuses` and `msk_iam_ping_times_out_against_a_non_routable_broker`. The tests `shutdown_waits_for_a_build_whose_publish_was_cancelled` and `a_probe_times_out_while_its_metadata_consumer_is_built` go with the code they tested. (cherry picked from commit 026e782)
Bumps the cargo group with 1 update in the / directory: [xxhash-rust](https://github.com/DoumanAsh/xxhash-rust). Updates `xxhash-rust` from 0.8.15 to 0.8.19 - [Commits](https://github.com/DoumanAsh/xxhash-rust/commits) --- updated-dependencies: - dependency-name: xxhash-rust dependency-version: 0.8.19 dependency-type: indirect dependency-group: cargo ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> (cherry picked from commit 62f95c4)
Bumps the cargo group with 1 update in the / directory: [hickory-resolver](https://github.com/hickory-dns/hickory-dns). Updates `hickory-resolver` from 0.26.1 to 0.26.3 - [Release notes](https://github.com/hickory-dns/hickory-dns/releases) - [Changelog](https://github.com/hickory-dns/hickory-dns/blob/main/CHANGELOG.md) - [Commits](hickory-dns/hickory-dns@v0.26.1...v0.26.3) --- updated-dependencies: - dependency-name: hickory-resolver dependency-version: 0.26.3 dependency-type: indirect dependency-group: cargo ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> (cherry picked from commit 38355fb)
rustls 0.23.45 -> 0.23.46 (RUSTSEC-2026-0346/0347/0348/0349) quinn-proto 0.11.15 -> 0.11.19 (RUSTSEC-2026-0338/0339/0340/0341/0342) (cherry picked from commit ee70171)
…ology test (#228) Bump ctutils, rustls-webpki, webpki-roots, webpki-root-certs, zstd-sys and tokio past RUSTSEC-2026-0381/0382/0383/0385/0386/0410. Override the docs site's transitive dompurify, hono, katex, source-map-js, compression, toml and vite to patched versions; the blanket vite override was pinning 8.0.16. The RabbitMQ external-topology test awaited a publisher confirm on a channel that was never put in confirm mode, so the await resolved immediately and the passive queue.declare could read the message count before the queue had enqueued the message. Select confirm mode before the infra publish. (cherry picked from commit 339d0c5)
Deploying with
|
| Status | Name | Latest Commit | Preview URL | Updated (UTC) |
|---|---|---|---|---|
| ✅ Deployment successful! View logs |
shove-docs | d0ebcc6 | Commit Preview URL Branch Preview URL |
Oct 28 2026, 01:12 PM |
Codecov Report❌ Patch coverage is
📢 Thoughts on this report? Let us know! |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Backports the non-breaking changes from 0.16.0 onto
release/0.15(cut atv0.15.0) for a 0.15.1 patch release.Included
docs/pages/backends/kafka.mdx: the replay bullet in main also describes fix(kafka): return the final commit failure of a stopping consumer instead of a clean exit #219'sShoveError::Commit, so only fix(kafka): keep the record behind an in-place wait unread on stop and end the wait on revoke #220's sentence is kept. No code conflict.ci.yml: run the push matrix onrelease/**too, so the release gate finds a ci.yml run for the commit on this branchExcluded
ShoveError::Commit, group exit code 1 (behaviour change)CommitPolicy::PerRecord(builds on fix(kafka): return the final commit failure of a stopping consumer instead of a clean exit #219)Verification
On this branch, locally:
cargo fmt -- --check;cargo clippy --all-features --all-targets -- -D warnings;cargo clippy --no-default-features --all-targets -- -D warningscargo audit --deny warnings: cleancargo nextest run --no-default-features: 376 passedcargo nextest run --features inmemory,metrics,sbe,env-config: 807 passedcargo nextest run --no-default-features --features kafka,test-support,audit,metrics,sbe,env-config,inmemory --test-threads 4(Docker): 1397 passed, 1 skipped, no retries🤖 Generated with Claude Code