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.
fix-issue-wit-6412-v2
Jelte Fennema 2023-01-03 10:24:01 +01:00
parent f56904fe04
commit ab080cad93
3 changed files with 3 additions and 6 deletions

View File

@ -678,6 +678,7 @@ StartupCitusBackend(void)
* the gpid from the application_name.
*/
AssignGlobalPID();
RegisterConnectionCleanup();
}

View File

@ -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);
}

View File

@ -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);