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]

Reply via email to