swactor/tests/inbox_wake_loom.rs
Zachery Aaron Shores-Chmielewski 0e2fc2b164 feat(myelin): add actor-backed job data plane and uploads
Replace the eventfd/ring job bootstrap with one inherited arena descriptor, actor-owned sessions, sealed blob leases, awaitable inbox wakeups, and zero-copy Python mappings. Route VastAI mock provisioning through image-backed local Docker workers and preserve pinned child and controller routes across directory updates.

Add TOML job-file submission to the Fleet UI with generic started, running, and completed feedback, reusable remote job controller routing, cancellation and kill invariants, Tinygrad fixture and image support, and comprehensive Rust, Python, CUDA, and lifecycle-ordering coverage.
2026-08-21 18:45:10 +04:00

62 lines
2.1 KiB
Rust

//! Loom model for the external-inbox pop/register/pop wake protocol.
//!
//! The two mutexes model the linearization points supplied by the lock-free
//! queue and `AtomicWaker`; they are not the production implementation.
use loom::sync::atomic::{AtomicBool, Ordering};
use loom::sync::{Arc, Mutex};
use loom::thread;
#[test]
fn send_cannot_be_lost_while_receiver_registers() {
loom::model(|| {
let queued = Arc::new(Mutex::new(false));
let registered = Arc::new(Mutex::new(false));
let ready = Arc::new(AtomicBool::new(false));
let woken = Arc::new(AtomicBool::new(false));
let sender_queued = queued.clone();
let sender_registered = registered.clone();
let sender_woken = woken.clone();
let sender = thread::spawn(move || {
*sender_queued.lock().unwrap() = true;
if *sender_registered.lock().unwrap() {
sender_woken.store(true, Ordering::Release);
}
});
let receiver_queued = queued.clone();
let receiver_registered = registered.clone();
let receiver_ready = ready.clone();
let receiver = thread::spawn(move || {
{
let mut queued = receiver_queued.lock().unwrap();
if *queued {
*queued = false;
receiver_ready.store(true, Ordering::Release);
return;
}
}
*receiver_registered.lock().unwrap() = true;
let mut queued = receiver_queued.lock().unwrap();
if *queued {
*queued = false;
receiver_ready.store(true, Ordering::Release);
}
});
sender.join().unwrap();
receiver.join().unwrap();
let ready = ready.load(Ordering::Acquire);
let woken = woken.load(Ordering::Acquire);
let queued = *queued.lock().unwrap();
let registered = *registered.lock().unwrap();
assert!(
ready || woken,
"ready={ready}, woken={woken}, queued={queued}, registered={registered}"
);
});
}