2pc-blocking-window-is-between-prepare-and-decision

Status: IN

A participant that has voted YES in `prepare()` holds locks and cannot unilaterally commit or abort until it receives the coordinator's decision, creating an unbounded blocking window if the coordinator fails

Source: entries/2026/05/29/topic-three-phase-commit.md

Example

for op in operations:
    self.locks[op["key"]] = tx_id  # locks held until commit() or abort()
self.log.append({"tx_id": tx_id, "state": "prepared"})
return {"vote": "yes"}

JSON