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.
🚀 Features
Promote HTTP request size limit from experimental to general availability (PR #4442)
In this release, the router YAML configuration option to set the maximum size of an HTTP request body is promoted from experimental to general availability. The option was previously
experimental_http_max_request_bytes
and is nowhttp_max_request_bytes
.The previous
experimental_http_max_request_bytes
option works but produces a warning.To migrate, rename
experimental_http_max_request_bytes
to the generally availablehttp_max_request_bytes
option:By default, the Apollo Router limits the size of the HTTP request body it reads from the network to 2 MB. Before increasing this limit, consider testing performance in an environment similar to your production, especially if some clients are untrusted. Many concurrent large requests can cause the router to run out of memory.
By @SimonSapin in #4442
New configuration options for Redis username and password (Issue #4346)
This release introduces new configuration options to set your Redis username and password.
Example of configuration:
By @bnjjj in #4453
Support Redis key namespace (Issue #4247)
This release introduces support for Redis key namespace.
The namespace, if provided, is prefixed to the key:
namespace:key
.By @Geal in #4458
🐛 Fixes
Fix the Datadog default tracing exporter URL (Issue #4415)
The default URL for the Datadog exporter was incorrectly set to
http://localhost:8126/v0.4/traces
. This caused issues for users running different agent versions.This is now fixed and matches the exporter URL of
http://127.0.0.1:8126
.By @BrynCooke in #4444
Set application default log level to
info
(PR #4451)This release sets the default log level to
info
for an entire application, including custom external plugins, when theRUST_LOG
environment variable isn't set.Previously, if you set the
--log
command-line option orAPOLLO_RUST_LOG
environment variable, their log level setting impacted more than theapollo_router
crate and caused custom plugins withinfo
logs or metrics to have to manually setRUST_LOG=info
.By @bnjjj in #4451
Fix response format for statically skipped root selection set (Issue #4397)
Previously, the Apollo Router didn't return responses with the same format for some operations with a root selection set that were skipped by
@skip
or@include
directives.For example, if you hardcoded the parameter in a
@skip
directive:Or if you used a variable:
The router returned responses with different formats.
This release fixes the issue, and the router returns the same response for both examples:
{ "data": {}}
By @bnjjj in #4466
Fix building entity representations with inline fragments (PR #4441)
Previously, when applying a selection set to an entity reference before it's used in a fetch node, the router would drop data from the reference when it selected using an inline fragment, for example
@requires(fields: "... on Foo { a } ... on Bar { b }")
).This release uses a more flexible abstract type / concrete type check when applying a selection set to an entity reference before it's used in a fetch node.
By @lennyburdette in #4441
Improve logging for JWKS download failures (Issue #4448)
To enable users to debug JWKS download and parse failures more easily, we've added more detailed logging to the router. The router now logs the following information when a JWKS download or parse fails:
Enabling debug logs via
APOLLO_LOG=debug
or--logs DEBUG
will show the full JWKS content being parsed:By @BrynCooke in #4449
Rename batching metric for naming convention conformance (PR #4424)
In this release, the
apollo_router.operations.batching
metric has been renamed toapollo.router.operations.batching
to conform to our naming convention of aapollo.router.
prefix.By @bnjjj in #4424
Improve JWKS parse error handling (Issue #4463)
When parsing a JSON Web Key Set (JWKS), the router now ignores any JWK that fails to parse rather than failing the entire JWKS parse.
This can happen when the JWK is malformed, or when a JWK uses an unknown algorithm. When this happens a warning is output to the logs, for example:
Log messages have the following attributes:
alg
- the JWK algorithm if known or<unknown>
index
- the index of the JWK within the JWKSurl
- the URL of the JWKS that had the issueBy @BrynCooke in #4465
make
OperationKind
public (Issue #4410)OperationKind
was already used in a public field but the type itself was still private.By @Geal in #4489
Update to Federation v2.6.3 (PR #4468)
This federation update contains query planning fixes for:
@interfaceObject
@requires
By @Geal in #4468
🛠 Maintenance
Pre-built binaries are only available for Apple Silicon (Issue #3902)
Prior to this release, macOS binaries were produced on Intel build machines in our CI pipeline. The binaries produced would also work on Apple Silicon (M1, etc.. chips) through the functionality provided by Rosetta2.
Our CI provider has announced the deprecation of the macOS Intel build machines and we are updating our build pipeline to use the new Apple Silicon based machines.
This will have the following effects:
We have raised an issue that describes options for Intel based macOS users. Please let us know in that issue if the alternatives we suggest (e.g., Docker, source build) don't work for you so we can discuss alternatives.
By @garypen in #4484