chore(deps): pin transitive h2 dependency at minimum v0.4.13#9033
Closed
theJC wants to merge 11 commits intoapollographql:devfrom
Closed
chore(deps): pin transitive h2 dependency at minimum v0.4.13#9033theJC wants to merge 11 commits intoapollographql:devfrom
theJC wants to merge 11 commits intoapollographql:devfrom
Conversation
Contributor
✅ AI Style Review — No Changes DetectedNo MDX files were changed in this pull request. Review Log: View detailed log
|
Adds h2 as an explicit workspace dependency with a minimum version of 0.4.13 to ensure the router picks up the latest patch release. Without an explicit declaration, h2 is only a transitive dependency and Renovate will not manage it, leaving the version pinned in Cargo.lock indefinitely unless someone manually runs cargo update. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
0608f3b to
beecf71
Compare
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Adds h2.workspace = true to apollo-router/Cargo.toml so the minimum version floor declared in [workspace.dependencies] is actually enforced by the cargo resolver, and Renovate can manage future bumps via the workspace entry. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replaces the previous Cargo.lock update (which contained 7 unintended resolver re-selections of socket2 and windows-sys versions) with a targeted cargo update -p h2 --precise 0.4.13. Only h2 and its entry in the apollo-router dependency list change. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…deps The [workspace.dependencies] table is for deps used in more than one workspace member. h2 is a transitive-only dep being pinned, so it belongs directly in apollo-router/Cargo.toml following the same pattern as the existing socket2 declaration. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
10 tasks
Contributor
Merged
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.
Summary
Updates the transitive `h2` dependency `0.4.12 → 0.4.13`. Because `h2` was only present in `Cargo.lock` as a transitive dependency and not declared in any `Cargo.toml`, Renovate had no visibility into it and would never open a PR to bump it. This PR adds an explicit `h2 = "0.4.13"` declaration to `apollo-router/Cargo.toml`, which both enforces the minimum version floor immediately and brings `h2` under Renovate's management for future patch releases. There are no API or behavioral changes to router code; only the `Cargo.toml` declaration and `Cargo.lock` pin are affected.
Fixes in h2 0.4.13 and relevance to the router
Many Router customers use h2 as a client when connecting to subgraphs. All three fixes in this release are client-side.
Capacity deadlock under concurrent streams (hyperium/h2#860) — high relevance
Under concurrent load with `max_concurrent_streams` limits in effect, flow-control capacity could be assigned to streams still in `pending_open` state. Those streams could never consume the capacity, starving already-open streams and permanently freezing all outgoing traffic on the connection with no error surfaced. This is directly triggerable in the router: any subgraph behind Envoy or a gRPC backend advertises a `max_concurrent_streams` limit (Envoy defaults to 100), and under production load the router will routinely queue more concurrent requests than that limit allows.
OTel tracing span lifetime leak (hyperium/h2#868) — high relevance
The h2 `Connection` object captured the active tracing span at connection creation time as its parent, keeping that span alive for the entire lifetime of the pooled connection. Since the router wraps every subgraph request in an OpenTelemetry span and connections are pooled and long-lived, affected spans could linger indefinitely under sustained traffic — never being exported to the tracing backend and accumulating in memory.
Flow-control stall on padded DATA frames (hyperium/h2#869) — lower relevance for typical subgraphs, higher for connectors
Padding bytes in `DATA` frames were not being returned to the flow-control window, causing the connection window to drain to zero and permanently stalling downloads with no error. Typical GraphQL/gRPC subgraphs do not send padded frames, but router connectors calling arbitrary HTTP APIs (e.g., Google Cloud Storage or CDN-backed endpoints) can encounter this. Note: the uplink client currently uses reqwest without the `http2` feature, so it is not affected today — but should the uplink client be upgraded to use HTTP/2 (the primary uplink endpoint is GCP infrastructure, which is a known source of padded frames), this would become an additional exposure point.
Test plan
🤖 Generated with Claude Code