From a6d9f327e71081628fc2a0ba5cf59a579bc02c00 Mon Sep 17 00:00:00 2001 From: zhiqiang-hhhh Date: Fri, 28 Jun 2024 10:59:09 +0800 Subject: [PATCH 1/2] Revert "[fix](memory safe) Fix block-reader memory alloc failed make be core dump. (#36299)" This reverts commit 4bb46a8d580cbcd35200af5e4f23830ceb9c3ef2. --- be/src/vec/olap/block_reader.cpp | 11 ++--------- be/src/vec/olap/block_reader.h | 3 +-- be/src/vec/olap/vertical_block_reader.cpp | 10 +++------- be/src/vec/olap/vertical_block_reader.h | 4 +--- 4 files changed, 7 insertions(+), 21 deletions(-) diff --git a/be/src/vec/olap/block_reader.cpp b/be/src/vec/olap/block_reader.cpp index fef95303a3e982..ec6bb5cc92b5bc 100644 --- a/be/src/vec/olap/block_reader.cpp +++ b/be/src/vec/olap/block_reader.cpp @@ -209,8 +209,6 @@ Status BlockReader::_init_agg_state(const ReaderParams& read_params) { Status BlockReader::init(const ReaderParams& read_params) { RETURN_IF_ERROR(TabletReader::init(read_params)); - _arena = std::make_unique(); - int32_t return_column_size = read_params.origin_return_columns->size(); _return_columns_loc.resize(read_params.return_columns.size()); for (int i = 0; i < return_column_size; ++i) { @@ -513,10 +511,6 @@ size_t BlockReader::_copy_agg_data() { } void BlockReader::_update_agg_value(MutableColumns& columns, int begin, int end, bool is_close) { - if (!_arena) [[unlikely]] { - return; - } - for (int i = 0; i < _agg_columns_idx.size(); i++) { auto idx = _agg_columns_idx[i]; @@ -526,7 +520,7 @@ void BlockReader::_update_agg_value(MutableColumns& columns, int begin, int end, if (begin <= end) { function->add_batch_range(begin, end, place, const_cast(&column_ptr), - _arena.get(), _stored_has_null_tag[idx]); + &_arena, _stored_has_null_tag[idx]); } if (is_close) { @@ -535,9 +529,8 @@ void BlockReader::_update_agg_value(MutableColumns& columns, int begin, int end, function->reset(place); } } - if (is_close) { - _arena->clear(); + _arena.clear(); } } diff --git a/be/src/vec/olap/block_reader.h b/be/src/vec/olap/block_reader.h index b60a5bc237319b..6f9792929db72c 100644 --- a/be/src/vec/olap/block_reader.h +++ b/be/src/vec/olap/block_reader.h @@ -119,8 +119,7 @@ class BlockReader final : public TabletReader { bool _is_rowsets_overlapping = true; - // Use pointer to avoid allocing memory during construction - std::unique_ptr _arena; + Arena _arena; }; } // namespace vectorized diff --git a/be/src/vec/olap/vertical_block_reader.cpp b/be/src/vec/olap/vertical_block_reader.cpp index 872836c91cdf41..0e189db0b6b177 100644 --- a/be/src/vec/olap/vertical_block_reader.cpp +++ b/be/src/vec/olap/vertical_block_reader.cpp @@ -217,8 +217,7 @@ Status VerticalBlockReader::init(const ReaderParams& read_params, _reader_context.batch_size = read_params.batch_size; RETURN_IF_ERROR(TabletReader::init(read_params)); - _arena = std::make_unique(); - auto status = _init_collect_iter(read_params, sample_info); + auto status = _init_collect_iter(read_params); if (!status.ok()) [[unlikely]] { if (!config::is_cloud_mode()) { static_cast(_tablet.get())->report_error(status); @@ -308,9 +307,6 @@ void VerticalBlockReader::_update_agg_data(MutableColumns& columns) { void VerticalBlockReader::_update_agg_value(MutableColumns& columns, int begin, int end, bool is_close) { - if (!_arena) [[unlikely]] { - return; - } for (size_t idx = 0; idx < _return_columns.size(); ++idx) { AggregateFunctionPtr function = _agg_functions[idx]; AggregateDataPtr place = _agg_places[idx]; @@ -318,7 +314,7 @@ void VerticalBlockReader::_update_agg_value(MutableColumns& columns, int begin, if (begin <= end) { function->add_batch_range(begin, end, place, const_cast(&column_ptr), - _arena.get(), _stored_has_null_tag[idx]); + &_arena, _stored_has_null_tag[idx]); } if (is_close) { @@ -328,7 +324,7 @@ void VerticalBlockReader::_update_agg_value(MutableColumns& columns, int begin, } } if (is_close) { - _arena->clear(); + _arena.clear(); } } diff --git a/be/src/vec/olap/vertical_block_reader.h b/be/src/vec/olap/vertical_block_reader.h index e1e8cfa1239b72..2043db4b00a590 100644 --- a/be/src/vec/olap/vertical_block_reader.h +++ b/be/src/vec/olap/vertical_block_reader.h @@ -108,9 +108,7 @@ class VerticalBlockReader final : public TabletReader { // for agg mode std::vector _agg_functions; std::vector _agg_places; - - // Use pointer to avoid memory allocation during construction - std::unique_ptr _arena; + Arena _arena; std::vector _normal_columns_idx; std::vector _agg_columns_idx; From 073d1c4ccc400531105a2f97c118d043045fd41c Mon Sep 17 00:00:00 2001 From: zhiqiang-hhhh Date: Fri, 28 Jun 2024 15:18:34 +0800 Subject: [PATCH 2/2] FIX --- be/src/vec/olap/vertical_block_reader.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/be/src/vec/olap/vertical_block_reader.cpp b/be/src/vec/olap/vertical_block_reader.cpp index 0e189db0b6b177..25cc409fab0e29 100644 --- a/be/src/vec/olap/vertical_block_reader.cpp +++ b/be/src/vec/olap/vertical_block_reader.cpp @@ -217,7 +217,7 @@ Status VerticalBlockReader::init(const ReaderParams& read_params, _reader_context.batch_size = read_params.batch_size; RETURN_IF_ERROR(TabletReader::init(read_params)); - auto status = _init_collect_iter(read_params); + auto status = _init_collect_iter(read_params, sample_info); if (!status.ok()) [[unlikely]] { if (!config::is_cloud_mode()) { static_cast(_tablet.get())->report_error(status);