Repository navigation
store: Class C flush from live slots, one writer, lock-free gets #1217
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
Merged
Merged
Changes from all commits
Commits
Show all changes
20 commits
Select commit
Hold shift + click to select a range
9bb0dc4
store: flush Class C from the live slots
reardencode b7518c9
store: Class C stores take a single-writer capability
reardencode 656e146
store: Class C gets use a sequence counter
reardencode 0ae8073
store: model the Class C counter and the script-pool wake
reardencode 3bf1954
ci: model job takes rustc from rust-toolchain.toml
rearden-grok[bot] f671f6b
store: strong bits use try_update, and CI checks rustc 1.99
rearden-grok[bot] 81987cd
test: run /dev/full flush failures on Linux only
rearden-grok[bot] a1b3f2f
store: reject a sparse array set above the length
rearden-grok[bot] 2c37ccb
ibd: drop the coordinator lock across an archived-body clear
rearden-grok[bot] a69c011
store: commit the strong bit image in one reservation
rearden-grok[bot] eeab2c1
store: one Class C writer wins the even-to-odd exchange
rearden-grok[bot] a22b82c
query: join the tip flush before a standalone header range put
rearden-grok[bot] 461d08e
test: declare the log suite close symbol unsafe
rearden-grok[bot] 10d19bb
test: split the Class C sequence loom checks
rearden-grok[bot] d328a3e
store: say the header-pair odd step is SeqCst
rearden-grok[bot] ae78634
ibd: defer every mutated archived-body clear
rearden-grok[bot] 8406818
store: publish a disk-only Class C append after its bytes
rearden-grok[bot] edb87fb
store: a disk-only Class C get treats a truncate race as absent
rearden-grok[bot] eaae077
store: a disk-only zero gap fills one span
rearden-grok[bot] 6357fb5
test: a tip flush counts its own thread
rearden-grok[bot] File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,66 @@ | ||
| # Model-checked concurrency (`--test model`): loom explores script-pool claim | ||
| # order, the UTXO view stamp, and the Class C sequence counter. shuttle runs | ||
| # the script-pool idle turn. Not a required PR check. The engine is a | ||
| # `--cfg`, not a feature, so each job has its own target dir and cache. The | ||
| # nightly schedule raises the budget (TESTING.md) and seeds shuttle with the | ||
| # run id. The index-release order is not a model: it needs a Query full of | ||
| # std locks. | ||
| # | ||
| # rustc comes from rust-toolchain.toml (the nix-shell / crane baseline). The | ||
| # runner image's rustup auto-installs that toolchain and its components on | ||
| # first cargo. | ||
|
|
||
| name: model | ||
|
|
||
| on: | ||
| pull_request: | ||
| push: | ||
| branches: [master, main, "v*.*.x"] | ||
| schedule: | ||
| - cron: "23 6 * * *" | ||
| workflow_dispatch: | ||
|
|
||
| concurrency: | ||
| group: model-${{ github.ref }} | ||
| cancel-in-progress: true | ||
|
|
||
| permissions: | ||
| contents: read | ||
|
|
||
| env: | ||
| CARGO_TERM_COLOR: always | ||
| RUSTFLAGS: -D warnings | ||
| # Actions only. rust-cache restores dep rlibs (not workspace crates) and | ||
| # strips incremental artifacts before persist; it also sets this so rustc | ||
| # does not write throwaway dep-graphs. | ||
| CARGO_INCREMENTAL: "0" | ||
|
|
||
| jobs: | ||
| model: | ||
| name: ${{ matrix.engine }} | ||
| runs-on: ubuntu-latest | ||
| timeout-minutes: 30 | ||
| strategy: | ||
| # A loom failure and a shuttle failure are separate findings. | ||
| fail-fast: false | ||
| matrix: | ||
| engine: [loom, shuttle] | ||
| steps: | ||
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | ||
| with: | ||
| persist-credentials: false | ||
| - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2 | ||
| with: | ||
| shared-key: model-${{ matrix.engine }} | ||
| workspaces: ". -> target/model-${{ matrix.engine }}" | ||
| - name: model-check ${{ matrix.engine }} | ||
| if: github.event_name != 'schedule' | ||
| run: ./scripts/model-check.sh ${{ matrix.engine }} | ||
| - name: model-check ${{ matrix.engine }} (nightly deep budget) | ||
| if: github.event_name == 'schedule' | ||
| env: | ||
| LOOM_MAX_PREEMPTIONS: "4" | ||
| MODEL_SHUTTLE_ITERS: "50000" | ||
| MODEL_SHUTTLE_DEPTH: "5" | ||
| SHUTTLE_RANDOM_SEED: ${{ github.run_id }} | ||
| run: ./scripts/model-check.sh ${{ matrix.engine }} | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Oops, something went wrong.
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.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
[suggestion] Every pull request runs
./scripts/model-check.shwithLOOM_MAX_PREEMPTIONSunset.seq::len_belongs_to_the_slot_and_a_header_pair_does_not_mixcallscheck_at_most(2), and an unset env becomes bound 2, so that test is the ~15 minute step (job 121898809276: 929.96s) while flush and utxo finish in the same second they start. The nightly cron setsLOOM_MAX_PREEMPTIONS=4, andcheck_limitedtakesmin(bound, cap), so the sequence model stays at 2. Nightly cannot make that test longer.Suggestion: Keep the sub-second models (flush, utxo, script-pool claim) on the pull-request job, and run the sequence model only on the nightly schedule. Moving it does not raise coverage while
check_at_most(2)stays. Raising that cap is the changeTESTING.mdrefuses, because a higher bound still would not exhaust an aarch64 release reorder of the odd advance. Do not put a spinning two-writer case back on the default model job.