skip to content
==> README.md <==
1# @ajax/mesh-jobs-log
2
3What a member persists of the job table, and what that replays to. The log is append-only and has
4four kinds of record:
5
6- **LID** is the highest leadership the member followed or led. A restarted member never follows an
7  older one, and leads above it.
8- **SNAPSHOT** is the committed table at a commit point. It keeps the entries past that point
9  (review finding 6).
10- **ENTRY** is an entry not committed yet: a delta, or a replace (a new leader's merge, which drops
11  older leaderships' entries).
12- **COMMIT** marks that a leadership's entries up to n are committed.
13
14`mj_replay` rebuilds the replica exactly. Entries never committed stay pending and never reach the
15committed table (review finding 5). A torn last record ends the replay (review finding 4), while a
16whole record that doesn't decode is an error. `mj_replica_log` writes the compacted log that replays
17to the same replica.
18
19## Ported from
20
21[alpha-rust-mesh](https://github.com/rsafier/alpha-rust-mesh) (Richard Safier, MIT):
22`crates/mesh-host/src/jobs.rs`: `Log` (`encode`, `decode`), `Entry`, `Replica` (`apply`, `last`,
23`log`), `replay`.
24
25## Tests
26
27`tests/log.c`:
28- Four random sequences of 400 records, built from the same generator as the Rust golden test, replay
29  to the same replica as in the Rust: its compacted log's hash, leadership, commit point, pending
30  entries and `last`. Each compaction replays back to it.
31- The log of the Rust's `ops_frames_and_the_merge`, byte for byte, with its torn tail dropped.
32- Review finding 6's snapshot (`a_snapshot_keeps_the_entries_acknowledged_past_it`).
33- Replay's answers to corrupt records, word for word the Rust's.
34
35## Licence
36
37MIT. See the repository's LICENSE.