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
}