Do we really need SubtransCutoffXid? AFAICS the reason for having it is
only this claim in RecordTransactionCommit:
* We can't mark committed subtransactions as fully committed,
* because concurrent transactions would see them as committed
* and not as in-progress. Leave them as "subcommitted" until
* the parent transaction is below OldestXmin, per VACUUM.
but I think this is dead wrong. As long as we mark the parent committed
first, there is no race condition. tqual tests that are using snapshots
will need to recognize that the subtransaction is a member of one of the
snapshotted main XIDs, and those that are not will think committed is
committed. So I want to mark subtransactions fully committed in
RecordTransactionCommit, and lose SubtransCutoffXid. Comments?
BTW, it would help to know what parts of the patch you intend to work on
over the next couple of days. I'm reviewing and editorializing right
now with intent to commit soon, so it would be good if we can avoid
tromping on each others' feet.
regards, tom lane