三相コミットがブロックを回避する方法を理解しようとしています
次の 2 つの障害シナリオを検討してください。
シナリオ 1: フェーズ 2 では、コーディネーターは preCommit メッセージをすべてのコホートに送信し、コホート A を除くすべてから ack を受け取りました。ネットワークの問題により、コホート A はコーディネーターの preCommit メッセージを受信できません。コホート A は、preCommit メッセージの待機中にタイムアウトになり、中止を選択します。次に、コーディネーターとコホート A の両方がクラッシュします。
シナリオ 2: プロトコルはフェーズ 3 に達します。コーディネーターはコホート A に doCommit メッセージを送信します。しかし、さらに doCommit メッセージを送信する前に、コーディネーターがクラッシュします。コホート A は、トランザクションの一部をコミットしてからクラッシュします。
私が知る限り、残りのコホートはシナリオ 1 とシナリオ 2 の最後でまったく同じ状態になっています。したがって、回復コーディネーターが介入するとき、残りのコホートから、シナリオ 1 にいて中止するか、または中止するかをどのように確認できますか?シナリオ2にあり、コミットしてブロックを回避しますか?