From ab080cad930a4c8c1592ec5c93c423f3ede45f36 Mon Sep 17 00:00:00 2001 From: Jelte Fennema Date: Tue, 3 Jan 2023 10:24:01 +0100 Subject: [PATCH] Fix bug introduced by #6412 In #6412 I made a change to not re-assign the global PID if it was already set. This inadvertently introduced a regression where `userId` and `databaseId` would not be set on the backend data when the global PID was assigned in the authentication hook. This fixes it by doing two things: 1. Removing `userId` from `BackendData`, since it's not used anywhere anyway. 2. Move assignment of `databaseId` to InitializeBackendData. --- src/backend/distributed/shared_library_init.c | 1 + src/backend/distributed/transaction/backend_data.c | 6 +----- src/include/distributed/backend_data.h | 2 +- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/src/backend/distributed/shared_library_init.c b/src/backend/distributed/shared_library_init.c index c15268056..df361b251 100644 --- a/src/backend/distributed/shared_library_init.c +++ b/src/backend/distributed/shared_library_init.c @@ -678,6 +678,7 @@ StartupCitusBackend(void) * the gpid from the application_name. */ AssignGlobalPID(); + RegisterConnectionCleanup(); } diff --git a/src/backend/distributed/transaction/backend_data.c b/src/backend/distributed/transaction/backend_data.c index 3daebc6e8..37e0930b9 100644 --- a/src/backend/distributed/transaction/backend_data.c +++ b/src/backend/distributed/transaction/backend_data.c @@ -717,6 +717,7 @@ InitializeBackendData(const char *applicationName) SpinLockAcquire(&MyBackendData->mutex); MyBackendData->distributedCommandOriginator = IsExternalClientBackend(); MyBackendData->globalPID = gpid; + MyBackendData->databaseId = MyDatabaseId; SpinLockRelease(&MyBackendData->mutex); /* @@ -765,7 +766,6 @@ UnSetGlobalPID(void) MyBackendData->globalPID = 0; MyBackendData->databaseId = 0; - MyBackendData->userId = 0; MyBackendData->distributedCommandOriginator = false; SpinLockRelease(&MyBackendData->mutex); @@ -923,14 +923,10 @@ AssignGlobalPID(void) globalPID = ExtractGlobalPID(application_name); } - Oid userId = GetUserId(); - SpinLockAcquire(&MyBackendData->mutex); MyBackendData->globalPID = globalPID; MyBackendData->distributedCommandOriginator = distributedCommandOriginator; - MyBackendData->databaseId = MyDatabaseId; - MyBackendData->userId = userId; SpinLockRelease(&MyBackendData->mutex); } diff --git a/src/include/distributed/backend_data.h b/src/include/distributed/backend_data.h index b0846c8a7..0b1ee0644 100644 --- a/src/include/distributed/backend_data.h +++ b/src/include/distributed/backend_data.h @@ -36,7 +36,6 @@ typedef struct BackendData { Oid databaseId; - Oid userId; slock_t mutex; bool cancelledDueToDeadlock; uint64 globalPID; @@ -60,6 +59,7 @@ extern void AssignDistributedTransactionId(void); extern void AssignGlobalPID(void); extern void SetBackendDataGlobalPID(uint64 globalPID); extern uint64 GetGlobalPID(void); +extern void SetBackendDataAfterAuthData(void); extern void SetBackendDataDistributedCommandOriginator(bool distributedCommandOriginator); extern uint64 ExtractGlobalPID(const char *applicationName);