func (p *proposal) OneBTxnVotesReceived(sender common.RMId, oneBTxnVotes *msgs.OneBTxnVotes) { promises := oneBTxnVotes.Promises() for idx, l := 0, promises.Len(); idx < l; idx++ { promise := promises.At(idx) vUUId := common.MakeVarUUId(promise.VarId()) pi := p.instances[*vUUId] pi.oneBTxnVotesReceived(sender, &promise) } p.maybeSendOneA() p.maybeSendTwoA() }
// from network func (pm *ProposerManager) OneBTxnVotesReceived(sender common.RMId, txnId *common.TxnId, oneBTxnVotes *msgs.OneBTxnVotes) { server.Log(txnId, "1B received from", sender, "; instance:", common.RMId(oneBTxnVotes.RmId())) instId := instanceIdPrefix([instanceIdPrefixLen]byte{}) instIdSlice := instId[:] copy(instIdSlice, txnId[:]) binary.BigEndian.PutUint32(instIdSlice[common.KeyLen:], oneBTxnVotes.RmId()) if prop, found := pm.proposals[instId]; found { prop.OneBTxnVotesReceived(sender, oneBTxnVotes) } // If not found, it should be safe to ignore - it's just a delayed // 1B that we clearly don't need to complete the paxos instances // anyway. }
func (pd *ProposerDispatcher) OneBTxnVotesReceived(sender common.RMId, oneBTxnVotes *msgs.OneBTxnVotes) { txnId := common.MakeTxnId(oneBTxnVotes.TxnId()) pd.withProposerManager(txnId, func(pm *ProposerManager) { pm.OneBTxnVotesReceived(sender, txnId, oneBTxnVotes) }) }