This is an automated email from the ASF dual-hosted git repository. yiguolei pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push:
new 6d26aca4cad [fix](pipeline) sort_merge should throw exception in
has_next_block if got failed status (#29076)
6d26aca4cad is described below
commit 6d26aca4cad3757bbdb243c0d5f24729ba09c674
Author: zhiqiang <[email protected]>
AuthorDate: Wed Dec 27 10:06:01 2023 +0800
[fix](pipeline) sort_merge should throw exception in has_next_block if got
failed status (#29076)
Test in
regression-test/suites/datatype_p0/decimalv3/test_decimalv3_overflow.groovy::249
sometimes failed when there are multiple BEs and FE process report status
slowly for some reason.
explain select k1, k2, k1 * k2 from test_decimal128_overflow2 order by 1,2,3
--------------
+----------------------------------------------------------------------------------------------------------------------------+
| Explain String(Nereids Planner)
|
+----------------------------------------------------------------------------------------------------------------------------+
| PLAN FRAGMENT 0
|
| OUTPUT EXPRS:
|
| k1[#5]
|
| k2[#6]
|
| (k1 * k2)[#7]
|
| PARTITION: UNPARTITIONED
|
|
|
| HAS_COLO_PLAN_NODE: false
|
|
|
| VRESULT SINK
|
| MYSQL_PROTOCAL
|
|
|
| 111:VMERGING-EXCHANGE
|
| offset: 0
|
|
|
| PLAN FRAGMENT 1
|
|
|
| PARTITION: HASH_PARTITIONED: k1[#0], k2[#1]
|
|
|
| HAS_COLO_PLAN_NODE: false
|
|
|
| STREAM DATA SINK
|
| EXCHANGE ID: 111
|
| UNPARTITIONED
|
|
|
| 108:VSORT
|
| | order by: k1[#5] ASC, k2[#6] ASC, (k1 * k2)[#7] ASC
|
| | offset: 0
|
| |
|
| 102:VOlapScanNode
|
| TABLE:
regression_test_datatype_p0_decimalv3.test_decimal128_overflow2(test_decimal128_overflow2),
PREAGGREGATION: ON |
| partitions=1/1 (test_decimal128_overflow2), tablets=8/8,
tabletList=22841,22843,22845 ... |
| cardinality=6, avgRowSize=0.0, numNodes=1
|
| pushAggOp=NONE
|
| projections: k1[#0], k2[#1], (k1[#0] * k2[#1])
|
| project output tuple id: 1
|
+----------------------------------------------------------------------------------------------------------------------------+
36 rows in set (0.03 sec)
Why failed:
Multiple BEs
Fragments 0 and 1 are MUST on different BEs
Pipeline task of VOlapScanNode which executes k1*k2 failed sets query
status to cancelled
Pipeline task of VSort call try close, send Cancelled status to
VMergeExchange
sort_curso did not throw exception when it meets error
---
be/src/vec/core/sort_cursor.h | 2 ++
be/src/vec/runtime/vsorted_run_merger.cpp | 14 +++++++++-----
2 files changed, 11 insertions(+), 5 deletions(-)
diff --git a/be/src/vec/core/sort_cursor.h b/be/src/vec/core/sort_cursor.h
index 71db3428541..b43449b50b0 100644
--- a/be/src/vec/core/sort_cursor.h
+++ b/be/src/vec/core/sort_cursor.h
@@ -244,6 +244,8 @@ struct BlockSupplierSortCursorImpl : public
MergeSortCursorImpl {
}
MergeSortCursorImpl::reset(_block);
return status.ok();
+ } else if (!status.ok()) {
+ throw std::runtime_error(status.msg());
}
return false;
}
diff --git a/be/src/vec/runtime/vsorted_run_merger.cpp
b/be/src/vec/runtime/vsorted_run_merger.cpp
index 6d2f68db628..3637bd54aed 100644
--- a/be/src/vec/runtime/vsorted_run_merger.cpp
+++ b/be/src/vec/runtime/vsorted_run_merger.cpp
@@ -69,12 +69,16 @@ void VSortedRunMerger::init_timers(RuntimeProfile* profile)
{
}
Status VSortedRunMerger::prepare(const vector<BlockSupplier>& input_runs) {
- for (const auto& supplier : input_runs) {
- if (_use_sort_desc) {
- _cursors.emplace_back(supplier, _desc);
- } else {
- _cursors.emplace_back(supplier, _ordering_expr, _is_asc_order,
_nulls_first);
+ try {
+ for (const auto& supplier : input_runs) {
+ if (_use_sort_desc) {
+ _cursors.emplace_back(supplier, _desc);
+ } else {
+ _cursors.emplace_back(supplier, _ordering_expr, _is_asc_order,
_nulls_first);
+ }
}
+ } catch (const std::exception& e) {
+ return Status::Cancelled(e.what());
}
for (auto& _cursor : _cursors) {
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
