Я пытаюсь понять, как трехфазное принятие предотвращает блокировку
Рассмотрим следующие два сценария отказа:
Сценарий 1: На этапе 2 координатор отправляет сообщения preCommit всем когортам и получает ответ от всех, кроме когорты A. Сетевые проблемы не позволяют когорте A получать сообщение координатора preCommit. Когорта Время ожидания сообщения preCommit и выбирается для прерывания. Затем и координатор, и когорт A сбой.
Сценарий 2. Протокол достигает этапа 3. Координатор отправляет сообщение doCommit в когорту A. Но прежде чем он сможет отправить больше сообщений doCommit, происходит сбой координатора. Когорта А завершает свою часть транзакции, затем сработает.
Насколько я могу судить, оставшиеся когорты имеют то же самое состояние в конце сценария 1 и сценария 2. Поэтому, когда координатор восстановления делает шаг, как он может узнать из оставшихся когорт, находятся ли мы в сценарии 1 и прервать или мы находимся в сценарии 2 и зафиксировать и, таким образом, избежать блокировки?