Apollo Router Changelogs
This page contains the changelog for the latest release of Apollo Router.
Go to GitHub to view changelogs for all router releases.
v2.2.1
π Fixes
Redis connection leak on schema changes (PR #7319)
The router performs a 'hot reload' whenever it detects a schema update. During this reload, it effectively instantiates a new internal router, warms it up (optional), redirects all traffic to this new router, and drops the old internal router.
This change fixes a bug in that "drop" process where the Redis connections are never told to terminate, even though the Redis client pool is dropped. This leads to an ever-increasing number of inactive Redis connections as each new schema comes in and goes out of service, which eats up memory.
The solution adds a new up-down counter metric, apollo.router.cache.redis.connections
, to track the number of open Redis connections. This metric includes a kind
label to discriminate between different Redis connection pools, which mirrors the kind
label on other cache metrics (ie apollo.router.cache.hit.time
).
Propagate client name and version modifications through telemetry (PR #7369)
The router accepts modifications to the client name and version (apollo::telemetry::client_name
and apollo::telemetry::client_version
), but those modifications are not currently propagated through the telemetry layers to update spans and traces.
This PR moves where the client name and version are bound to the span, so that the modifications from plugins on the router
service are propagated.
Progressive overrides are not disabled when connectors are used (PR #7351)
Prior to this fix, introducing a connector disabled the progressive override plugin.
Avoid unnecessary cloning in the deduplication plugin (PR #7347)
The deduplication plugin always cloned responses, even if there were not multiple simultaneous requests that would benefit from the cloned response.
We now check to see if deduplication will provide a benefit before we clone the subgraph response.
There was also an undiagnosed race condition which meant that a notification could be missed. This would have resulted in additional work being performed as the missed notification would have led to another subgraph request.
Spans should only include path in http.route
(PR #7390)
Per the OpenTelemetry spec, the http.route
should only include "the matched route, that is, the path template used in the format used by the respective server framework."
The router currently sends the full URI in http.route
, which can be high cardinality (ie /graphql?operation=one_of_many_values
). After this change, the router will only include the path (/graphql
).
Decrease log level for JWT authentication failure (PR #7396)
A recent change inadvertently increased the log level of JWT authentication failures from info
to error
. This reverts that change returning it to the previous behavior.
Avoid fractional decimals when generating apollo.router.operations.batching.size
metrics for GraphQL request batch sizes (PR #7306)
Corrects the calculation of the apollo.router.operations.batching.size
metric to reflect accurate batch sizes rather than occasionally returning fractional numbers.
π Configuration
Log warnings for deprecated coprocessor context
configuration usage (PR #7349)
context: true
is an alias for context: deprecated
but should not be used. The router now logs a runtime warning on startup if you do use it.
Instead of:
coprocessor:
supergraph:
request:
context: true # β
Explicitly use deprecated
or all
:
coprocessor:
supergraph:
request:
context: deprecated # β
See the 2.x upgrade guide for more detailed upgrade steps.
π Maintenance
Linux: Compatibility with glibc 2.28 or newer (PR #7355)
The default build images provided in our CI environment have a relatively modern version of glibc
(2.35). This means that on some distributions, notably those based around RedHat, it wasn't possible to use our binaries since the version of glibc
was older than 2.35.
We now maintain a build image which is based on a distribution with glibc
2.28. This is old enough that recent releases of either of the main Linux distribution families (Debian and RedHat) can make use of our binary releases.
Reject @skip
/@include
on subscription root fields in validation (PR #7338)
This implements a GraphQL spec RFC, rejecting subscriptions in validation that can be invalid during execution.
π Documentation
Query planning best practices (PR #7263)
Added a new page under Routing docs about Query Planning Best Practices.