Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
86 changes: 80 additions & 6 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ hadb = { git = "https://github.com/russellromney/hadb.git", version = "0.4.0", p
hadb-lease-s3 = { git = "https://github.com/russellromney/hadb.git", version = "0.4.0", package = "hadb-lease-s3", branch = "hoist-prereq-internal-lease-store" }

# WAL sync primitives
walrust = { git = "https://github.com/russellromney/walrust.git", version = "0.3.1", package = "walrust", branch = "hoist-public-deps" }
walrust = { git = "https://github.com/russellromney/walrust.git", version = "0.3.1", package = "walrust", branch = "main" }

# Async runtime
tokio = { version = "1", features = ["full"] }
Expand Down
4 changes: 2 additions & 2 deletions haqlite-turbolite/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,10 @@ turbodb = { git = "https://github.com/russellromney/hadb.git", version = "0.4.0"
turbodb-manifest-cinch = { git = "https://github.com/russellromney/hadb.git", version = "0.4.0", package = "turbodb-manifest-cinch", branch = "hoist-prereq-internal-lease-store" }

# Turbolite VFS
turbolite = { git = "https://github.com/russellromney/turbolite.git", version = "0.5", features = ["zstd", "wal"], branch = "benchmark/s3-express-verify" }
turbolite = { git = "https://github.com/russellromney/turbolite.git", version = "0.5", features = ["zstd", "wal"], branch = "main" }

# WAL sync (walrust is always present for Continuous/Checkpoint paths)
walrust = { git = "https://github.com/russellromney/walrust.git", version = "0.3.1", package = "walrust", branch = "hoist-public-deps" }
walrust = { git = "https://github.com/russellromney/walrust.git", version = "0.3.1", package = "walrust", branch = "main" }

# Async runtime
tokio = { version = "1", features = ["rt-multi-thread", "sync", "time"] }
Expand Down
10 changes: 5 additions & 5 deletions haqlite-turbolite/src/builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -868,8 +868,8 @@ impl Builder {

let replay_base_pending_publish = Arc::new(AtomicBool::new(false));
let replay_base_seq = Arc::new(AtomicU64::new(0));
// Phase 004 leadership-term epoch, shared between the replicator
// (writer, latches it from the fence + publishes phase-4 bases)
// Replay cursor leadership-term epoch, shared between the replicator
// (writer, latches it from the fence + publishes cursor-chain bases)
// and the follower behavior (resets it to 0 on promotion so the
// replicator re-latches the new term's revision). Starts unset.
let term_epoch = Arc::new(AtomicU64::new(0));
Expand Down Expand Up @@ -936,9 +936,9 @@ impl Builder {
)
.with_term_epoch(term_epoch.clone());
// Wire the lease fence when available (production
// turbolite_http path) to activate phase-4 fenced
// turbolite_http path) to activate cursor-chain fenced
// delta shipping. Without it the replicator stays on
// the phase-3 path (term_epoch never latches).
// the legacy path (term_epoch never latches).
if let Some((fence, _)) = &shared_fence {
wal_replicator = wal_replicator.with_fence(fence.clone());
}
Expand Down Expand Up @@ -1320,7 +1320,7 @@ mod tests {

#[test]
fn http_then_rollback_detection_compose() {
// L2 must stay composable with the phase-004 rollback detector.
// L2 must stay composable with the replay-cursor rollback detector.
let b = Builder::new()
.http("https://cinch.example.com", "tok")
.with_rollback_detection("db-1", "tok");
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
//! Phase 004 follower candidate filter + chain verifier.
//! Replay cursor follower candidate filter + chain verifier.
//!
//! Pure logic (no storage I/O) that turns a raw, ordered list of
//! discovered TLM_DELTA envelopes into the maximal verified prefix a
//! follower may apply. Two stages, matching the plan's replication
//! shape:
//! follower may apply. It has two stages:
//!
//! 1. **Candidate filter** — drop deltas whose `(epoch, writer_id)`
//! does not match the cursor's epoch + the base's writer_id (stale
Expand Down Expand Up @@ -44,9 +43,8 @@ use walrust::DiscoveredDelta;
///
/// The working cursor is persisted separately from the published base
/// manifest. It is only reset back to a base's cursor when the base
/// manifest's **epoch** changes (promotion) — see step 7. Failing to
/// advance the anchor makes every poll after the first base-mismatch
/// at `last_applied_seq + 1`.
/// manifest's **epoch** changes (promotion). Failing to advance the anchor
/// makes every poll after the first base-mismatch at `last_applied_seq + 1`.
#[derive(Debug, Clone)]
pub struct FollowerCursor {
/// Seq of the last object already applied (base initially, then the
Expand Down
Loading