Ensure job IDs are unique across workers

pull/1157/head
Marco Slot 2017-01-21 13:26:16 +01:00
parent 4a84ee5512
commit 87ae26aef3
1 changed files with 10 additions and 1 deletions

View File

@ -1713,6 +1713,8 @@ UniqueJobId(void)
Datum sequenceIdDatum = ObjectIdGetDatum(sequenceId);
Datum jobIdDatum = 0;
int64 jobId = 0;
int64 localizedJobId = 0;
int64 localGroupId = GetLocalGroupId();
Oid savedUserId = InvalidOid;
int savedSecurityContext = 0;
@ -1723,8 +1725,15 @@ UniqueJobId(void)
jobIdDatum = DirectFunctionCall1(nextval_oid, sequenceIdDatum);
jobId = DatumGetInt64(jobIdDatum);
/*
* Add the local group id information to the jobId to
* prevent concurrent jobs on different groups to conflict.
*/
localizedJobId = jobId | (localGroupId << 32);
SetUserIdAndSecContext(savedUserId, savedSecurityContext);
return jobId;
return localizedJobId;
}