Commit 602e6b1
committed
[fix](local shuffle) Fix COREDUMP: skip LE insertion when child is serial in enforceChild
When a streaming AGG requests PASSTHROUGH from a serial UNPARTITIONED
Exchange child, enforceChild would insert a PASSTHROUGH local exchange
creating a pipeline split. This disconnects the AggSink↔AggSource shared
state pairing because the LE boundary puts them in separate pipelines
with mismatched task counts, causing source_deps to be empty → DCHECK
(ASAN) or SIGSEGV (Release) in set_ready_to_read().
Fix: add childOutput.first.isSerialOperator() check in enforceChild,
mirroring BE's need_to_local_exchange which checks any_of(operators[idx..end],
is_serial) to skip LE insertion when a serial operator is in the pipeline.
Reproducer: multi-distinct COUNT query on table with many buckets
(non-pooling) where MultiCastDataSinks feed serial UNPARTITIONED
Exchanges → streaming AGG fragments.1 parent 1034371 commit 602e6b1
1 file changed
Lines changed: 7 additions & 1 deletion
Lines changed: 7 additions & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
979 | 979 | | |
980 | 980 | | |
981 | 981 | | |
982 | | - | |
| 982 | + | |
| 983 | + | |
| 984 | + | |
| 985 | + | |
| 986 | + | |
| 987 | + | |
| 988 | + | |
983 | 989 | | |
984 | 990 | | |
985 | 991 | | |
| |||
0 commit comments