Grow the sweep and delete paths into their fleet forms under fleet: true (ADR-008 §2, ADR-010 §2, ADR-012 §1/§5/§6.6/§6.7, ADR-013 §2); the non-fleet forms are byte-unchanged. - the sweep lease: sweep() composes the in-process single-flight flag with the SQL lease (sweep_lock_acquire on the fleet host), both held for the whole sweep and released on every exit path; contention at either domain aborts as SweeperLock report data, nothing deleted; the pool-sizing composition enforced (max_size >= 2 at the fleet constructors' entry — the lease holds one checkout; the body's clauses ride further checkouts) - SQL-level delete arbitration: arbitrated_delete composes the two domains (in-process first — cheap, local; the engine's arbitrate second — fleet-authoritative) on the direct path (GcRefuse) and the window execution's re-arbitration; a foreign instance's un-expired pin row or liveness-table row refuses cross-instance - the maintenance step: EngineFleetState::pin_reap (the seam as the named clause home) reaps exactly the expired pin rows, one statement on the postgres host, contract-tested, driven under the lease before the overdue execution - the fleet liveness verb: register_liveness_source takes the fleet-shaped LivenessRegistration argument (ADR-012 §6.6's same-verb wording) — the named-table form registers the embedder's own table (schema-ownership rule holds; idempotent; deregistration composes via a new engine-side unregister), the in-process form stays legal (instance-local protection, documented); Registration carries its kind; the verb is fallible (the fleet form's error surface) - the protect callback's fleet posture recorded: single-node-only, instance-local consult remains, materialization is the embedder's duty — no new machinery - the fleet sweep body: protect consult → reap → execute overdue (two-domain re-arbitration, fall-through delete across both tiers) → mark (pool + in-process sources; SQL liveness consulted at arbitration time, never enumerated) → stage → release; counts exact relative to the schedule - tests: lease contention/reaping between two instances, the foreign-row GcRefuse, the exact-set reap, the embedder-table protection + correction flow + malformed and fleet:false rejections, the two-instance exact-count shape, and the delay race in its fleet form; the wave-6 inert-machinery construction test rewritten to the now-live fleet semantics Verification: cargo test (default) green; cargo test --features postgres green server-less (skipping) and against pglo-poc :15432; cargo test --all-features green; cargo clippy --all-targets -D warnings green (default, postgres, all-features); cargo fmt --check green; cargo doc --no-deps clean (postgres-feature warnings unchanged at the pre-existing 21).
44 lines
929 B
Rust
44 lines
929 B
Rust
pub mod backend;
|
|
pub mod dispatch;
|
|
pub mod error;
|
|
pub mod facade;
|
|
pub mod gc;
|
|
pub mod hashing;
|
|
pub mod keys;
|
|
pub mod local;
|
|
pub mod store;
|
|
|
|
pub use dispatch::DEFAULT_DISPATCH_THRESHOLD;
|
|
pub use error::Error;
|
|
pub use facade::{
|
|
Batch, EntryMeta, GcAbortCause, LivenessRegistration, LivenessSource, Pin, PinState,
|
|
ProtectCallback, Registration, SweepReport,
|
|
};
|
|
pub use hashing::{Algorithm, Digest};
|
|
pub use keys::Key;
|
|
pub use store::{Store, StoreMode, DEFAULT_DELETE_WINDOW_DELAY};
|
|
|
|
#[cfg(feature = "postgres")]
|
|
pub use store::{FleetSharedMedia, DEFAULT_PIN_TTL};
|
|
|
|
#[cfg(feature = "mem")]
|
|
pub mod mem;
|
|
|
|
#[cfg(feature = "pg-lo")]
|
|
pub mod pg_lo;
|
|
|
|
#[cfg(feature = "ops")]
|
|
pub mod ops;
|
|
|
|
#[cfg(any(feature = "postgres", feature = "pg-lo"))]
|
|
mod pg_common;
|
|
|
|
#[cfg(feature = "postgres")]
|
|
pub mod postgres;
|
|
|
|
#[cfg(any(feature = "postgres", feature = "pg-lo"))]
|
|
pub use pg_common::PgOpts;
|
|
|
|
#[cfg(feature = "sqlite")]
|
|
pub mod sqlite;
|