Skip to content

Releases: apollographql/router

v1.61.5-rc.2

17 Apr 19:58
Compare
Choose a tag to compare
v1.61.5-rc.2 Pre-release
Pre-release
1.61.5-rc.2

v1.61.5-rc.1

17 Apr 19:42
Compare
Choose a tag to compare
v1.61.5-rc.1 Pre-release
Pre-release
1.61.5-rc.1

v1.61.5-rc.0

17 Apr 05:55
Compare
Choose a tag to compare
v1.61.5-rc.0 Pre-release
Pre-release
1.61.5-rc.0

v2.1.3

16 Apr 13:11
c287a83
Compare
Choose a tag to compare

🐛 Fixes

Entity-cache: handle multiple key directives (PR #7228)

This PR fixes a bug in entity caching introduced by the fix in #6888 for cases where several @key directives with different fields were declared on a type as documented here.

For example if you have this kind of entity in your schema:

type Product @key(fields: "upc") @key(fields: "sku") {
  upc: ID!
  sku: ID!
  name: String
}

By @duckki & @bnjjj in #7228

Improve Error Message for Invalid JWT Header Values (PR #7121)

Enhanced parsing error messages for JWT Authorization header values now provide developers with clear, actionable feedback while ensuring that no sensitive data is exposed.

Examples of the updated error messages:

-         Header Value: '<invalid value>' is not correctly formatted. prefix should be 'Bearer'
+         Value of 'authorization' JWT header should be prefixed with 'Bearer'
-         Header Value: 'Bearer' is not correctly formatted. Missing JWT
+         Value of 'authorization' JWT header has only 'Bearer' prefix but no JWT token

By @IvanGoncharov in #7121

Fix crash when an invalid query plan is generated (PR #7214)

When an invalid query plan is generated, the router could panic and crash.
This could happen if there are gaps in the GraphQL validation implementation.
Now, even if there are unresolved gaps, the router will handle it gracefully and reject the request.

By @goto-bus-stop in #7214

v2.1.3-rc.1

16 Apr 07:13
Compare
Choose a tag to compare
v2.1.3-rc.1 Pre-release
Pre-release
2.1.3-rc.1

v2.1.3-rc.0

16 Apr 06:24
Compare
Choose a tag to compare
v2.1.3-rc.0 Pre-release
Pre-release
2.1.3-rc.0

v1.61.4

16 Apr 10:20
43105d1
Compare
Choose a tag to compare

🐛 Fixes

Entity-cache: handle multiple key directives (PR #7228)

This PR fixes a bug in entity caching introduced by the fix in #6888 for cases where several @key directives with different fields were declared on a type as documented here.

For example if you have this kind of entity in your schema:

type Product @key(fields: "upc") @key(fields: "sku") {
  upc: ID!
  sku: ID!
  name: String
}

By @duckki & @bnjjj in #7228

v1.61.4-rc.0

15 Apr 14:16
Compare
Choose a tag to compare
v1.61.4-rc.0 Pre-release
Pre-release
1.61.4-rc.0

v2.1.2

14 Apr 13:21
ab61cf2
Compare
Choose a tag to compare

🐛 Fixes

Support @context/@fromContext when using Connectors (PR #7132)

This fixes a bug that dropped the @context and @fromContext directives when introducing a connector.

By @lennyburdette in #7132

📃 Configuration

Add new configurable delivery pathway for high cardinality Apollo Studio metrics (PR #7138)

This change provides a secondary pathway for new "realtime" Studio metrics whose delivery interval is configurable due to their higher cardinality. These metrics will respect telemetry.apollo.batch_processor.scheduled_delay as configured on the realtime path.

All other Apollo metrics will maintain the previous hardcoded 60s send interval.

By @rregitsky and @timbotnik in #7138

v1.61.3

14 Apr 13:13
243c9a1
Compare
Choose a tag to compare

🐛 Fixes

Fix potential telemetry deadlock (PR #7142)

The tracing_subscriber crate uses RwLocks to manage access to a Span's Extensions. Deadlocks are possible when
multiple threads access this lock, including with reentrant locks:

// Thread 1              |  // Thread 2
let _rg1 = lock.read();  |
                         |  // will block
                         |  let _wg = lock.write();
// may deadlock          |
let _rg2 = lock.read();  |

This fix removes an opportunity for reentrant locking while extracting a Datadog identifier.

There is also a potential for deadlocks when the root and active spans' Extensions are acquired at the same time, if
multiple threads are attempting to access those Extensions but in a different order. This fix removes a few cases
where multiple spans' Extensions are acquired at the same time.

By @carodewig in #7142

Connection shutdown timeout (PR #7058)

When a connection is closed we call graceful_shutdown on hyper and then await for the connection to close.

Hyper 0.x has various issues around shutdown that may result in us waiting for extended periods for the connection to eventually be closed.

This PR introduces a configurable timeout from the termination signal to actual termination, defaulted to 60 seconds. The connection is forcibly terminated after the timeout is reached.

To configure, set the option in router yaml. It accepts human time durations:

supergraph:
  connection_shutdown_timeout: 60s

Note that even after connections have been terminated the router will still hang onto pipelines if early_cancel has not been configured to true. The router is trying to complete the request.

Users can either set early_cancel to true

supergraph:
  early_cancel: true

AND/OR use traffic shaping timeouts:

traffic_shaping:
  router:
    timeout: 60s

By @BrynCooke in #7058

Fix crash when an invalid query plan is generated (PR #7214)

When an invalid query plan is generated, the router could panic and crash.
This could happen if there are gaps in the GraphQL validation implementation.
Now, even if there are unresolved gaps, the router will handle it gracefully and reject the request.

By @goto-bus-stop in #7214

Improve Error Message for Invalid JWT Header Values (PR #7121)

Enhanced parsing error messages for JWT Authorization header values now provide developers with clear, actionable feedback while ensuring that no sensitive data is exposed.

Examples of the updated error messages:

-         Header Value: '<invalid value>' is not correctly formatted. prefix should be 'Bearer'
+         Value of 'authorization' JWT header should be prefixed with 'Bearer'
-         Header Value: 'Bearer' is not correctly formatted. Missing JWT
+         Value of 'authorization' JWT header has only 'Bearer' prefix but no JWT token

By @IvanGoncharov in #7121