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.
* Rewind all the output tapes, and make them inputs for the next
* pass.
*/
- if (state->nInputRuns == 0 && !WORKER(state))
+ if (state->nInputRuns == 0)
{
int64 input_buffer_size;
* sorted tape, we can stop at this point and do the final merge
* 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 */
LogicalTapeSetForgetFreeSpace(state->tapeset);