This is an automated email from the ASF dual-hosted git repository. yiguolei pushed a commit to branch branch-2.1 in repository https://gitbox.apache.org/repos/asf/doris.git
commit c72e55d867e1628c7ad2cc80ff4c45abf738c429 Author: yiguolei <676222...@qq.com> AuthorDate: Thu Feb 29 19:45:55 2024 +0800 [enhancement](core) throw exception instead of core during insert_range_from method (#31592) --------- Co-authored-by: yiguolei <yiguo...@gmail.com> --- be/src/pipeline/exec/hashjoin_probe_operator.cpp | 2 +- be/src/pipeline/exec/nested_loop_join_probe_operator.cpp | 6 ++++-- be/src/vec/columns/column_array.cpp | 12 +++++++----- be/src/vec/columns/column_decimal.cpp | 8 ++++---- be/src/vec/columns/column_fixed_length_object.h | 3 ++- be/src/vec/columns/column_map.cpp | 8 +++++--- be/src/vec/columns/column_string.cpp | 4 +++- be/src/vec/columns/column_vector.cpp | 8 ++++---- be/src/vec/exec/join/vhash_join_node.cpp | 2 +- be/src/vec/exec/join/vnested_loop_join_node.cpp | 4 ++-- 10 files changed, 33 insertions(+), 24 deletions(-) diff --git a/be/src/pipeline/exec/hashjoin_probe_operator.cpp b/be/src/pipeline/exec/hashjoin_probe_operator.cpp index e41c4e7144d..014d7285845 100644 --- a/be/src/pipeline/exec/hashjoin_probe_operator.cpp +++ b/be/src/pipeline/exec/hashjoin_probe_operator.cpp @@ -430,7 +430,7 @@ Status HashJoinProbeLocalState::filter_data_and_build_output(RuntimeState* state temp_block->columns())); } - RETURN_IF_ERROR(_build_output_block(temp_block, output_block, false)); + RETURN_IF_ERROR_OR_CATCH_EXCEPTION(_build_output_block(temp_block, output_block, false)); _reset_tuple_is_null_column(); reached_limit(output_block, eos); return Status::OK(); diff --git a/be/src/pipeline/exec/nested_loop_join_probe_operator.cpp b/be/src/pipeline/exec/nested_loop_join_probe_operator.cpp index 9080883586e..9272418ca0a 100644 --- a/be/src/pipeline/exec/nested_loop_join_probe_operator.cpp +++ b/be/src/pipeline/exec/nested_loop_join_probe_operator.cpp @@ -508,7 +508,8 @@ Status NestedLoopJoinProbeOperatorX::pull(RuntimeState* state, vectorized::Block bool* eos) const { auto& local_state = get_local_state(state); if (_is_output_left_side_only) { - RETURN_IF_ERROR(local_state._build_output_block(local_state._child_block.get(), block)); + RETURN_IF_ERROR_OR_CATCH_EXCEPTION( + local_state._build_output_block(local_state._child_block.get(), block)); *eos = local_state._shared_state->left_side_eos; local_state._need_more_input_data = !local_state._shared_state->left_side_eos; } else { @@ -530,7 +531,8 @@ Status NestedLoopJoinProbeOperatorX::pull(RuntimeState* state, vectorized::Block RETURN_IF_ERROR(vectorized::VExprContext::filter_block( local_state._conjuncts, &tmp_block, tmp_block.columns())); } - RETURN_IF_ERROR(local_state._build_output_block(&tmp_block, block, false)); + RETURN_IF_ERROR_OR_CATCH_EXCEPTION( + local_state._build_output_block(&tmp_block, block, false)); local_state._reset_tuple_is_null_column(); } local_state._join_block.clear_column_data(); diff --git a/be/src/vec/columns/column_array.cpp b/be/src/vec/columns/column_array.cpp index 9abf13b9f3f..86d31c9223b 100644 --- a/be/src/vec/columns/column_array.cpp +++ b/be/src/vec/columns/column_array.cpp @@ -476,11 +476,13 @@ void ColumnArray::insert_range_from(const IColumn& src, size_t start, size_t len const ColumnArray& src_concrete = assert_cast<const ColumnArray&>(src); - if (start + length > src_concrete.get_offsets().size()) - LOG(FATAL) << "Parameter out of bound in ColumnArray::insert_range_from method. [start(" - << std::to_string(start) << ") + length(" << std::to_string(length) - << ") > offsets.size(" << std::to_string(src_concrete.get_offsets().size()) - << ")]"; + if (start + length > src_concrete.get_offsets().size()) { + throw doris::Exception(doris::ErrorCode::INTERNAL_ERROR, + "Parameter out of bound in ColumnArray::insert_range_from method. " + "[start({}) + length({}) > offsets.size({})]", + std::to_string(start), std::to_string(length), + std::to_string(src_concrete.get_offsets().size())); + } size_t nested_offset = src_concrete.offset_at(start); size_t nested_length = src_concrete.get_offsets()[start + length - 1] - nested_offset; diff --git a/be/src/vec/columns/column_decimal.cpp b/be/src/vec/columns/column_decimal.cpp index be81a7ad4cb..9a05a8d68df 100644 --- a/be/src/vec/columns/column_decimal.cpp +++ b/be/src/vec/columns/column_decimal.cpp @@ -296,10 +296,10 @@ void ColumnDecimal<T>::insert_range_from(const IColumn& src, size_t start, size_ const ColumnDecimal& src_vec = assert_cast<const ColumnDecimal&>(src); if (start + length > src_vec.data.size()) { - LOG(FATAL) << fmt::format( - "Parameters start = {}, length = {} are out of bound in " - "ColumnDecimal<T>::insert_range_from method (data.size() = {})", - start, length, src_vec.data.size()); + throw doris::Exception(doris::ErrorCode::INTERNAL_ERROR, + "Parameters start = {}, length = {} are out of bound in " + "ColumnDecimal<T>::insert_range_from method (data.size() = {})", + start, length, src_vec.data.size()); } size_t old_size = data.size(); diff --git a/be/src/vec/columns/column_fixed_length_object.h b/be/src/vec/columns/column_fixed_length_object.h index 2e67b00d312..d44ebce53a7 100644 --- a/be/src/vec/columns/column_fixed_length_object.h +++ b/be/src/vec/columns/column_fixed_length_object.h @@ -125,7 +125,8 @@ public: } if (start + length > src_col._item_count) { - LOG(FATAL) << fmt::format( + throw doris::Exception( + doris::ErrorCode::INTERNAL_ERROR, "Parameters start = {}, length = {} are out of bound in " "ColumnFixedLengthObject::insert_range_from method (data.size() = {})", start, length, src_col._item_count); diff --git a/be/src/vec/columns/column_map.cpp b/be/src/vec/columns/column_map.cpp index 4a1df8a6e26..c1c668ef07c 100644 --- a/be/src/vec/columns/column_map.cpp +++ b/be/src/vec/columns/column_map.cpp @@ -375,9 +375,11 @@ void ColumnMap::insert_range_from(const IColumn& src, size_t start, size_t lengt const ColumnMap& src_concrete = assert_cast<const ColumnMap&>(src); if (start + length > src_concrete.size()) { - LOG(FATAL) << "Parameter out of bound in ColumnMap::insert_range_from method. [start(" - << std::to_string(start) << ") + length(" << std::to_string(length) - << ") > offsets.size(" << std::to_string(src_concrete.size()) << ")]"; + throw doris::Exception(doris::ErrorCode::INTERNAL_ERROR, + "Parameter out of bound in ColumnMap::insert_range_from method. " + "[start({}) + length({}) > offsets.size({})]", + std::to_string(start), std::to_string(length), + std::to_string(src_concrete.size())); } size_t nested_offset = src_concrete.offset_at(start); diff --git a/be/src/vec/columns/column_string.cpp b/be/src/vec/columns/column_string.cpp index 5c9b1361ac7..76db0e58c44 100644 --- a/be/src/vec/columns/column_string.cpp +++ b/be/src/vec/columns/column_string.cpp @@ -99,7 +99,9 @@ void ColumnString::insert_range_from(const IColumn& src, size_t start, size_t le const ColumnString& src_concrete = assert_cast<const ColumnString&>(src); if (start + length > src_concrete.offsets.size()) { - LOG(FATAL) << "Parameter out of bound in IColumnString::insert_range_from method."; + throw doris::Exception( + doris::ErrorCode::INTERNAL_ERROR, + "Parameter out of bound in IColumnString::insert_range_from method."); } size_t nested_offset = src_concrete.offset_at(start); diff --git a/be/src/vec/columns/column_vector.cpp b/be/src/vec/columns/column_vector.cpp index acc6fc1d7f3..97fadcb4071 100644 --- a/be/src/vec/columns/column_vector.cpp +++ b/be/src/vec/columns/column_vector.cpp @@ -348,10 +348,10 @@ template <typename T> void ColumnVector<T>::insert_range_from(const IColumn& src, size_t start, size_t length) { const ColumnVector& src_vec = assert_cast<const ColumnVector&>(src); if (start + length > src_vec.data.size()) { - LOG(FATAL) << fmt::format( - "Parameters start = {}, length = {}, are out of bound in " - "ColumnVector<T>::insert_range_from method (data.size() = {}).", - start, length, src_vec.data.size()); + throw doris::Exception(doris::ErrorCode::INTERNAL_ERROR, + "Parameters start = {}, length = {}, are out of bound in " + "ColumnVector<T>::insert_range_from method (data.size() = {}).", + start, length, src_vec.data.size()); } size_t old_size = data.size(); diff --git a/be/src/vec/exec/join/vhash_join_node.cpp b/be/src/vec/exec/join/vhash_join_node.cpp index de3b63371ee..4d3a2aa9474 100644 --- a/be/src/vec/exec/join/vhash_join_node.cpp +++ b/be/src/vec/exec/join/vhash_join_node.cpp @@ -469,7 +469,7 @@ Status HashJoinNode::_filter_data_and_build_output(RuntimeState* state, RETURN_IF_ERROR(VExprContext::filter_block(_conjuncts, temp_block, temp_block->columns())); } - RETURN_IF_ERROR(_build_output_block(temp_block, output_block, false)); + RETURN_IF_ERROR_OR_CATCH_EXCEPTION(_build_output_block(temp_block, output_block, false)); _reset_tuple_is_null_column(); reached_limit(output_block, eos); return Status::OK(); diff --git a/be/src/vec/exec/join/vnested_loop_join_node.cpp b/be/src/vec/exec/join/vnested_loop_join_node.cpp index ad168ba9c86..3548680bf49 100644 --- a/be/src/vec/exec/join/vnested_loop_join_node.cpp +++ b/be/src/vec/exec/join/vnested_loop_join_node.cpp @@ -665,7 +665,7 @@ Status VNestedLoopJoinNode::pull(RuntimeState* state, vectorized::Block* block, SCOPED_TIMER(_exec_timer); SCOPED_TIMER(_probe_timer); if (_is_output_left_side_only) { - RETURN_IF_ERROR(_build_output_block(_left_block.get(), block)); + RETURN_IF_ERROR_OR_CATCH_EXCEPTION(_build_output_block(_left_block.get(), block)); *eos = _left_side_eos; _need_more_input_data = !_left_side_eos; } else { @@ -685,7 +685,7 @@ Status VNestedLoopJoinNode::pull(RuntimeState* state, vectorized::Block* block, RETURN_IF_ERROR( VExprContext::filter_block(_conjuncts, &tmp_block, tmp_block.columns())); } - RETURN_IF_ERROR(_build_output_block(&tmp_block, block, false)); + RETURN_IF_ERROR_OR_CATCH_EXCEPTION(_build_output_block(&tmp_block, block, false)); _reset_tuple_is_null_column(); } _join_block.clear_column_data(); --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org