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

Reply via email to