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:
parent
aa3ac6453b
commit
fc0f3b4cb0
@ -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);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user