FV-3, FV-4: 2PC coordinator crash/recovery + participant timeout

- twopc.tla: Add coordinatorLog (persistent WAL for decisions)
- twopc.tla: Add CrashCoordinator action
- twopc.tla: Add RecoverCoordinator action (reads from coordinatorLog)
- twopc.tla: Add ParticipantTimeout (only if coordinatorLog = Nil)
- twopc.tla: Add RecoveryConsistency invariant
- models/twopc.cfg: Add RecoveryConsistency to checked invariants
- Update PLAN.md, ANALYSIS.md, README.md with new metrics
This commit is contained in:
2026-05-07 19:40:09 +03:00
parent 54711d0190
commit 39e07b542d
5 changed files with 71 additions and 22 deletions
+7 -7
View File
@@ -79,16 +79,16 @@
**Препоръка:** Разширяване на Replicate с `prevLogIndex` и `prevLogTerm` параметри, добавяне на `InstallSnapshot` действие, и връщане на `LogMatching` инварианта.
### 2.5. 2PC без recovery модел
### 2.5. 2PC без recovery модел ✅ Направено
Спекът не моделира:
~~Спекът не моделира:~~
- Coordinator crash и recovery (read decision from WAL)
- Participant timeout (какво става ако participant не отговори)
- Heuristic decisions (участник взима самостоятелно решение при coordinator failure)
- Transaction log replay
- ~~Coordinator crash и recovery (read decision from WAL)~~ ✅ Добавени `CrashCoordinator` и `RecoverCoordinator`
- ~~Participant timeout~~ ✅ `ParticipantTimeout` позволява abort само при `coordinatorLog = Nil`
- ~~Heuristic decisions~~ ✅ Participant не може да abort-ва ако coordinator е decided
- ~~Transaction log replay~~ ✅ `RecoverCoordinator` чете `coordinatorLog`
**Препоръка:** Добавяне на `CrashCoordinator(t)` и `RecoverCoordinator(t)` действия с четене на `decidedAction[t]` от персистентен лог.
**Резултат:** `RecoveryConsistency` инвариантата гарантира че след crash+recovery, решението е същото.
### 2.6. MVCC без garbage collection