fix(snapshot): fix concurrent SnapshotClient.startCurrentRun
with same filepath
#4793
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
(EDIT: I made an alternative PR in #4796, which makes more sense to me, but have a little more moving parts.)
Closes #4782
Closes #3361
It seems there is a slight race condition when running multiple
SnapshotClient.startCurrrentRun + assert
concurrently while each run is synchronous.Note that this all-synchronous case is not covered by the existing test, such as:
vitest/test/snapshots/test/shapshots-concurrent.test.ts
Lines 10 to 15 in 039814b
The issue is similar to Time-of-check to time-of-use race condition. So, running
Map.get/set
synchronously ensuresSnapshotClient
to have uniqueSnapshotState
perfilepath
.Though I think this works as a quick fix, the underlying issue might be that
VitestTestRunner
's current usage ofSnapshotClient
whereSnapshotClient
is not designed to run concurrently. I'm exploring a better approach to deal with issue, but if maintainers are happy with current fix, then larger restructuring might not be necessary.Please don't delete this checklist! Before submitting the PR, please make sure you do the following:
pnpm-lock.yaml
unless you introduce a new test example.Tests
pnpm test:ci
.Documentation
pnpm run docs
command.Changesets
feat:
,fix:
,perf:
,docs:
, orchore:
.