{"id":"2pc-blocking-window-is-between-prepare-and-decision","text":"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","truth_value":"IN","source":"entries/2026/05/29/topic-three-phase-commit.md","source_url":"","source_hash":"","justifications":[],"dependents":[],"metadata":{"example":"for op in operations:\n    self.locks[op[\"key\"]] = tx_id  # locks held until commit() or abort()\nself.log.append({\"tx_id\": tx_id, \"state\": \"prepared\"})\nreturn {\"vote\": \"yes\"}"},"explanation":{"steps":[{"node":"2pc-blocking-window-is-between-prepare-and-decision","truth_value":"IN","reason":"premise"}]}}