func NewTxnMeta()

in oplog/txn_meta.go [50:90]


func NewTxnMeta(op ParsedLog) (TxnMeta, error) {
	if op.LSID == nil || op.TxnNumber == nil || op.Operation != "c" {
		return TxnMeta{}, nil
	}

	// Default prevOpTime to empty to "upgrade" 4.0 transactions without it.
	m := TxnMeta{
		id:         TxnID{lsid: string(op.LSID), txnNumber: *op.TxnNumber},
		prevOpTime: emptyPrev,
	}

	if op.PrevOpTime != nil {
		m.prevOpTime = string(op.PrevOpTime)
	}

	// Inspect command to confirm a transaction command and identify parameters.
	var isRealTxn bool
	for _, e := range op.Object {
		switch e.Key {
		case "applyOps":
			isRealTxn = true
		case "commitTransaction":
			isRealTxn = true
			m.commit = true
		case "abortTransaction":
			isRealTxn = true
			m.abort = true
		case "partialTxn":
			m.partial = true
		case "prepare":
			m.prepare = true
		}
	}

	// Defensive, in case some other op command ever includes lsid+txnNumber
	if !isRealTxn {
		return TxnMeta{}, nil
	}

	return m, nil
}