public void repairSurvivors ( ) { // cancel() and repair() must be synchronized by the caller (the deliver lock, // currently). If cancelled and the last repair message arrives, don't send // out corrections! if ( this . m_promotionResult . isCancelled ( ) ) { repairLogger . debug ( m_whoami + "skipping repair message creation for cancelled Term." ) ; return ; } if ( repairLogger . isDebugEnabled ( ) ) { repairLogger . debug ( m_whoami + "received all repair logs and is repairing surviving replicas." ) ; } for ( Iv2RepairLogResponseMessage li : m_repairLogUnion ) { // send the repair log union to all the survivors. SPIs will ignore // CompleteTransactionMessages for transactions which have already // completed, so this has the effect of making sure that any holes // in the repair log are filled without explicitly having to // discover and track them. VoltMessage repairMsg = createRepairMessage ( li ) ; if ( repairLogger . isDebugEnabled ( ) ) { repairLogger . debug ( m_whoami + "repairing: " + CoreUtils . hsIdCollectionToString ( m_survivors ) + " with: " + TxnEgo . txnIdToString ( li . getTxnId ( ) ) + " " + repairMsg ) ; } if ( repairMsg != null ) { m_mailbox . repairReplicasWith ( m_survivors , repairMsg ) ; } } m_promotionResult . set ( new RepairResult ( m_maxSeenTxnId ) ) ; }
Send missed - messages to survivors . Exciting!