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 352be298ac0 [enhancement](memory) add exception logic in write page
and schema scanner (#40168)
352be298ac0 is described below
commit 352be298ac048e96cb336ce917f03f1202579d6e
Author: yiguolei <[email protected]>
AuthorDate: Sat Aug 31 15:10:41 2024 +0800
[enhancement](memory) add exception logic in write page and schema scanner
(#40168)
## Proposed changes
Issue Number: close #xxx
<!--Describe your changes.-->
---------
Co-authored-by: yiguolei <[email protected]>
---
be/src/exec/schema_scanner.cpp | 6 +++++-
be/src/olap/rowset/segment_v2/column_writer.cpp | 3 ++-
be/src/olap/rowset/segment_v2/column_writer.h | 8 +++++++-
3 files changed, 14 insertions(+), 3 deletions(-)
diff --git a/be/src/exec/schema_scanner.cpp b/be/src/exec/schema_scanner.cpp
index be0bd8eff72..b5cd484b650 100644
--- a/be/src/exec/schema_scanner.cpp
+++ b/be/src/exec/schema_scanner.cpp
@@ -134,7 +134,11 @@ Status SchemaScanner::get_next_block_async(RuntimeState*
state) {
_opened = true;
}
bool eos = false;
-
_scanner_status.update(get_next_block_internal(_data_block.get(), &eos));
+ auto call_next_block_internal = [&]() -> Status {
+ RETURN_IF_CATCH_EXCEPTION(
+ { return
get_next_block_internal(_data_block.get(), &eos); });
+ };
+ _scanner_status.update(call_next_block_internal());
_eos = eos;
_async_thread_running = false;
_dependency->set_ready();
diff --git a/be/src/olap/rowset/segment_v2/column_writer.cpp
b/be/src/olap/rowset/segment_v2/column_writer.cpp
index 75acd9f1f95..2637017b78d 100644
--- a/be/src/olap/rowset/segment_v2/column_writer.cpp
+++ b/be/src/olap/rowset/segment_v2/column_writer.cpp
@@ -534,7 +534,8 @@ Status ScalarColumnWriter::append_data(const uint8_t** ptr,
size_t num_rows) {
return Status::OK();
}
-Status ScalarColumnWriter::append_data_in_current_page(const uint8_t* data,
size_t* num_written) {
+Status ScalarColumnWriter::_internal_append_data_in_current_page(const
uint8_t* data,
+ size_t*
num_written) {
RETURN_IF_ERROR(_page_builder->add(data, num_written));
if (_opts.need_zone_map) {
_zone_map_index_builder->add_values(data, *num_written);
diff --git a/be/src/olap/rowset/segment_v2/column_writer.h
b/be/src/olap/rowset/segment_v2/column_writer.h
index acda2b75fb2..62f209db5ad 100644
--- a/be/src/olap/rowset/segment_v2/column_writer.h
+++ b/be/src/olap/rowset/segment_v2/column_writer.h
@@ -217,10 +217,16 @@ public:
// used for append not null data. When page is full, will append data not
reach num_rows.
Status append_data_in_current_page(const uint8_t** ptr, size_t*
num_written);
- Status append_data_in_current_page(const uint8_t* ptr, size_t*
num_written);
+ Status append_data_in_current_page(const uint8_t* ptr, size_t*
num_written) {
+ RETURN_IF_CATCH_EXCEPTION(
+ { return _internal_append_data_in_current_page(ptr,
num_written); });
+ }
friend class ArrayColumnWriter;
friend class OffsetColumnWriter;
+private:
+ Status _internal_append_data_in_current_page(const uint8_t* ptr, size_t*
num_written);
+
private:
std::unique_ptr<PageBuilder> _page_builder;
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]