You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CHANGELOG.md
+60Lines changed: 60 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -2,6 +2,66 @@
2
2
3
3
This project adheres to [Semantic Versioning v2.0.0](https://semver.org/spec/v2.0.0.html).
4
4
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
0 commit comments