🚀 Features
Query planner dry-run option (PR #6656)
This PR adds a new dry-run
option to the Apollo-Expose-Query-Plan
header value that emits the query plans back to Studio for visualizations. This new value will only emit the query plan, and abort execution. This can be helpful for tools like rover
, where query plan generation is needed but not full runtime, or for potentially prewarming query plan caches out of band.
curl --request POST --include \
--header 'Accept: application/json' \
--header 'Apollo-Expose-Query-Plan: dry-run' \
--url 'http://127.0.0.1:4000/' \
--data '{"query": "{ topProducts { upc name } }"}'
By @aaronArinder and @lennyburdette in #6656.
Enable Remote Proxy Downloads
This enables users without direct download access to specify a remote proxy mirror location for the github download of
the Apollo Router releases.
By @LongLiveCHIEF in #6667
🐛 Fixes
Header propagation rules passthrough (PR #6690)
Header propagation contains logic to prevent headers from being propagated more than once. This was broken
in #6281 which always considered a header propagated regardless if a rule
actually matched.
This PR alters the logic so that a header is marked as fixed only when it's populated.
The following will now work again:
headers:
all:
request:
- propagate:
named: a
rename: b
- propagate:
named: b
Note that defaulting a header WILL populate it, so make sure to include your defaults last in your propagation
rules.
headers:
all:
request:
- propagate:
named: a
rename: b
default: defaulted # This will prevent any further rule evaluation for header `b`
- propagate:
named: b
Instead, make sure that your headers are defaulted last:
headers:
all:
request:
- propagate:
named: a
rename: b
- propagate:
named: b
default: defaulted # OK
By @BrynCooke in #6690
Entity cache: fix directive conflicts in cache-control header (Issue #6441)
Unnecessary cache-control directives are created in cache-control header. The router will now filter out unnecessary values from the cache-control
header when the request resolves. So if there's max-age=10, no-cache, must-revalidate, no-store
, the expected value for the cache-control header would simply be no-store
. Please see the MDN docs for justification of this reasoning: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control#preventing_storing
Query Planning: fix __typename
selections in sibling typename optimization
The query planner uses an optimization technique called "sibling typename", which attaches __typename
selections to their sibling selections so the planner won't need to plan them separately.
Previously, when there were multiple identical selections and one of them has a __typename
attached, the query planner could pick the one without the attachment, effectively losing a __typename
selection.
Now, the query planner favors the one with a __typename
attached without losing the __typename
selection.
📃 Configuration
Promote experimental_otlp_tracing_sampler
config to stable (PR #6070)
The router's otlp tracing sampler feature that was previously experimental is now generally available.
If you used its experimental configuration, you should migrate to the new configuration option:
telemetry.apollo.experimental_otlp_tracing_sampler
is nowtelemetry.apollo.otlp_tracing_sampler
The experimental configuration option is now deprecated. It remains functional but will log warnings.
Promote experimental_local_manifess
config for persisted queries to stable
The experimental_local_manifests
PQ configuration option is being promoted to stable. This change updates the configuration option name and any references to it, as well as the related documentation. The experimental_
usage remains valid as an alias for existing usages.
By @trevor-scheer in #6564
🛠 Maintenance
Reduce demand control allocations on start/reload (PR #6754)
When demand control is enabled, the router now preallocates capacity for demand control's processed schema and shrinks to fit after processing. When it's disabled, the router skips the type processing entirely to minimize startup impact.
By @tninesling in #6754