On Fri, Aug 13, 2021 at 2:52 AM Greg Nancarrow <gregn4...@gmail.com> wrote: > With your proposed approach, what I'm seeing is that the worker calls > GetTransactionSnapshot() at some point, which then builds a new > snapshot, and results in increasing TransactionXmin (probably because > another concurrent transaction has since completed). This snapshot is > thus later than the snapshot used in the execution state of the query > being executed. This causes the Assert in > SubTransGetTopmostTransaction() to fire because the xid doesn't follow > or equal the TransactionXmin value.
Ah ha! Thank you. So I think what I was missing here is that even though the transaction snapshot is not a well-defined concept when !IsolationUsesXactSnapshot(), we still need TransactionXmin to be set to a value that's earlier than any XID we might inquire about. So the proposal to install the leader's active snapshot as the worker's transaction snapshot is really just a way of making that happen. Now that I understand better, that seems OK to me when !IsolationUsesXactSnapshot(), but otherwise I think we need to serialize and restore the actual transaction snapshot. Do you agree? -- Robert Haas EDB: http://www.enterprisedb.com