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

Optional timeout layer pub elapsed #9

Open
wants to merge 106 commits into
base: nflx-dev
Choose a base branch
from

Conversation

xuorig
Copy link

@xuorig xuorig commented Apr 30, 2024

Description here

Fixes #issue_number


Checklist

Complete the checklist (and note appropriate exceptions) before the PR is marked ready-for-review.

  • Changes are compatible1
  • Documentation2 completed
  • Performance impact assessed and acceptable
  • Tests added and passing3
    • Unit Tests
    • Integration Tests
    • Manual Tests

Exceptions

Note any exceptions here

Notes

Footnotes

  1. It may be appropriate to bring upcoming changes to the attention of other (impacted) groups. Please endeavour to do this before seeking PR approval. The mechanism for doing this will vary considerably, so use your judgement as to how and when to do this.

  2. Configuration is an important part of many changes. Where applicable please try to document configuration examples.

  3. Tick whichever testing boxes are applicable. If you are adding Manual Tests, please document the manual testing (extensively) in the Exceptions.

nicholascioli and others added 30 commits April 5, 2024 12:50
…phql#4921)

The schema aware hash does not take the operation name into account, but
the operation name is used in the operation signature, so if the same
query is used with 2 different operation names, then they would get the
same operation signature, which might disrupt the data in studio
Co-authored-by: Edward Huang <edward.huang@apollographql.com>
Still makes Helm sense in the re-write.

Co-authored-by: Jeremy Lempereur <jeremy.lempereur@iomentum.com>
Make clear what is fixed and document the warning messages that have
gone away.
CircleCI OSX x86_64 workers are deprecated and will be removed in June.
To get ahead of that, we are now building those versions from the M1
workers.
This required a change in router-bridge, to start the deno instance of
the query planner without snapshots:
apollographql/federation-rs@6c23a07

In our tests, this did not really affect the startup time, this change
is safe to use.

Co-authored-by: o0Ignition0o <jeremy.lempereur@gmail.com>
…#4796)

This PR introduces experimental support for generating the stats report
key (signature) and referenced fields in native rust code instead of
using what is generated by router-bridge as part of query planning.
There were a number of gotchas that I found in the JS code that I have
faithfully ported across, but at this point I've run enough unit tests
and fuzz testing that I'm confident it's generating the same as the JS
code.

Co-authored-by: o0Ignition0o <jeremy.lempereur@gmail.com>
Co-authored-by: Geoffroy Couprie <apollo@geoffroycouprie.com>
…hql#4946)

router-bridge was added as a dendency of router-fuzz in a recent PR, but
the dependency in apollo-router had been upgraded in the meantime. This
switches to specify common dependencies in the workspace, so that
version numbers are de-duplicated.

Note that `Cargo.lock` is not changed by this PR.

<!-- start metadata -->
---

**Checklist**

Complete the checklist (and note appropriate exceptions) before the PR
is marked ready-for-review.

- [ ] Changes are compatible[^1]
- [ ] Documentation[^2] completed
- [ ] Performance impact assessed and acceptable
- Tests added and passing[^3]
    - [ ] Unit Tests
    - [ ] Integration Tests
    - [ ] Manual Tests

**Exceptions**

*Note any exceptions here*

**Notes**

[^1]: It may be appropriate to bring upcoming changes to the attention
of other (impacted) groups. Please endeavour to do this before seeking
PR approval. The mechanism for doing this will vary considerably, so use
your judgement as to how and when to do this.
[^2]: Configuration is an important part of many changes. Where
applicable please try to document configuration examples.
[^3]: Tick whichever testing boxes are applicable. If you are adding
Manual Tests, please document the manual testing (extensively) in the
Exceptions.
…bumps and changelog updates into the dev branch.
There are currently 2 different ways to create metrics, with slight
incompatibilities. This makes sure that the execution stage coprocessor
metrics are generated in the same way as the other stages
…ql#4949)

Error messages are now mostly the same as the graphql-js messages from
before (where possible). GraphQL syntax errors are reported as
`PARSING_ERROR` again instead of as `GRAPHQL_VALIDATION_ERROR`.

`SpecError::ParsingError` is replaced by `SpecError::ParseError` which
contains structured error information similar to
`SpecError::ValidationError`. The other uses of `ParsingError` are
replaced by `TransformError`, as most of them are in query
transforms/filtering. The error messages for `TransformError` remain the
same.

There will still be differences in error messages, especially when
querying undefined fields etc, because previously those would hit an
error case deep inside the router whereas now they will be rejected
early on. This is an easily explainable difference with obvious benefits
for users, so I think it's acceptable.

<!-- start metadata -->
---

**Checklist**

Complete the checklist (and note appropriate exceptions) before the PR
is marked ready-for-review.

- [ ] Changes are compatible[^1]
- [ ] Documentation[^2] completed
- [ ] Performance impact assessed and acceptable
- Tests added and passing[^3]
    - [ ] Unit Tests
    - [ ] Integration Tests
    - [ ] Manual Tests

**Exceptions**

*Note any exceptions here*

**Notes**

[^1]: It may be appropriate to bring upcoming changes to the attention
of other (impacted) groups. Please endeavour to do this before seeking
PR approval. The mechanism for doing this will vary considerably, so use
your judgement as to how and when to do this.
[^2]: Configuration is an important part of many changes. Where
applicable please try to document configuration examples.
[^3]: Tick whichever testing boxes are applicable. If you are adding
Manual Tests, please document the manual testing (extensively) in the
Exceptions.
…pollographql#4920)

1. Replace unordered HashSet/HashMap with IndexSet/IndexMap. It makes
predictable order of variable names inside error messages
2. Add unit tests
3. For Parallel node simplify result query plan by doing special
handling of cases: a. if only one subnode is using files don't change
anything b. if all subnodes are using files replace `Parallel` with
`Sequence`

<!-- start metadata -->
---

**Checklist**

Complete the checklist (and note appropriate exceptions) before the PR
is marked ready-for-review.

- [ ] Changes are compatible[^1]
- [ ] Documentation[^2] completed
- [ ] Performance impact assessed and acceptable
- Tests added and passing[^3]
    - [x] Unit Tests
    - [ ] Integration Tests
    - [ ] Manual Tests

**Exceptions**

*Note any exceptions here*

**Notes**

[^1]: It may be appropriate to bring upcoming changes to the attention
of other (impacted) groups. Please endeavour to do this before seeking
PR approval. The mechanism for doing this will vary considerably, so use
your judgement as to how and when to do this.
[^2]: Configuration is an important part of many changes. Where
applicable please try to document configuration examples.
[^3]: Tick whichever testing boxes are applicable. If you are adding
Manual Tests, please document the manual testing (extensively) in the
Exceptions.
[apollographql#2489](apollographql#2489) introduced
automatic aliasing rules to support `@interfaceObject`.

These rules now properly apply to lists.
This project is an extension of the existing work to support [client
side batching in the
router](apollographql#126).
The current implementation is experimental and is publicly
[documented](https://www.apollographql.com/docs/router/executing-operations/query-batching/).
The additional work to enable batching requests to subgraphs is captured
in [this issue](apollographql#2002).
Currently the concept of a batch is preserved until the end of the
RouterRequest processing. At this point we convert each batch request
item into a separate SupergraphRequest. These are then planned and
executed concurrently within the router and re-assembled into a batch
when they complete. It's important to note that, with this
implementation, the concept of a batch, from the perspective of an
executing router, now disappears and each request is planned and
executed separately.
This extension will modify the router so that the concept of a batch is
preserved, at least outwardly, so that multiple subgraph requests are
"batched" (in exactly the same format as a client batch request) for
onward transmission to subgraphs. The goal of this work is to provide an
optimisation by reducing the number of round-trips to a subgraph from
the router.
Additionally, the work will address an [unresolved
issue](apollographql#4019) from the
existing experimental implementation and promote the existing
implementation from experimental to fully supported.

Fixes apollographql#2002 

<!-- start metadata -->
---

**Review Guidance**

This is a fairly big PR, so I've written these notes to help make the
review more approachable.

1. The most important files to review are (in order):

-
[.changesets/feat_garypen_2002_subgraph_batching.md](https://github.com/apollographql/router/pull/4661/files#diff-6376c91cfdd47332a662c760ac849bb5449a1b6df6891b30b72b43f041bd836f)
-
[docs/source/executing-operations/query-batching.mdx](https://github.com/apollographql/router/pull/4661/files#diff-617468db3057857f71c387eaa0d1a6161e3c1b8bf9fcb2de6fc6eafedc147277)
-
[apollo-router/src/services/router/service.rs](https://github.com/apollographql/router/pull/4661/files#diff-544579a213fda1bff6313834d30fe1746a8a28ffd7c0d6dfa1081fa36a487355)
-
[apollo-router/src/services/supergraph/service.rs](https://github.com/apollographql/router/pull/4661/files#diff-5d72a88a68962a5926fb5bb115ea3efc186904612f74e697d72e3f009669c733)
-
[apollo-router/src/query_planner/plan.rs](https://github.com/apollographql/router/pull/4661/files#diff-21a82d277d12e8f21b6b71398d62e95303a117130cc4a27510b85ebfceeb8208)
-
[apollo-router/src/services/subgraph_service.rs](https://github.com/apollographql/router/pull/4661/files#diff-6ef5a208ca8622f30eef88f75c18566e0304d59856b66293dcd6811555e6382e)
-
[apollo-router/src/batching.rs](https://github.com/apollographql/router/pull/4661/files#diff-3e884074ecad8176341159a2382aa81c49d74b851894b8ade9fa4718c434dec6)

First read the documentation. Hopefully that will make clear how this
feature works. I've picked these files as being most important (and
ordered them for review) because:

router service => This is where we spot incoming batches and create
context `BatchQuery` items to manage them through the router. We also
re-assemble them on the way back and identify any batches which may need
to be cancelled.

supergraph service => Here we pick up the information about how many
fetches we believe each `BatchQuery` will need to make.

plan => The new `query_hashes()` does this fetch identification for us.
This is the most important function in this feature.

subgraph service => Here's is where we intercept the calls to subgraphs
and park threads to wait for batch execution to be performed. We do a
lot of work here, so this is where most of the intrusive changes are:
assembling and dis-assembling batches and managing the co-ordination
between a number of parked tasks.

batching => This is the implementation of batch co-ordination. Each
batch has a task which manages a variety of channels to facilitate
communication between the incoming batches, waiting tasks and outgoing
(to subgraph) batches. I'm suggesting reading this *after* reading
through the service changes because it should mainly just be
implementation details and you will be able to follow what is happening
without knowing all this detail initially. Once you understand the
changes to the services, you will need to read this code. Feel free to
peek ahead though if that's how you like to review stuff.

2. There are still a couple of TODOs which will be resolved early next
week. They are both related to how we handle context cloning, so a
decision is still pending there.

Obviously all the files need to be reviewed, but the remaining files
should be fairly mechanical/straight-forward.

---

**Checklist**

Complete the checklist (and note appropriate exceptions) before the PR
is marked ready-for-review.

- [x] Changes are compatible[^1]
- [x] Documentation[^2] completed
- [x] Performance impact assessed and acceptable
- Tests added and passing[^3]
    - [x] Unit Tests
    - [x] Integration Tests
    - ~[ ] Manual Tests~

**Exceptions**

*Note any exceptions here*

**Notes**

[^1]: It may be appropriate to bring upcoming changes to the attention
of other (impacted) groups. Please endeavour to do this before seeking
PR approval. The mechanism for doing this will vary considerably, so use
your judgement as to how and when to do this.
[^2]: Configuration is an important part of many changes. Where
applicable please try to document configuration examples.
[^3]: Tick whichever testing boxes are applicable. If you are adding
Manual Tests, please document the manual testing (extensively) in the
Exceptions.

---------

Co-authored-by: Nicholas Cioli <nicholas.cioli@apollographql.com>
Co-authored-by: Edward Huang <edward.huang@apollographql.com>
This adds a new `sha256::digest` function to Rhai to enable hash values.

Fixes apollographql#4939 

<!-- start metadata -->
---

**Checklist**

Complete the checklist (and note appropriate exceptions) before the PR
is marked ready-for-review.

- [x] Changes are compatible[^1]
- [x] Documentation[^2] completed
- [ ] Performance impact assessed and acceptable
- Tests added and passing[^3]
    - [x] Unit Tests
    - [ ] Integration Tests
    - [ ] Manual Tests
Signed-off-by: Benjamin Coenen <5719034+bnjjj@users.noreply.github.com>
…on_mode (apollographql#4964)

Fixup of apollographql#4551 

Signed-off-by: Benjamin Coenen <5719034+bnjjj@users.noreply.github.com>
Add instruments page to left-nav, and update related pages.
Signed-off-by: Benjamin Coenen <5719034+bnjjj@users.noreply.github.com>
During testing we found an existing issue with batching support which causes the router to panic if an empty batch is submitted to the router.

This is only a problem if batching support is enabled.

We now explicitly check for empty batches and return a helpful error message if they are detected.
Two of my recent changes had sloppy headers.
Geal and others added 29 commits April 23, 2024 19:57
This makes it possible to have different coprocessor URLs per stage. The
initial URL configuration still serves as a global default, but it can
be overridden per stage

Co-authored-by: Coenen Benjamin <benjamin.coenen@hotmail.com>
Co-authored-by: Jeremy Lempereur <jeremy.lempereur@iomentum.com>
This was incorrectly using `APOLLO_KEY` rather than `TEST_APOLLO_KEY`,
which messes up local dev for most people.

In addition, the test had not been updated when the metric changed name
a while back so was not actually being exorcised on CI.


<!-- start metadata -->
---

**Checklist**

Complete the checklist (and note appropriate exceptions) before the PR
is marked ready-for-review.

- [ ] Changes are compatible[^1]
- [ ] Documentation[^2] completed
- [ ] Performance impact assessed and acceptable
- Tests added and passing[^3]
    - [ ] Unit Tests
    - [ ] Integration Tests
    - [ ] Manual Tests

**Exceptions**

*Note any exceptions here*

**Notes**

[^1]: It may be appropriate to bring upcoming changes to the attention
of other (impacted) groups. Please endeavour to do this before seeking
PR approval. The mechanism for doing this will vary considerably, so use
your judgement as to how and when to do this.
[^2]: Configuration is an important part of many changes. Where
applicable please try to document configuration examples.
[^3]: Tick whichever testing boxes are applicable. If you are adding
Manual Tests, please document the manual testing (extensively) in the
Exceptions.

Co-authored-by: bryn <bryn@apollographql.com>
Co-authored-by: Coenen Benjamin <benjamin.coenen@hotmail.com>
### Type conditioned fetching ([PR
apollographql#4748](apollographql#4748))

Type conditioned fetching

When querying a field that is in a path of 2 or more unions, the query
planner was not able to handle different selections and would
aggressively collapse selections in fetches yielding an incorrect plan.

This change introduces an experimental configuration option to enable
type conditioned fetching:

```yaml
experimental_type_conditioned_fetching: true # false by default
```

By [@o0Ignition0o](https://github.com/o0Ignition0o) in
apollographql#4748
)

The DD exporter does some explicit mapping of attributes and was using a
value "apollo.subgraph.name" that the latest versions of the router
don't use. The correct choice is "subgraph.name".

Update the mapping to reflect this change.
This resolves an issue where fragments were always being scored as
costless. The fragment test is now updated to ensure nontrivial
fragments (ie. fragments containing objects) receive a nontrivial score.

<!-- start metadata -->
---

**Checklist**

Complete the checklist (and note appropriate exceptions) before the PR
is marked ready-for-review.

- [X] Changes are compatible[^1]
- [ ] Documentation[^2] completed
- [ ] Performance impact assessed and acceptable
- Tests added and passing[^3]
    - [X] Unit Tests
    - [ ] Integration Tests
    - [ ] Manual Tests

**Exceptions**

*Note any exceptions here*

**Notes**

[^1]: It may be appropriate to bring upcoming changes to the attention
of other (impacted) groups. Please endeavour to do this before seeking
PR approval. The mechanism for doing this will vary considerably, so use
your judgement as to how and when to do this.
[^2]: Configuration is an important part of many changes. Where
applicable please try to document configuration examples.
[^3]: Tick whichever testing boxes are applicable. If you are adding
Manual Tests, please document the manual testing (extensively) in the
Exceptions.
Fixes the json schema for conditionals.

The following config was not valid even though it should have been:

```yaml
telemetry:
  instrumentation:
    spans:
      mode: deprecated
      router:
        attributes:
          http.request.method: true
          http.response.status_code: true
          url.path: true
          "http.request.header.x-my-header":
            request_header: "x-my-header"
          "http.request.header.x-not-present":
            request_header: "x-not-present"
            default: nope
          "http.request.header.x-my-header-condition":
            request_header: "x-my-header"
            condition:
              eq:
                - response_header: "head"
                - "test"
```

---------

Signed-off-by: Benjamin Coenen <5719034+bnjjj@users.noreply.github.com>
Co-authored-by: bryn <bryn@apollographql.com>
Co-authored-by: Benjamin Coenen <5719034+bnjjj@users.noreply.github.com>
…5019)

Before we implement a directive to indicate paging in lists, we are
using a statically defined assumed size for lists returned in each
response. Since there's no real one-size-fits-all value for this, the
initial setup will require users to set an assumed list size in the
configuration for the static cost estimator.

<!-- Fixes
[ROUTER-239](https://apollographql.atlassian.net/browse/ROUTER-239) -->

<!-- start metadata -->
---

**Checklist**

Complete the checklist (and note appropriate exceptions) before the PR
is marked ready-for-review.

- [X] Changes are compatible[^1]
- [ ] Documentation[^2] completed
- [ ] Performance impact assessed and acceptable
- Tests added and passing[^3]
    - [X] Unit Tests
    - [ ] Integration Tests
    - [ ] Manual Tests

**Exceptions**

*Note any exceptions here*

**Notes**

[^1]: It may be appropriate to bring upcoming changes to the attention
of other (impacted) groups. Please endeavour to do this before seeking
PR approval. The mechanism for doing this will vary considerably, so use
your judgement as to how and when to do this.
[^2]: Configuration is an important part of many changes. Where
applicable please try to document configuration examples.
[^3]: Tick whichever testing boxes are applicable. If you are adding
Manual Tests, please document the manual testing (extensively) in the
Exceptions.


[ROUTER-239]:
https://apollographql.atlassian.net/browse/ROUTER-239?atlOrigin=eyJpIjoiNWRkNTljNzYxNjVmNDY3MDlhMDU5Y2ZhYzA5YTRkZjUiLCJwIjoiZ2l0aHViLWNvbS1KU1cifQ
In the same spirit as the existing Apollo Uplink schema automation which
exists in this [file].

This will only allow one PR at a time for this branch name, and only
commit changes (and update that branch) when there is a change.

[file]: https://github.com/apollographql/router/actions/workflows/update_uplink_schema.yml
---------

Co-authored-by: Simon Sapin <simon@apollographql.com>
…raphql#5031)

We'll have a GitHub Action do the maintenance on this file, rather than
having a test remind us that it's stale. The test results in all PRs
(and
all downstream users of this repository) suddenly getting failing tests
every time our infra-team deploys a new version of the proto, whereas
the
GitHub Action can be a much more controlled burn.

The GitHub action that replaces this is in [apollographql#5030], and we will merge
this test just as soon as that is validated.

[apollographql#5030]: apollographql#5030
Traffic shaping is always instantiated since apollographql#3330 

---------

Signed-off-by: Benjamin Coenen <5719034+bnjjj@users.noreply.github.com>
Co-authored-by: Maria Elisabeth Schreiber <maria.schreiber@apollographql.com>
Co-authored-by: Jesse Rosenberger <git@jro.cc>
Co-authored-by: Edward Huang <edward.huang@apollographql.com>
This PR adds selector that will be used for displaying cost metrics on
the router.

A separate PR will be raised for query depth and height under a
different category.
```yaml
telemetry:
  instrumentation:
    instruments:
      supergraph:
        cost.actual: true
        cost.delta: true
        cost.estimated: true
```

In addition the following selectors are introduced:
* cost.estimated
* cost.actual
* cost.delta
* cost.result

This allow you to attach cost related data to spans instruments or
events.


There is a lifecycle issue present in this PR which prevents cost.actual
and cost delta from functioning correct that we will tackled separately.
This is because supergraph response happens before the response payload
has been returned.


<!-- start metadata -->
---

**Checklist**

Complete the checklist (and note appropriate exceptions) before the PR
is marked ready-for-review.

- [ ] Changes are compatible[^1]
- [ ] Documentation[^2] completed
- [ ] Performance impact assessed and acceptable
- Tests added and passing[^3]
    - [ ] Unit Tests
    - [ ] Integration Tests
    - [ ] Manual Tests

**Exceptions**

*Note any exceptions here*

**Notes**

[^1]: It may be appropriate to bring upcoming changes to the attention
of other (impacted) groups. Please endeavour to do this before seeking
PR approval. The mechanism for doing this will vary considerably, so use
your judgement as to how and when to do this.
[^2]: Configuration is an important part of many changes. Where
applicable please try to document configuration examples.
[^3]: Tick whichever testing boxes are applicable. If you are adding
Manual Tests, please document the manual testing (extensively) in the
Exceptions.

---------

Signed-off-by: Benjamin Coenen <5719034+bnjjj@users.noreply.github.com>
Co-authored-by: Benjamin Coenen <5719034+bnjjj@users.noreply.github.com>
Co-authored-by: bryn <bryn@apollographql.com>
Add changelog entry for
apollographql#4956 and
apollographql#4987

---------

Signed-off-by: Benjamin Coenen <5719034+bnjjj@users.noreply.github.com>
Co-authored-by: Bryn Cooke <BrynCooke@gmail.com>
Surprisingly, the most expensive part of running tests in the router is
in JSON schema compilation. Every time we validate a configuration, we
generate the JSON configuration schema (which is about 31k lines at this
point) then compile a JSONSchema structure used to validate the
configuration.
This computation can be done once per execution without losing
anything, as it only depends on the configuration schema, which is
generated from the router's code and native plugins.
…aphql#5040)

This prevents any possibility of port clash, and also doesn't risk the
situation where the OS doesn't release the socket in time before it is
reused by the router.


<!-- start metadata -->
---

**Checklist**

Complete the checklist (and note appropriate exceptions) before the PR
is marked ready-for-review.

- [ ] Changes are compatible[^1]
- [ ] Documentation[^2] completed
- [ ] Performance impact assessed and acceptable
- Tests added and passing[^3]
    - [ ] Unit Tests
    - [ ] Integration Tests
    - [ ] Manual Tests

**Exceptions**

*Note any exceptions here*

**Notes**

[^1]: It may be appropriate to bring upcoming changes to the attention
of other (impacted) groups. Please endeavour to do this before seeking
PR approval. The mechanism for doing this will vary considerably, so use
your judgement as to how and when to do this.
[^2]: Configuration is an important part of many changes. Where
applicable please try to document configuration examples.
[^3]: Tick whichever testing boxes are applicable. If you are adding
Manual Tests, please document the manual testing (extensively) in the
Exceptions.

Co-authored-by: bryn <bryn@apollographql.com>
Follow-up to the v1.45.1 being officially released, bringing version
bumps and changelog updates into the dev branch.

Separating this from apollographql#5036 to solve the conflicts between main and dev
without making an additional commit to main
…graphql#5034)

Without filtering the query hashes during batch creation we could end up
in a situation where we have additional query hashes in the batch.

This manifests itself by batch queries failing with query hashes
appearing as committed without ever having been registered in a batch.

Filtering during batch creation is now matching the filtering at
subgraph coordination.
…runs (apollographql#5023)

As tends to be the case, our CI testing times have been driven up over
time. While we currently have broad-stroke measurements on the CI
pipeline, we don't yet have per-test insights. This makes it difficult
to commit time to specific efforts, or measure their improvement.
Further, the ergonomics over using the failed tests interface on
CircleCI have been hindered by the lack of test reporting through
well-defined testing output artifacts like Junit, popular with most
other languages.

Rust core hasn't yet promoted its structured `cargo test` output into a
stable build which — if we wanted to measure tests by producing anything
remotely coercible into JUnit — would mean we'd have to run `+nightly`
runs of the tests. Using the `nightly` build of `cargo test` to get
almost (but still not) JUnit seems unnecessarily risky.

Given that this feature hasn't promoted from `+nightly` in what must be
plural years and the allure of other more feature-complete testing tools
like [Nextest](https://nexte.st/) — I decided to give Nextest a quick
try.

The quick test is seemingly successful and validating: It did not show
any degradation in test execution time, is already showing promising
nice wins in CircleCI interface experience, seems like an improvement to
the CLI experience (image below, but also by [highlighting specific test
failures in the
UI](https://app.circleci.com/pipelines/github/apollographql/router/20805/workflows/09ba269e-b917-4d2e-ad52-68e80e14ab94/jobs/140871/tests)),
unlocks other capabilities (like automatic retries on a per-test basis),
and didn't require passing custom thread flags ([perhaps due to a better
model for test execution](https://nexte.st/book/how-it-works)?).


![image](https://github.com/apollographql/router/assets/841294/08a5db5c-facb-4a1f-ac80-f3ec45ae8e41)

### Local vs CI / How to enable nextest locally

Nextest is only used if it is installed and the decision to do so is
made inside of `cargo xtask test` based on the presence of
`cargo-nextest`. If `cargo-nextest` is **not** installed, then the
existing `cargo test` is used as a fall-back. On CI, it is installed and
thus used.
Updates our notion of `current` to the latest version
`windows-server-2019-vs2019:2024.02.21` but _pins_ it, so it doesn't
change randomly.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet