salsa/tests/parallel/main.rs
Micha Reiser 2b5188778e
Some checks are pending
Test / Test (push) Waiting to run
Test / Miri (push) Waiting to run
Test / Shuttle (push) Waiting to run
Test / Benchmarks (push) Waiting to run
Book / Book (push) Waiting to run
Book / Deploy (push) Blocked by required conditions
Release-plz / Release-plz release (push) Waiting to run
Release-plz / Release-plz PR (push) Waiting to run
fix: multithreaded nested fixpoint iteration (#882)
* Set `validate_final` in `execute` after removing the last cycle head

* Add runaway query repro

* Add tracing

* Fix part 1

* Fix `cycle_head_kinds` to always return provisional for memos that aren't verified final (They should be validated by `validate_same_iteration` or wait for the cycle head

* Fix cycle error

* Documentation

* Fix await for queries depending on initial value

* correctly initialize queued

* Cleanup

* Short circuit if entire query runs on single thread

* Move parallel code into its own method

* Rename method, add self_key to queued

* Revert self-key changes

* Move check *after* `deep_verify_memo`

* Add a test for a cycle with changing cycle heads

* Short circuit more often

* Consider iteration in `validate_provisional`

* Only yield if all heads result in a cycle. Retry if even just one inner cycle made progress (in which case there's a probably a new memo)

* Fix hangs

* Cargo fmt

* clippy

* Fix hang if cycle initial panics

* Rename `cycle_head_kind` enable `cycle_a_t1_b_t2_fallback` shuttle test

* Cleanup

* Docs
2025-06-01 08:45:37 +00:00

36 lines
742 B
Rust

mod setup;
mod signal;
mod cycle_a_t1_b_t2;
mod cycle_a_t1_b_t2_fallback;
mod cycle_ab_peeping_c;
mod cycle_nested_deep;
mod cycle_nested_deep_conditional;
mod cycle_nested_three_threads;
mod cycle_panic;
mod cycle_provisional_depending_on_itself;
mod parallel_cancellation;
mod parallel_join;
mod parallel_map;
#[cfg(not(feature = "shuttle"))]
pub(crate) mod sync {
pub use std::sync::*;
pub use std::thread;
pub fn check(f: impl Fn() + Send + Sync + 'static) {
f();
}
}
#[cfg(feature = "shuttle")]
pub(crate) mod sync {
pub use shuttle::sync::*;
pub use shuttle::thread;
pub fn check(f: impl Fn() + Send + Sync + 'static) {
shuttle::check_pct(f, 1000, 50);
}
}
pub(crate) use setup::*;