Skip to content

prep release: v2.10.1#9007

Merged
abernix merged 1 commit into2.10.1from
prep-2.10.1
Mar 11, 2026
Merged

prep release: v2.10.1#9007
abernix merged 1 commit into2.10.1from
prep-2.10.1

Conversation

@abernix
Copy link
Copy Markdown
Member

@abernix abernix commented Mar 11, 2026

Note

When approved, this PR will merge into the 2.10.1 branch which will — upon being approved itself — merge into main.

Things to review in this PR:

  • Changelog correctness (There is a preview below, but it is not necessarily the most up to date. See the Files Changed for the true reality.)
  • Version bumps
  • That it targets the right release branch (2.10.1 in this case!).

🐛 Fixes

Enforce feature restrictions for warning-state licenses

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.

If your deployment uses restricted features, the router returns an error instead of continuing to run.

By @aaronArinder in #8768

🧪 Experimental

Add experimental_hoist_orphan_errors to control orphan error path assignment

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.

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.

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.

To target a specific subgraph:

experimental_hoist_orphan_errors:
  subgraphs:
    my_subgraph:
      enabled: true

To target all subgraphs:

experimental_hoist_orphan_errors:
  all:
    enabled: true

To target all subgraphs except one:

experimental_hoist_orphan_errors:
  all:
    enabled: true
  subgraphs:
    noisy_one:
      enabled: false

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.

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.

For full configuration reference and additional examples, see the experimental_hoist_orphan_errors documentation.

By @aaronArinder in #8998

@abernix abernix requested a review from a team as a code owner March 11, 2026 14:06
@apollo-librarian
Copy link
Copy Markdown
Contributor

apollo-librarian bot commented Mar 11, 2026

✅ Docs preview ready

The preview is ready to be viewed. View the preview

File Changes

1 new, 55 changed, 5 removed
+ graphos/routing/(latest)/customization/coprocessor.mdx
* graphos/routing/(latest)/about-v2.mdx
* graphos/routing/(latest)/errors.mdx
* graphos/routing/(latest)/license.mdx
* graphos/routing/(latest)/uplink.mdx
* graphos/routing/(latest)/cloud/aws-migration.mdx
* graphos/routing/(latest)/cloud/configuration.mdx
* graphos/routing/(latest)/cloud/custom-domains.mdx
* graphos/routing/(latest)/cloud/dedicated-quickstart.mdx
* graphos/routing/(latest)/cloud/dedicated.mdx
* graphos/routing/(latest)/cloud/index.mdx
* graphos/routing/(latest)/cloud/lattice-configuration.mdx
* graphos/routing/(latest)/cloud/lattice-management.mdx
* graphos/routing/(latest)/cloud/lattice-troubleshooting.mdx
* graphos/routing/(latest)/cloud/migrate-to-dedicated.mdx
* graphos/routing/(latest)/cloud/secure-subgraphs.mdx
* graphos/routing/(latest)/cloud/serverless.mdx
* graphos/routing/(latest)/cloud/subscriptions.mdx
* graphos/routing/(latest)/cloud/throughput-guide.mdx
* graphos/routing/(latest)/configuration/cli.mdx
* graphos/routing/(latest)/configuration/envvars.mdx
* graphos/routing/(latest)/configuration/overview.mdx
* graphos/routing/(latest)/configuration/yaml.mdx
* graphos/routing/(latest)/customization/native-plugins.mdx
* graphos/routing/(latest)/customization/coprocessor/index.mdx
* graphos/routing/(latest)/customization/coprocessor/reference.mdx
* graphos/routing/(latest)/customization/rhai/reference.mdx
* graphos/routing/(latest)/observability/router-telemetry-otel/apm-guides/datadog/router-instrumentation.mdx
* graphos/routing/(latest)/observability/router-telemetry-otel/enabling-telemetry/selectors.mdx
* graphos/routing/(latest)/observability/router-telemetry-otel/enabling-telemetry/spans.mdx
* graphos/routing/(latest)/observability/router-telemetry-otel/enabling-telemetry/standard-instruments.mdx
* graphos/routing/(latest)/observability/router-telemetry-otel/telemetry-pipelines/metrics-exporters/overview.mdx
* graphos/routing/(latest)/operations/subscriptions/api-gateway.mdx
* graphos/routing/(latest)/operations/subscriptions/configuration.mdx
* graphos/routing/(latest)/operations/subscriptions/overview.mdx
* graphos/routing/(latest)/performance/traffic-shaping.mdx
* graphos/routing/(latest)/performance/caching/response-caching/faq.mdx
* graphos/routing/(latest)/performance/caching/response-caching/invalidation.mdx
* graphos/routing/(latest)/performance/caching/response-caching/observability.mdx
* graphos/routing/(latest)/performance/caching/response-caching/quickstart.mdx
* graphos/routing/(latest)/query-planning/caching.mdx
* graphos/routing/(latest)/security/demand-control.mdx
* graphos/routing/(latest)/security/index.mdx
* graphos/routing/(latest)/security/jwt.mdx
* graphos/routing/(latest)/security/persisted-queries.mdx
* graphos/routing/(latest)/security/router-authentication.mdx
* graphos/routing/(latest)/self-hosted/index.mdx
* graphos/routing/(latest)/self-hosted/containerization/aws.mdx
* graphos/routing/(latest)/self-hosted/containerization/azure.mdx
* graphos/routing/(latest)/self-hosted/containerization/docker-router-only.mdx
* graphos/routing/(latest)/self-hosted/containerization/docker.mdx
* graphos/routing/(latest)/self-hosted/containerization/gcp.mdx
* graphos/routing/(latest)/self-hosted/containerization/index.mdx
* graphos/routing/(latest)/self-hosted/containerization/kubernetes/quickstart.mdx
* graphos/routing/(latest)/upgrade/from-router-v1.mdx
* graphos/routing/(latest)/_sidebar.yaml
- graphos/routing/(latest)/cloud/migrate-to-self-hosted.mdx
- graphos/routing/(latest)/configuration/hot-reload-schema.mdx
- graphos/routing/(latest)/configuration/schema-file.mdx
- graphos/routing/(latest)/performance/circuit-breaking.mdx
- graphos/routing/(latest)/self-hosted/containerization/proxy-certificates.mdx

Build ID: e4a11d731e95010431a05f0e
Build Logs: View logs

URL: https://www.apollographql.com/docs/deploy-preview/e4a11d731e95010431a05f0e


✅ AI Style Review — No Issues Found

The pull request does not have any style issues.

Duration: 2627ms
Review Log: View detailed log

This review is AI-generated. Please use common sense when accepting these suggestions, as they may not always be accurate or appropriate for your specific context.

Copy link
Copy Markdown
Member Author

@abernix abernix left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to me and matches the requirements in the PR description.

@abernix abernix requested a review from aaronArinder March 11, 2026 14:15
@abernix abernix enabled auto-merge (squash) March 11, 2026 14:15
@abernix abernix disabled auto-merge March 11, 2026 14:38
@abernix abernix merged commit c4d321d into 2.10.1 Mar 11, 2026
14 checks passed
@abernix abernix deleted the prep-2.10.1 branch March 11, 2026 14:38
andywgarcia added a commit that referenced this pull request Mar 11, 2026
Updates the `experimental_hoist_orphan_errors` documentation to match
the final config shape from PR #9007 (v2.10.1 release prep):

- Config values now use `{ enabled: true/false }` objects instead of
  bare booleans (e.g., `all: { enabled: true }` not `all: true`)
- `all` and `subgraphs` are not mutually exclusive — per-subgraph
  settings override `all`
- Added "all except one" example showing the override pattern
- Fixed backtick-wrapped property name inside YAML code block
- Updated default values in shared config and YAML reference

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants