mirror of
https://github.com/postgres/postgres.git
synced 2025-08-19 23:22:23 +03:00
Improve fix for not entering parallel mode when holding interrupts.
Commitac04aa84a
put the shutoff for this into the planner, which is not ideal because it doesn't prevent us from re-using a previously made parallel plan. Revert the planner change and instead put the shutoff into InitializeParallelDSM, modeling it on the existing code there for recovering from failure to allocate a DSM segment. However, that code path is mostly untested, and testing a bit harder showed there's at least one bug: ExecHashJoinReInitializeDSM is not prepared for us to have skipped doing parallel DSM setup. I also thought the Assert in ReinitializeParallelWorkers is pretty ill-advised, and replaced it with a silent Min() operation. The existing test case added byac04aa84a
serves fine to test this version of the fix, so no change needed there. Patch by me, but thanks to Noah Misch for the core idea that we could shut off worker creation when !INTERRUPTS_CAN_BE_PROCESSED. Back-patch to v12, asac04aa84a
was. Discussion: https://postgr.es/m/CAC-SaSzHUKT=vZJ8MPxYdC_URPfax+yoA1hKTcF4ROz_Q6z0_Q@mail.gmail.com
This commit is contained in:
@@ -1524,8 +1524,13 @@ void
|
||||
ExecHashJoinReInitializeDSM(HashJoinState *state, ParallelContext *cxt)
|
||||
{
|
||||
int plan_node_id = state->js.ps.plan->plan_node_id;
|
||||
ParallelHashJoinState *pstate =
|
||||
shm_toc_lookup(cxt->toc, plan_node_id, false);
|
||||
ParallelHashJoinState *pstate;
|
||||
|
||||
/* Nothing to do if we failed to create a DSM segment. */
|
||||
if (cxt->seg == NULL)
|
||||
return;
|
||||
|
||||
pstate = shm_toc_lookup(cxt->toc, plan_node_id, false);
|
||||
|
||||
/*
|
||||
* It would be possible to reuse the shared hash table in single-batch
|
||||
|
Reference in New Issue
Block a user