1
0
mirror of https://github.com/postgres/postgres.git synced 2025-04-24 10:47:04 +03:00

Fix parallel sort, broken by the balanced merge patch.

The code for initializing the tapes on each merge iteration was skipped
in a parallel worker. I put the !WORKER(state) check in wrong place while
rebasing the patch.

That caused failures in the index build in 'multiple-row-versions'
isolation test, in multiple buildfarm members. On my laptop it was easier
to reproduce by building an index on a larger table, so that you got a
parallel sort more reliably.
This commit is contained in:
Heikki Linnakangas 2021-10-18 20:42:10 +03:00
parent aa3ac6453b
commit fc0f3b4cb0

View File

@ -2923,7 +2923,7 @@ mergeruns(Tuplesortstate *state)
* Rewind all the output tapes, and make them inputs for the next * Rewind all the output tapes, and make them inputs for the next
* pass. * pass.
*/ */
if (state->nInputRuns == 0 && !WORKER(state)) if (state->nInputRuns == 0)
{ {
int64 input_buffer_size; int64 input_buffer_size;
@ -2975,7 +2975,8 @@ mergeruns(Tuplesortstate *state)
* sorted tape, we can stop at this point and do the final merge * sorted tape, we can stop at this point and do the final merge
* on-the-fly. * on-the-fly.
*/ */
if (!state->randomAccess && state->nInputRuns <= state->nInputTapes) if (!state->randomAccess && state->nInputRuns <= state->nInputTapes
&& !WORKER(state))
{ {
/* Tell logtape.c we won't be writing anymore */ /* Tell logtape.c we won't be writing anymore */
LogicalTapeSetForgetFreeSpace(state->tapeset); LogicalTapeSetForgetFreeSpace(state->tapeset);