krishvishal opened a new pull request, #4109: URL: https://github.com/apache/iggy/pull/4109
A view change can reach a state where an op is neither recoverable from the `DoViewChange` messages in hand nor provably uncommitted. `merge_dvc_quorum` answers `AwaitingRepair` and waits for every replica to report, so a permanently crashed replica leaves two healthy survivors unable to elect a primary. The view number keeps climbing while `log_view` stays put, and client requests retry forever. The op was decidable from the quorum already present. A sender that holds the header but cannot serve the body counted as neither a copy nor a nack. A prepare is journaled before it is acked and nothing compacts an op above the commit point, so a missing body proves that sender never acked it, which is what a nack asserts. `tally_op` now derives a nack from that sender. The quorum is unchanged at `replica_count - quorum_replication + 1`, so replicas provably outside the ack set still leave fewer than a replication quorum inside it, and a sender that can serve the body is untouched. The derived nack stops at the sender's own commit point, where a missing body means compaction rather than absence. Two unit tests now assert truncation where they asserted a stall, one pins the boundary at a single servable copy, and the undecidable case moves to abstention. A simulator test replays the seed that found this: without the change the cluster reaches view 103 against `log_view` 3 with both survivors caught up, and one request retries 266 times unanswered. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
