func deflateTxn(txn *msgs.Txn, seg *capn.Segment) *msgs.Txn { if isDeflated(txn) { return txn } deflatedTxn := msgs.NewTxn(seg) deflatedTxn.SetId(txn.Id()) deflatedTxn.SetRetry(txn.Retry()) deflatedTxn.SetSubmitter(txn.Submitter()) deflatedTxn.SetSubmitterBootCount(txn.SubmitterBootCount()) deflatedTxn.SetFInc(txn.FInc()) deflatedTxn.SetTopologyVersion(txn.TopologyVersion()) deflatedTxn.SetAllocations(txn.Allocations()) actionsList := txn.Actions() deflatedActionsList := msgs.NewActionList(seg, actionsList.Len()) deflatedTxn.SetActions(deflatedActionsList) for idx, l := 0, actionsList.Len(); idx < l; idx++ { deflatedAction := deflatedActionsList.At(idx) deflatedAction.SetVarId(actionsList.At(idx).VarId()) deflatedAction.SetMissing() } return &deflatedTxn }
func NewProposal(pm *ProposerManager, txnId *common.TxnId, txn *msgs.Txn, fInc int, ballots []*eng.Ballot, instanceRMId common.RMId, acceptors []common.RMId, skipPhase1 bool) *proposal { allocs := txn.Allocations() activeRMIds := make(map[common.RMId]uint32, allocs.Len()) for idx, l := 0, allocs.Len(); idx < l; idx++ { alloc := allocs.At(idx) bootCount := alloc.Active() if bootCount == 0 { break } rmId := common.RMId(alloc.RmId()) activeRMIds[rmId] = bootCount } p := &proposal{ proposerManager: pm, instanceRMId: instanceRMId, acceptors: acceptors, activeRMIds: activeRMIds, fInc: fInc, txn: txn, txnId: txnId, submitter: common.RMId(txn.Submitter()), submitterBootCount: txn.SubmitterBootCount(), skipPhase1: skipPhase1, instances: make(map[common.VarUUId]*proposalInstance, len(ballots)), pending: make([]*proposalInstance, 0, len(ballots)), finished: false, } for _, ballot := range ballots { pi := newProposalInstance(p, ballot) p.instances[*ballot.VarUUId] = pi pi.init() pi.start() } return p }
func TxnToRootBytes(txn *msgs.Txn) []byte { seg := capn.NewBuffer(nil) txnCap := msgs.NewRootTxn(seg) txnCap.SetId(txn.Id()) txnCap.SetRetry(txn.Retry()) txnCap.SetSubmitter(txn.Submitter()) txnCap.SetSubmitterBootCount(txn.SubmitterBootCount()) txnCap.SetActions(txn.Actions()) txnCap.SetAllocations(txn.Allocations()) txnCap.SetFInc(txn.FInc()) txnCap.SetTopologyVersion(txn.TopologyVersion()) return server.SegToBytes(seg) }