PostgreSQL Source Code  git master
parallel.h
Go to the documentation of this file.
1 /*-------------------------------------------------------------------------
2  *
3  * parallel.h
4  * Infrastructure for launching parallel workers
5  *
6  * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
7  * Portions Copyright (c) 1994, Regents of the University of California
8  *
9  * src/include/access/parallel.h
10  *
11  *-------------------------------------------------------------------------
12  */
13 
14 #ifndef PARALLEL_H
15 #define PARALLEL_H
16 
17 #include "access/xlogdefs.h"
18 #include "lib/ilist.h"
19 #include "postmaster/bgworker.h"
20 #include "storage/shm_mq.h"
21 #include "storage/shm_toc.h"
22 
23 typedef void (*parallel_worker_main_type) (dsm_segment *seg, shm_toc *toc);
24 
25 typedef struct ParallelWorkerInfo
26 {
31 
32 typedef struct ParallelContext
33 {
36  int nworkers; /* Maximum number of workers to launch */
37  int nworkers_to_launch; /* Actual number of workers to launch */
39  char *library_name;
50 
51 typedef struct ParallelWorkerContext
52 {
56 
57 extern PGDLLIMPORT volatile sig_atomic_t ParallelMessagePending;
60 
61 #define IsParallelWorker() (ParallelWorkerNumber >= 0)
62 
63 extern ParallelContext *CreateParallelContext(const char *library_name,
64  const char *function_name, int nworkers);
65 extern void InitializeParallelDSM(ParallelContext *pcxt);
66 extern void ReinitializeParallelDSM(ParallelContext *pcxt);
67 extern void ReinitializeParallelWorkers(ParallelContext *pcxt, int nworkers_to_launch);
68 extern void LaunchParallelWorkers(ParallelContext *pcxt);
71 extern void DestroyParallelContext(ParallelContext *pcxt);
72 extern bool ParallelContextActive(void);
73 
74 extern void HandleParallelMessageInterrupt(void);
75 extern void HandleParallelMessages(void);
76 extern void AtEOXact_Parallel(bool isCommit);
77 extern void AtEOSubXact_Parallel(bool isCommit, SubTransactionId mySubId);
78 extern void ParallelWorkerReportLastRecEnd(XLogRecPtr last_xlog_end);
79 
80 extern void ParallelWorkerMain(Datum main_arg);
81 
82 #endif /* PARALLEL_H */
#define PGDLLIMPORT
Definition: c.h:1303
uint32 SubTransactionId
Definition: c.h:640
signed int int32
Definition: c.h:478
PGDLLIMPORT volatile sig_atomic_t ParallelMessagePending
Definition: parallel.c:116
void HandleParallelMessageInterrupt(void)
Definition: parallel.c:1014
void InitializeParallelDSM(ParallelContext *pcxt)
Definition: parallel.c:203
PGDLLIMPORT int ParallelWorkerNumber
Definition: parallel.c:113
void WaitForParallelWorkersToFinish(ParallelContext *pcxt)
Definition: parallel.c:773
void LaunchParallelWorkers(ParallelContext *pcxt)
Definition: parallel.c:550
void ReinitializeParallelDSM(ParallelContext *pcxt)
Definition: parallel.c:486
void HandleParallelMessages(void)
Definition: parallel.c:1025
void DestroyParallelContext(ParallelContext *pcxt)
Definition: parallel.c:927
void ParallelWorkerReportLastRecEnd(XLogRecPtr last_xlog_end)
Definition: parallel.c:1543
PGDLLIMPORT bool InitializingParallelWorker
Definition: parallel.c:119
bool ParallelContextActive(void)
Definition: parallel.c:1001
void ParallelWorkerMain(Datum main_arg)
Definition: parallel.c:1262
ParallelContext * CreateParallelContext(const char *library_name, const char *function_name, int nworkers)
Definition: parallel.c:165
void(* parallel_worker_main_type)(dsm_segment *seg, shm_toc *toc)
Definition: parallel.h:23
struct ParallelWorkerContext ParallelWorkerContext
void ReinitializeParallelWorkers(ParallelContext *pcxt, int nworkers_to_launch)
Definition: parallel.c:536
struct ParallelContext ParallelContext
void WaitForParallelWorkersToAttach(ParallelContext *pcxt)
Definition: parallel.c:670
struct ParallelWorkerInfo ParallelWorkerInfo
void AtEOSubXact_Parallel(bool isCommit, SubTransactionId mySubId)
Definition: parallel.c:1226
void AtEOXact_Parallel(bool isCommit)
Definition: parallel.c:1245
uintptr_t Datum
Definition: postgres.h:64
char * library_name
Definition: parallel.h:39
dsm_segment * seg
Definition: parallel.h:43
bool * known_attached_workers
Definition: parallel.h:48
ErrorContextCallback * error_context_stack
Definition: parallel.h:41
SubTransactionId subid
Definition: parallel.h:35
shm_toc_estimator estimator
Definition: parallel.h:42
int nknown_attached_workers
Definition: parallel.h:47
ParallelWorkerInfo * worker
Definition: parallel.h:46
shm_toc * toc
Definition: parallel.h:45
dlist_node node
Definition: parallel.h:34
void * private_memory
Definition: parallel.h:44
int nworkers_launched
Definition: parallel.h:38
int nworkers_to_launch
Definition: parallel.h:37
char * function_name
Definition: parallel.h:40
dsm_segment * seg
Definition: parallel.h:53
BackgroundWorkerHandle * bgwhandle
Definition: parallel.h:27
shm_mq_handle * error_mqh
Definition: parallel.h:28
uint64 XLogRecPtr
Definition: xlogdefs.h:21