From 87ae26aef3cacc1d04dc246c24bf144277b830c1 Mon Sep 17 00:00:00 2001 From: Marco Slot Date: Sat, 21 Jan 2017 13:26:16 +0100 Subject: [PATCH] Ensure job IDs are unique across workers --- .../distributed/planner/multi_physical_planner.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/backend/distributed/planner/multi_physical_planner.c b/src/backend/distributed/planner/multi_physical_planner.c index c3cc73afd..22ee7aa60 100644 --- a/src/backend/distributed/planner/multi_physical_planner.c +++ b/src/backend/distributed/planner/multi_physical_planner.c @@ -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; }