Allow intermediate results to be used in parallel workers

pull/1879/head
Marco Slot 2017-12-15 20:08:53 +01:00
parent 704828b237
commit af201a2f6d
1 changed files with 9 additions and 7 deletions

View File

@ -482,25 +482,27 @@ UnlockBackendSharedMemory(void)
/* /*
* GetCurrentDistributedTransactionId reads the backend's distributed transaction id and * GetCurrentDistributedTransactionId reads the backend's distributed transaction id and
* returns a copy of it. * returns a copy of it.
*
* When called from a parallel worker, it uses the parent's transaction ID per the logic
* in GetBackendDataForProc.
*/ */
DistributedTransactionId * DistributedTransactionId *
GetCurrentDistributedTransactionId(void) GetCurrentDistributedTransactionId(void)
{ {
DistributedTransactionId *currentDistributedTransactionId = DistributedTransactionId *currentDistributedTransactionId =
(DistributedTransactionId *) palloc(sizeof(DistributedTransactionId)); (DistributedTransactionId *) palloc(sizeof(DistributedTransactionId));
BackendData backendData;
SpinLockAcquire(&MyBackendData->mutex); GetBackendDataForProc(MyProc, &backendData);
currentDistributedTransactionId->initiatorNodeIdentifier = currentDistributedTransactionId->initiatorNodeIdentifier =
MyBackendData->transactionId.initiatorNodeIdentifier; backendData.transactionId.initiatorNodeIdentifier;
currentDistributedTransactionId->transactionOriginator = currentDistributedTransactionId->transactionOriginator =
MyBackendData->transactionId.transactionOriginator; backendData.transactionId.transactionOriginator;
currentDistributedTransactionId->transactionNumber = currentDistributedTransactionId->transactionNumber =
MyBackendData->transactionId.transactionNumber; backendData.transactionId.transactionNumber;
currentDistributedTransactionId->timestamp = currentDistributedTransactionId->timestamp =
MyBackendData->transactionId.timestamp; backendData.transactionId.timestamp;
SpinLockRelease(&MyBackendData->mutex);
return currentDistributedTransactionId; return currentDistributedTransactionId;
} }