Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement progressive @override #2911

Merged
merged 2 commits into from
Jan 20, 2024
Merged

Conversation

trevor-scheer
Copy link
Member

@trevor-scheer trevor-scheer commented Jan 18, 2024

Add new optional label arg to @override which is a String. Capture label in the supergraph via the new @join__field arg overrideLabel so these values can be used during query graph creation and query planning.

Reviewed in two separate PRs:
#2879
#2902

Copy link

changeset-bot bot commented Jan 18, 2024

🦋 Changeset detected

Latest commit: 29a2576

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 7 packages
Name Type
@apollo/query-planner Minor
@apollo/query-graphs Minor
@apollo/composition Minor
@apollo/federation-internals Minor
@apollo/subgraph Minor
@apollo/gateway Minor
apollo-federation-integration-testsuite Minor

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

Copy link

codesandbox-ci bot commented Jan 18, 2024

This pull request is automatically built and testable in CodeSandbox.

To see build info of the built libraries, click here or the icon next to each commit SHA.

trevor-scheer and others added 2 commits January 19, 2024 17:27
Add new optional `label` arg to `@override` which is a `String`.
Capture label in the supergraph via the new `@join__field` arg
`overrideLabel` so these values can be used during query graph creation
and query planning.
Implement progressive override functionality in QP and validation logic

Co-authored-by: Sachin D. Shinde <sachin@apollographql.com>
@trevor-scheer trevor-scheer merged commit 6ae4294 into next Jan 20, 2024
12 of 13 checks passed
@trevor-scheer trevor-scheer deleted the trevor/progressive-override branch January 20, 2024 02:03
trevor-scheer pushed a commit that referenced this pull request Jan 20, 2024
This PR was opened by the [Changesets
release](https://github.com/changesets/action) GitHub action. When
you're ready to do a release, you can merge this and the packages will
be published to npm automatically. If you're not ready to do a release
yet, that's fine, whenever you add more changesets to next, this PR will
be updated.


# Releases
## @apollo/composition@2.7.0

### Minor Changes

- Implement progressive `@override` functionality
([#2911](#2911))

The progressive `@override` feature brings a new argument to the
`@override` directive: `label: String`. When a label is added to an
`@override` application, the override becomes conditional, depending on
parameters provided to the query planner (a set of which labels should
be overridden). Note that this feature will be supported in router for
enterprise users only.

Out-of-the-box, the router will support a percentage-based use case for
progressive `@override`. For example:

    ```graphql
    type Query {
      hello: String @OverRide(from: "original", label: "percent(5)")
    }
    ```

The above example will override the root `hello` field from the
"original" subgraph 5% of the time.

More complex use cases will be supported by the router via the use of
coprocessors/rhai to resolve arbitrary labels to true/false values (i.e.
via a feature flag service).

- Support `@join__directive(graphs, name, args)` directives
([#2894](#2894))

### Patch Changes

- Allow known `FeatureDefinition` subclasses to define custom subgraph
schema validation rules
([#2910](#2910))

- Updated dependencies
\[[`6ae42942b13dccd246ccc994faa2cb36cd62cb3c`](6ae4294),
[`66833fb8d04c9376f6ed476fed6b1ca237f477b7`](66833fb),
[`931f87c6766c7439936df706727cbdc0cd6bcfd8`](931f87c)]:
    -   @apollo/query-graphs@2.7.0
    -   @apollo/federation-internals@2.7.0

## @apollo/gateway@2.7.0

### Minor Changes

- Implement progressive `@override` functionality
([#2911](#2911))

The progressive `@override` feature brings a new argument to the
`@override` directive: `label: String`. When a label is added to an
`@override` application, the override becomes conditional, depending on
parameters provided to the query planner (a set of which labels should
be overridden). Note that this feature will be supported in router for
enterprise users only.

Out-of-the-box, the router will support a percentage-based use case for
progressive `@override`. For example:

    ```graphql
    type Query {
      hello: String @OverRide(from: "original", label: "percent(5)")
    }
    ```

The above example will override the root `hello` field from the
"original" subgraph 5% of the time.

More complex use cases will be supported by the router via the use of
coprocessors/rhai to resolve arbitrary labels to true/false values (i.e.
via a feature flag service).

### Patch Changes

- Updated dependencies
\[[`6ae42942b13dccd246ccc994faa2cb36cd62cb3c`](6ae4294),
[`66833fb8d04c9376f6ed476fed6b1ca237f477b7`](66833fb),
[`931f87c6766c7439936df706727cbdc0cd6bcfd8`](931f87c)]:
    -   @apollo/query-planner@2.7.0
    -   @apollo/composition@2.7.0
    -   @apollo/federation-internals@2.7.0

## @apollo/federation-internals@2.7.0

### Minor Changes

- Implement progressive `@override` functionality
([#2911](#2911))

The progressive `@override` feature brings a new argument to the
`@override` directive: `label: String`. When a label is added to an
`@override` application, the override becomes conditional, depending on
parameters provided to the query planner (a set of which labels should
be overridden). Note that this feature will be supported in router for
enterprise users only.

Out-of-the-box, the router will support a percentage-based use case for
progressive `@override`. For example:

    ```graphql
    type Query {
      hello: String @OverRide(from: "original", label: "percent(5)")
    }
    ```

The above example will override the root `hello` field from the
"original" subgraph 5% of the time.

More complex use cases will be supported by the router via the use of
coprocessors/rhai to resolve arbitrary labels to true/false values (i.e.
via a feature flag service).

- Allow known `FeatureDefinition` subclasses to define custom subgraph
schema validation rules
([#2910](#2910))

- Support `@join__directive(graphs, name, args)` directives
([#2894](#2894))

## @apollo/query-graphs@2.7.0

### Minor Changes

- Implement progressive `@override` functionality
([#2911](#2911))

The progressive `@override` feature brings a new argument to the
`@override` directive: `label: String`. When a label is added to an
`@override` application, the override becomes conditional, depending on
parameters provided to the query planner (a set of which labels should
be overridden). Note that this feature will be supported in router for
enterprise users only.

Out-of-the-box, the router will support a percentage-based use case for
progressive `@override`. For example:

    ```graphql
    type Query {
      hello: String @OverRide(from: "original", label: "percent(5)")
    }
    ```

The above example will override the root `hello` field from the
"original" subgraph 5% of the time.

More complex use cases will be supported by the router via the use of
coprocessors/rhai to resolve arbitrary labels to true/false values (i.e.
via a feature flag service).

### Patch Changes

- Updated dependencies
\[[`6ae42942b13dccd246ccc994faa2cb36cd62cb3c`](6ae4294),
[`66833fb8d04c9376f6ed476fed6b1ca237f477b7`](66833fb),
[`931f87c6766c7439936df706727cbdc0cd6bcfd8`](931f87c)]:
    -   @apollo/federation-internals@2.7.0

## @apollo/query-planner@2.7.0

### Minor Changes

- Implement progressive `@override` functionality
([#2911](#2911))

The progressive `@override` feature brings a new argument to the
`@override` directive: `label: String`. When a label is added to an
`@override` application, the override becomes conditional, depending on
parameters provided to the query planner (a set of which labels should
be overridden). Note that this feature will be supported in router for
enterprise users only.

Out-of-the-box, the router will support a percentage-based use case for
progressive `@override`. For example:

    ```graphql
    type Query {
      hello: String @OverRide(from: "original", label: "percent(5)")
    }
    ```

The above example will override the root `hello` field from the
"original" subgraph 5% of the time.

More complex use cases will be supported by the router via the use of
coprocessors/rhai to resolve arbitrary labels to true/false values (i.e.
via a feature flag service).

### Patch Changes

- Updated dependencies
\[[`6ae42942b13dccd246ccc994faa2cb36cd62cb3c`](6ae4294),
[`66833fb8d04c9376f6ed476fed6b1ca237f477b7`](66833fb),
[`931f87c6766c7439936df706727cbdc0cd6bcfd8`](931f87c)]:
    -   @apollo/query-graphs@2.7.0
    -   @apollo/federation-internals@2.7.0

## @apollo/subgraph@2.7.0

### Minor Changes

- Implement progressive `@override` functionality
([#2911](#2911))

The progressive `@override` feature brings a new argument to the
`@override` directive: `label: String`. When a label is added to an
`@override` application, the override becomes conditional, depending on
parameters provided to the query planner (a set of which labels should
be overridden). Note that this feature will be supported in router for
enterprise users only.

Out-of-the-box, the router will support a percentage-based use case for
progressive `@override`. For example:

    ```graphql
    type Query {
      hello: String @OverRide(from: "original", label: "percent(5)")
    }
    ```

The above example will override the root `hello` field from the
"original" subgraph 5% of the time.

More complex use cases will be supported by the router via the use of
coprocessors/rhai to resolve arbitrary labels to true/false values (i.e.
via a feature flag service).

### Patch Changes

- Updated dependencies
\[[`6ae42942b13dccd246ccc994faa2cb36cd62cb3c`](6ae4294),
[`66833fb8d04c9376f6ed476fed6b1ca237f477b7`](66833fb),
[`931f87c6766c7439936df706727cbdc0cd6bcfd8`](931f87c)]:
    -   @apollo/federation-internals@2.7.0

## apollo-federation-integration-testsuite@2.7.0

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant