From af201a2f6d29afcbb45b59d5a6dffe56ede169b1 Mon Sep 17 00:00:00 2001 From: Marco Slot Date: Fri, 15 Dec 2017 20:08:53 +0100 Subject: [PATCH] Allow intermediate results to be used in parallel workers --- .../distributed/transaction/backend_data.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/backend/distributed/transaction/backend_data.c b/src/backend/distributed/transaction/backend_data.c index 70c08ca8f..79ba3c96c 100644 --- a/src/backend/distributed/transaction/backend_data.c +++ b/src/backend/distributed/transaction/backend_data.c @@ -482,25 +482,27 @@ UnlockBackendSharedMemory(void) /* * GetCurrentDistributedTransactionId reads the backend's distributed transaction id and * returns a copy of it. + * + * When called from a parallel worker, it uses the parent's transaction ID per the logic + * in GetBackendDataForProc. */ DistributedTransactionId * GetCurrentDistributedTransactionId(void) { DistributedTransactionId *currentDistributedTransactionId = (DistributedTransactionId *) palloc(sizeof(DistributedTransactionId)); + BackendData backendData; - SpinLockAcquire(&MyBackendData->mutex); + GetBackendDataForProc(MyProc, &backendData); currentDistributedTransactionId->initiatorNodeIdentifier = - MyBackendData->transactionId.initiatorNodeIdentifier; + backendData.transactionId.initiatorNodeIdentifier; currentDistributedTransactionId->transactionOriginator = - MyBackendData->transactionId.transactionOriginator; + backendData.transactionId.transactionOriginator; currentDistributedTransactionId->transactionNumber = - MyBackendData->transactionId.transactionNumber; + backendData.transactionId.transactionNumber; currentDistributedTransactionId->timestamp = - MyBackendData->transactionId.timestamp; - - SpinLockRelease(&MyBackendData->mutex); + backendData.transactionId.timestamp; return currentDistributedTransactionId; }