Skip to content

Commit c4d321d

Browse files
authored
prep release: v2.10.1 (#9007)
1 parent 2cff3b2 commit c4d321d

File tree

11 files changed

+88
-78
lines changed

11 files changed

+88
-78
lines changed

.changesets/exp_hoist_orphan_errors.md

Lines changed: 0 additions & 43 deletions
This file was deleted.

.changesets/fix_license_handling.md

Lines changed: 0 additions & 7 deletions
This file was deleted.

CHANGELOG.md

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,66 @@
22

33
This project adheres to [Semantic Versioning v2.0.0](https://semver.org/spec/v2.0.0.html).
44

5+
# [2.10.1] - 2026-03-11
6+
7+
## 🐛 Fixes
8+
9+
### Enforce feature restrictions for warning-state licenses
10+
11+
The router now enforces license restrictions even when a license is in a warning state. Previously, warning-state licenses could bypass enforcement for restricted features.
12+
13+
If your deployment uses restricted features, the router returns an error instead of continuing to run.
14+
15+
By [@aaronArinder](https://github.com/aaronArinder) in https://github.com/apollographql/router/pull/8768
16+
17+
## 🧪 Experimental
18+
19+
### Add `experimental_hoist_orphan_errors` to control orphan error path assignment
20+
21+
The GraphQL specification requires that errors include a `path` pointing to the most specific field where the error occurred. When a subgraph returns entity errors without valid paths, the router's default behavior is its closest attempt at spec compliance: it assigns each error to every matching entity path in the response. This is the correct behavior when subgraphs respond correctly.
22+
23+
However, when a subgraph returns a large number of entity errors without valid paths — for example, 2000 errors for 2000 expected entities — this causes a multiplicative explosion in the error array that can lead to significant memory pressure and out-of-memory kills. The root cause is the subgraph: a spec-compliant subgraph includes correct paths on its entity errors, and fixing the subgraph is the right long-term solution.
24+
25+
The new `experimental_hoist_orphan_errors` configuration provides an important mitigation while you work toward that fix. When enabled, the router assigns each orphaned error to the nearest non-array ancestor path instead of duplicating it across every entity. This trades spec-precise path assignment for substantially reduced error volume in the response — a conscious trade-off, not a strict improvement.
26+
27+
To target a specific subgraph:
28+
29+
```yaml
30+
experimental_hoist_orphan_errors:
31+
subgraphs:
32+
my_subgraph:
33+
enabled: true
34+
```
35+
36+
To target all subgraphs:
37+
38+
```yaml
39+
experimental_hoist_orphan_errors:
40+
all:
41+
enabled: true
42+
```
43+
44+
To target all subgraphs except one:
45+
46+
```yaml
47+
experimental_hoist_orphan_errors:
48+
all:
49+
enabled: true
50+
subgraphs:
51+
noisy_one:
52+
enabled: false
53+
```
54+
55+
Per-subgraph settings override `all`. Note that this feature reduces the number of propagated errors but doesn't impose a hard cap — if your subgraph returns an extremely large number of errors, the router still processes all of them.
56+
57+
You'll likely know if you need this. Use it sparingly, and enable it only if you're affected and have been advised to do so. The behavior of this option is expected to change in a future release.
58+
59+
For full configuration reference and additional examples, see the [`experimental_hoist_orphan_errors` documentation](https://www.apollographql.com/docs/graphos/routing/configuration/yaml#experimental_hoist_orphan_errors).
60+
61+
By [@aaronArinder](https://github.com/aaronArinder) in https://github.com/apollographql/router/pull/8998
62+
63+
64+
565
# [2.10.0] - 2025-12-11
666

767
## 🚀 Features

Cargo.lock

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,7 @@ dependencies = [
212212

213213
[[package]]
214214
name = "apollo-federation"
215-
version = "2.10.1-rc.2"
215+
version = "2.10.1"
216216
dependencies = [
217217
"apollo-compiler",
218218
"apollo-federation",
@@ -286,7 +286,7 @@ dependencies = [
286286

287287
[[package]]
288288
name = "apollo-router"
289-
version = "2.10.1-rc.2"
289+
version = "2.10.1"
290290
dependencies = [
291291
"addr2line 0.25.1",
292292
"ahash",
@@ -462,7 +462,7 @@ dependencies = [
462462

463463
[[package]]
464464
name = "apollo-router-benchmarks"
465-
version = "2.10.1-rc.2"
465+
version = "2.10.1"
466466
dependencies = [
467467
"apollo-parser",
468468
"apollo-router",

apollo-federation/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "apollo-federation"
3-
version = "2.10.1-rc.2"
3+
version = "2.10.1"
44
authors = ["The Apollo GraphQL Contributors"]
55
edition = "2024"
66
description = "Apollo Federation"

apollo-router-benchmarks/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "apollo-router-benchmarks"
3-
version = "2.10.1-rc.2"
3+
version = "2.10.1"
44
authors = ["Apollo Graph, Inc. <packages@apollographql.com>"]
55
edition = "2021"
66
license = "Elastic-2.0"

apollo-router/Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "apollo-router"
3-
version = "2.10.1-rc.2"
3+
version = "2.10.1"
44
authors = ["Apollo Graph, Inc. <packages@apollographql.com>"]
55
repository = "https://github.com/apollographql/router/"
66
documentation = "https://docs.rs/apollo-router"
@@ -59,7 +59,7 @@ snapshot = []
5959
addr2line = "0.25.0"
6060
anyhow = "1.0.86"
6161
apollo-compiler.workspace = true
62-
apollo-federation = { path = "../apollo-federation", version = "=2.10.1-rc.2" }
62+
apollo-federation = { path = "../apollo-federation", version = "=2.10.1" }
6363
async-compression = { version = "0.4.6", features = [
6464
"tokio",
6565
"futures-io",

docs/shared/k8s-manual-config.mdx

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@ kind: ServiceAccount
66
metadata:
77
name: release-name-router
88
labels:
9-
helm.sh/chart: router-2.10.1-rc.2
9+
helm.sh/chart: router-2.10.1
1010
app.kubernetes.io/name: router
1111
app.kubernetes.io/instance: release-name
12-
app.kubernetes.io/version: "v2.10.1-rc.2"
12+
app.kubernetes.io/version: "v2.10.1"
1313
app.kubernetes.io/managed-by: Helm
1414
---
1515
# Source: router/templates/secret.yaml
@@ -18,10 +18,10 @@ kind: Secret
1818
metadata:
1919
name: "release-name-router"
2020
labels:
21-
helm.sh/chart: router-2.10.1-rc.2
21+
helm.sh/chart: router-2.10.1
2222
app.kubernetes.io/name: router
2323
app.kubernetes.io/instance: release-name
24-
app.kubernetes.io/version: "v2.10.1-rc.2"
24+
app.kubernetes.io/version: "v2.10.1"
2525
app.kubernetes.io/managed-by: Helm
2626
data:
2727
managedFederationApiKey: "UkVEQUNURUQ="
@@ -32,10 +32,10 @@ kind: ConfigMap
3232
metadata:
3333
name: release-name-router
3434
labels:
35-
helm.sh/chart: router-2.10.1-rc.2
35+
helm.sh/chart: router-2.10.1
3636
app.kubernetes.io/name: router
3737
app.kubernetes.io/instance: release-name
38-
app.kubernetes.io/version: "v2.10.1-rc.2"
38+
app.kubernetes.io/version: "v2.10.1"
3939
app.kubernetes.io/managed-by: Helm
4040
data:
4141
configuration.yaml: |
@@ -55,10 +55,10 @@ kind: Service
5555
metadata:
5656
name: release-name-router
5757
labels:
58-
helm.sh/chart: router-2.10.1-rc.2
58+
helm.sh/chart: router-2.10.1
5959
app.kubernetes.io/name: router
6060
app.kubernetes.io/instance: release-name
61-
app.kubernetes.io/version: "v2.10.1-rc.2"
61+
app.kubernetes.io/version: "v2.10.1"
6262
app.kubernetes.io/managed-by: Helm
6363
spec:
6464
type: ClusterIP
@@ -81,10 +81,10 @@ kind: Deployment
8181
metadata:
8282
name: release-name-router
8383
labels:
84-
helm.sh/chart: router-2.10.1-rc.2
84+
helm.sh/chart: router-2.10.1
8585
app.kubernetes.io/name: router
8686
app.kubernetes.io/instance: release-name
87-
app.kubernetes.io/version: "v2.10.1-rc.2"
87+
app.kubernetes.io/version: "v2.10.1"
8888
app.kubernetes.io/managed-by: Helm
8989
annotations:
9090

@@ -103,10 +103,10 @@ spec:
103103
annotations:
104104
kubectl.kubernetes.io/default-container: router
105105
labels:
106-
helm.sh/chart: router-2.10.1-rc.2
106+
helm.sh/chart: router-2.10.1
107107
app.kubernetes.io/name: router
108108
app.kubernetes.io/instance: release-name
109-
app.kubernetes.io/version: "v2.10.1-rc.2"
109+
app.kubernetes.io/version: "v2.10.1"
110110
app.kubernetes.io/managed-by: Helm
111111
spec:
112112
serviceAccountName: release-name-router
@@ -117,7 +117,7 @@ spec:
117117
- name: router
118118
securityContext:
119119
{}
120-
image: "ghcr.io/apollographql/router:v2.10.1-rc.2"
120+
image: "ghcr.io/apollographql/router:v2.10.1"
121121
imagePullPolicy: IfNotPresent
122122
args:
123123
- --hot-reload
@@ -171,10 +171,10 @@ kind: Pod
171171
metadata:
172172
name: "release-name-router-test-connection"
173173
labels:
174-
helm.sh/chart: router-2.10.1-rc.2
174+
helm.sh/chart: router-2.10.1
175175
app.kubernetes.io/name: router
176176
app.kubernetes.io/instance: release-name
177-
app.kubernetes.io/version: "v2.10.1-rc.2"
177+
app.kubernetes.io/version: "v2.10.1"
178178
app.kubernetes.io/managed-by: Helm
179179
annotations:
180180
"helm.sh/hook": test

helm/chart/router/Chart.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,10 @@ type: application
2020
# so it matches the shape of our release process and release automation.
2121
# By proxy of that decision, this version uses SemVer 2.0.0, though the prefix
2222
# of "v" is not included.
23-
version: 2.10.1-rc.2
23+
version: 2.10.1
2424

2525
# This is the version number of the application being deployed. This version number should be
2626
# incremented each time you make changes to the application. Versions are not expected to
2727
# follow Semantic Versioning. They should reflect the version the application is using.
2828
# It is recommended to use it with quotes.
29-
appVersion: "v2.10.1-rc.2"
29+
appVersion: "v2.10.1"

helm/chart/router/README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
[router](https://github.com/apollographql/router) Rust Graph Routing runtime for Apollo Federation
44

5-
![Version: 2.10.1-rc.2](https://img.shields.io/badge/Version-2.10.1--rc.2-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: v2.10.1-rc.2](https://img.shields.io/badge/AppVersion-v2.10.1--rc.2-informational?style=flat-square)
5+
![Version: 2.10.1](https://img.shields.io/badge/Version-2.10.1-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: v2.10.1](https://img.shields.io/badge/AppVersion-v2.10.1-informational?style=flat-square)
66

77
## Prerequisites
88

@@ -11,15 +11,15 @@
1111
## Get Repo Info
1212

1313
```console
14-
helm pull oci://ghcr.io/apollographql/helm-charts/router --version 2.10.1-rc.2
14+
helm pull oci://ghcr.io/apollographql/helm-charts/router --version 2.10.1
1515
```
1616

1717
## Install Chart
1818

1919
**Important:** only helm3 is supported
2020

2121
```console
22-
helm upgrade --install [RELEASE_NAME] oci://ghcr.io/apollographql/helm-charts/router --version 2.10.1-rc.2 --values my-values.yaml
22+
helm upgrade --install [RELEASE_NAME] oci://ghcr.io/apollographql/helm-charts/router --version 2.10.1 --values my-values.yaml
2323
```
2424

2525
_See [configuration](#configuration) below._

0 commit comments

Comments
 (0)