///|
fn main {
let certificate = @lease.certify_votes(
[
{ voter: "node-1", candidate: "worker-a", term: 7, granted: true },
{ voter: "node-2", candidate: "worker-a", term: 7, granted: true },
{ voter: "node-3", candidate: "worker-b", term: 7, granted: true },
],
3,
7,
)
let elected = @lease.LeaseTable::new().acquire_leadership(
"orders/leader", certificate, 10, 100,
)
guard elected.decision.lease is Some(first_lease) else {
println("leadership acquisition failed")
return
}
println("leader=" + first_lease.to_json())
let first_write = @lease.FenceGuard::new().check(
first_lease.fenced_write("commit-order-42", 101).unwrap(),
)
println("first_write=\{first_write.accepted}")
let transferred = elected.table.apply(
"orders/leader",
Transfer("worker-a", first_lease.token, "worker-b", 10),
102,
)
guard transferred.decision.lease is Some(second_lease) else {
println("leadership transfer failed")
return
}
let second_write = first_write.next_guard.check(
second_lease.fenced_write("commit-order-43", 103).unwrap(),
)
let stale_write = second_write.next_guard.check({
resource: first_lease.resource,
holder: first_lease.holder,
token: first_lease.token,
operation: "late-commit-order-44",
})
println("next_leader=" + second_lease.to_json())
println("next_write=\{second_write.accepted}")
println("stale_write=\{stale_write.accepted}:\{stale_write.message}")
println("metrics=" + transferred.table.metrics(103).to_json())
println("audit=" + @lease.audit_events(transferred.table.events).to_json())
println("simulation=" + @lease.run_failover_simulation(100, ttl=5).to_json())
}