|
|
|
@ -3208,16 +3208,17 @@ ReorderBufferAddNewTupleCids(ReorderBuffer *rb, TransactionId xid, |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Setup the invalidation of the toplevel transaction. |
|
|
|
|
* Accumulate the invalidations for executing them later. |
|
|
|
|
* |
|
|
|
|
* This needs to be called for each XLOG_XACT_INVALIDATIONS message and |
|
|
|
|
* accumulates all the invalidation messages in the toplevel transaction as |
|
|
|
|
* well as in the form of change in reorder buffer. We require to record it in |
|
|
|
|
* form of the change so that we can execute only the required invalidations |
|
|
|
|
* instead of executing all the invalidations on each CommandId increment. We |
|
|
|
|
* also need to accumulate these in the toplevel transaction because in some |
|
|
|
|
* cases we skip processing the transaction (see ReorderBufferForget), we need |
|
|
|
|
* to execute all the invalidations together. |
|
|
|
|
* accumulates all the invalidation messages in the toplevel transaction, if |
|
|
|
|
* available, otherwise in the current transaction, as well as in the form of |
|
|
|
|
* change in reorder buffer. We require to record it in form of the change |
|
|
|
|
* so that we can execute only the required invalidations instead of executing |
|
|
|
|
* all the invalidations on each CommandId increment. We also need to |
|
|
|
|
* accumulate these in the txn buffer because in some cases where we skip |
|
|
|
|
* processing the transaction (see ReorderBufferForget), we need to execute |
|
|
|
|
* all the invalidations together. |
|
|
|
|
*/ |
|
|
|
|
void |
|
|
|
|
ReorderBufferAddInvalidations(ReorderBuffer *rb, TransactionId xid, |
|
|
|
@ -3233,8 +3234,9 @@ ReorderBufferAddInvalidations(ReorderBuffer *rb, TransactionId xid, |
|
|
|
|
oldcontext = MemoryContextSwitchTo(rb->context); |
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Collect all the invalidations under the top transaction so that we can |
|
|
|
|
* execute them all together. See comment atop this function |
|
|
|
|
* Collect all the invalidations under the top transaction, if available, |
|
|
|
|
* so that we can execute them all together. See comments atop this |
|
|
|
|
* function. |
|
|
|
|
*/ |
|
|
|
|
if (txn->toptxn) |
|
|
|
|
txn = txn->toptxn; |
|
|
|
|