Skip to content

Commit 7986446

Browse files
committed
add SpawnPartitionsWorker to backend's locking group
1 parent f603e6c commit 7986446

File tree

2 files changed

+29
-0
lines changed

2 files changed

+29
-0
lines changed

src/pathman_workers.c

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
#include "storage/dsm.h"
3030
#include "storage/ipc.h"
3131
#include "storage/latch.h"
32+
#include "storage/proc.h"
3233
#include "utils/builtins.h"
3334
#include "utils/datum.h"
3435
#include "utils/memutils.h"
@@ -256,6 +257,12 @@ create_partitions_bg_worker_segment(Oid relid, Datum value, Oid value_type)
256257
args->dbid = MyDatabaseId;
257258
args->partitioned_table = relid;
258259

260+
#if PG_VERSION_NUM >= 90600
261+
/* Initialize args for BecomeLockGroupMember() */
262+
args->parallel_master_pgproc = MyProc;
263+
args->parallel_master_pid = MyProcPid;
264+
#endif
265+
259266
/* Write value-related stuff */
260267
args->value_type = value_type;
261268
args->value_size = datum_size;
@@ -286,6 +293,11 @@ create_partitions_bg_worker(Oid relid, Datum value, Oid value_type)
286293
segment_handle = dsm_segment_handle(segment);
287294
bgw_args = (SpawnPartitionArgs *) dsm_segment_address(segment);
288295

296+
#if PG_VERSION_NUM >= 90600
297+
/* Become locking group leader */
298+
BecomeLockGroupLeader();
299+
#endif
300+
289301
/* Start worker and wait for it to finish */
290302
start_bg_worker(spawn_partitions_bgw,
291303
bgw_main_spawn_partitions,
@@ -337,6 +349,13 @@ bgw_main_spawn_partitions(Datum main_arg)
337349
spawn_partitions_bgw, MyProcPid);
338350
args = dsm_segment_address(segment);
339351

352+
#if PG_VERSION_NUM >= 90600
353+
/* Join locking group. If we can't join the group, quit */
354+
if (!BecomeLockGroupMember(args->parallel_master_pgproc,
355+
args->parallel_master_pid))
356+
return;
357+
#endif
358+
340359
/* Establish connection and start transaction */
341360
BackgroundWorkerInitializeConnectionByOid(args->dbid, args->userid);
342361

src/pathman_workers.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,10 @@
2020
#include "postgres.h"
2121
#include "storage/spin.h"
2222

23+
#if PG_VERSION_NUM >= 90600
24+
#include "storage/lock.h"
25+
#endif
26+
2327

2428
/*
2529
* Store args, result and execution status of CreatePartitionsWorker.
@@ -32,6 +36,12 @@ typedef struct
3236
Oid dbid; /* database which stores 'partitioned_table' */
3337
Oid partitioned_table;
3438

39+
#if PG_VERSION_NUM >= 90600
40+
/* Args for BecomeLockGroupMember() function */
41+
PGPROC *parallel_master_pgproc;
42+
pid_t parallel_master_pid;
43+
#endif
44+
3545
/* Needed to decode Datum from 'values' */
3646
Oid value_type;
3747
Size value_size;

0 commit comments

Comments
 (0)