mirror of
https://github.com/postgres/postgres.git
synced 2025-06-30 21:42:05 +03:00
Add new function WaitForParallelWorkersToAttach.
Once this function has been called, we know that all workers have started and attached to their error queues -- so if any of them subsequently exit uncleanly, we'll be sure to throw an ERROR promptly. Otherwise, users of the ParallelContext machinery must be careful not to wait forever for a worker that has failed to start. Parallel query manages to work without needing this for reasons explained in new comments added by this patch, but it's a useful primitive for other parallel operations, such as the pending patch to make creating a btree index run in parallel. Amit Kapila, revised by me. Additional review by Peter Geoghegan. Discussion: http://postgr.es/m/CAA4eK1+e2MzyouF5bg=OtyhDSX+=Ao=3htN=T-r_6s3gCtKFiw@mail.gmail.com
This commit is contained in:
@ -43,7 +43,8 @@ typedef struct ParallelContext
|
||||
void *private_memory;
|
||||
shm_toc *toc;
|
||||
ParallelWorkerInfo *worker;
|
||||
bool *any_message_received;
|
||||
int nknown_attached_workers;
|
||||
bool *known_attached_workers;
|
||||
} ParallelContext;
|
||||
|
||||
typedef struct ParallelWorkerContext
|
||||
@ -62,6 +63,7 @@ extern ParallelContext *CreateParallelContext(const char *library_name, const ch
|
||||
extern void InitializeParallelDSM(ParallelContext *pcxt);
|
||||
extern void ReinitializeParallelDSM(ParallelContext *pcxt);
|
||||
extern void LaunchParallelWorkers(ParallelContext *pcxt);
|
||||
extern void WaitForParallelWorkersToAttach(ParallelContext *pcxt);
|
||||
extern void WaitForParallelWorkersToFinish(ParallelContext *pcxt);
|
||||
extern void DestroyParallelContext(ParallelContext *pcxt);
|
||||
extern bool ParallelContextActive(void);
|
||||
|
Reference in New Issue
Block a user