mirror of
https://github.com/postgres/postgres.git
synced 2025-06-05 23:56:58 +03:00
Fix rare assertion failure in parallel hash join.
When a backend runs out of inner tuples to hash, it should detach from grow_batch_barrier only after it has flushed all batches to disk and merged counters, not before. Otherwise a concurrent backend in ExecParallelHashIncreaseNumBatches() could stop waiting for this backend and try to read tuples before they have been written. This commit reorders those operations and should fix the assertion failures seen occasionally on the build farm since commit 1804284042e659e7d16904e7bbb0ad546394b6a3. Author: Thomas Munro Discussion: https://postgr.es/m/E1eRwXy-0004IK-TO%40gemulon.postgresql.org
This commit is contained in:
parent
be2343221f
commit
f83040c62a
@ -288,8 +288,6 @@ MultiExecParallelHash(HashState *node)
|
||||
ExecParallelHashTableInsert(hashtable, slot, hashvalue);
|
||||
hashtable->partialTuples++;
|
||||
}
|
||||
BarrierDetach(&pstate->grow_buckets_barrier);
|
||||
BarrierDetach(&pstate->grow_batches_barrier);
|
||||
|
||||
/*
|
||||
* Make sure that any tuples we wrote to disk are visible to
|
||||
@ -304,6 +302,9 @@ MultiExecParallelHash(HashState *node)
|
||||
*/
|
||||
ExecParallelHashMergeCounters(hashtable);
|
||||
|
||||
BarrierDetach(&pstate->grow_buckets_barrier);
|
||||
BarrierDetach(&pstate->grow_batches_barrier);
|
||||
|
||||
/*
|
||||
* Wait for everyone to finish building and flushing files and
|
||||
* counters.
|
||||
|
Loading…
x
Reference in New Issue
Block a user