codekingpro/portable-devtools
116k
1/*-------------------------------------------------------------------------2 *3 * parallel.h4 * Infrastructure for launching parallel workers5 *6 * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group7 * Portions Copyright (c) 1994, Regents of the University of California8 *9 * src/include/access/parallel.h10 *11 *-------------------------------------------------------------------------12 */13 14#ifndef PARALLEL_H15#define PARALLEL_H16 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 23typedef void (*parallel_worker_main_type) (dsm_segment *seg, shm_toc *toc);24 25typedef struct ParallelWorkerInfo26{27 BackgroundWorkerHandle *bgwhandle;28 shm_mq_handle *error_mqh;29 int32 pid;30} ParallelWorkerInfo;31 32typedef struct ParallelContext33{34 dlist_node node;35 SubTransactionId subid;36 int nworkers; /* Maximum number of workers to launch */37 int nworkers_to_launch; /* Actual number of workers to launch */38 int nworkers_launched;39 char *library_name;40 char *function_name;41 ErrorContextCallback *error_context_stack;42 shm_toc_estimator estimator;43 dsm_segment *seg;44 void *private_memory;45 shm_toc *toc;46 ParallelWorkerInfo *worker;47 int nknown_attached_workers;48 bool *known_attached_workers;49} ParallelContext;50 51typedef struct ParallelWorkerContext52{53 dsm_segment *seg;54 shm_toc *toc;55} ParallelWorkerContext;56 57extern PGDLLIMPORT volatile sig_atomic_t ParallelMessagePending;58extern PGDLLIMPORT int ParallelWorkerNumber;59extern PGDLLIMPORT bool InitializingParallelWorker;60 61#define IsParallelWorker() (ParallelWorkerNumber >= 0)62 63extern ParallelContext *CreateParallelContext(const char *library_name,64 const char *function_name, int nworkers);65extern void InitializeParallelDSM(ParallelContext *pcxt);66extern void ReinitializeParallelDSM(ParallelContext *pcxt);67extern void ReinitializeParallelWorkers(ParallelContext *pcxt, int nworkers_to_launch);68extern void LaunchParallelWorkers(ParallelContext *pcxt);69extern void WaitForParallelWorkersToAttach(ParallelContext *pcxt);70extern void WaitForParallelWorkersToFinish(ParallelContext *pcxt);71extern void DestroyParallelContext(ParallelContext *pcxt);72extern bool ParallelContextActive(void);73 74extern void HandleParallelMessageInterrupt(void);75extern void HandleParallelMessages(void);76extern void AtEOXact_Parallel(bool isCommit);77extern void AtEOSubXact_Parallel(bool isCommit, SubTransactionId mySubId);78extern void ParallelWorkerReportLastRecEnd(XLogRecPtr last_xlog_end);79 80extern void ParallelWorkerMain(Datum main_arg);81 82#endif /* PARALLEL_H */83 