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


The following commit(s) were added to refs/heads/branch-2.1 by this push:
     new fdc19b48927 [Fix](Variant) Initialize original_tablet_schema in 
_expand_variant_to_subcolumns to address potential nullptr issue (#32184) 
(#32678)
fdc19b48927 is described below

commit fdc19b48927f81d958fd9de5da0cde1654fa572b
Author: lihangyu <[email protected]>
AuthorDate: Fri Mar 22 18:02:58 2024 +0800

    [Fix](Variant) Initialize original_tablet_schema in 
_expand_variant_to_subcolumns to address potential nullptr issue (#32184) 
(#32678)
---
 be/src/olap/delta_writer_v2.cpp        | 1 -
 be/src/olap/push_handler.cpp           | 1 -
 be/src/olap/rowset/segment_creator.cpp | 8 ++++++++
 be/src/olap/rowset_builder.cpp         | 1 -
 be/src/olap/schema_change.cpp          | 2 --
 5 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/be/src/olap/delta_writer_v2.cpp b/be/src/olap/delta_writer_v2.cpp
index 701b897f3cb..1dbc96a294d 100644
--- a/be/src/olap/delta_writer_v2.cpp
+++ b/be/src/olap/delta_writer_v2.cpp
@@ -112,7 +112,6 @@ Status DeltaWriterV2::init() {
     context.rowset_state = PREPARED;
     context.segments_overlap = OVERLAPPING;
     context.tablet_schema = _tablet_schema;
-    context.original_tablet_schema = _tablet_schema;
     context.newest_write_timestamp = UnixSeconds();
     context.tablet = nullptr;
     context.write_type = DataWriteType::TYPE_DIRECT;
diff --git a/be/src/olap/push_handler.cpp b/be/src/olap/push_handler.cpp
index 5cde609f1c4..0f4385cb64b 100644
--- a/be/src/olap/push_handler.cpp
+++ b/be/src/olap/push_handler.cpp
@@ -229,7 +229,6 @@ Status PushHandler::_convert_v2(TabletSharedPtr cur_tablet, 
RowsetSharedPtr* cur
         context.rowset_state = PREPARED;
         context.segments_overlap = OVERLAP_UNKNOWN;
         context.tablet_schema = tablet_schema;
-        context.original_tablet_schema = tablet_schema;
         context.newest_write_timestamp = UnixSeconds();
         auto rowset_writer = 
DORIS_TRY(cur_tablet->create_rowset_writer(context, false));
         _pending_rs_guard =
diff --git a/be/src/olap/rowset/segment_creator.cpp 
b/be/src/olap/rowset/segment_creator.cpp
index 24b7ffed6a6..ffa8a1b2916 100644
--- a/be/src/olap/rowset/segment_creator.cpp
+++ b/be/src/olap/rowset/segment_creator.cpp
@@ -91,6 +91,14 @@ Status 
SegmentFlusher::_expand_variant_to_subcolumns(vectorized::Block& block,
         return Status::OK();
     }
 
+    {
+        std::lock_guard<std::mutex> lock(*(_context->schema_lock));
+        // save original tablet schema, _context->tablet_schema maybe modified
+        if (_context->original_tablet_schema == nullptr) {
+            _context->original_tablet_schema = _context->tablet_schema;
+        }
+    }
+
     std::vector<int> variant_column_pos;
     if (_context->partial_update_info && 
_context->partial_update_info->is_partial_update) {
         // check columns that used to do partial updates should not include 
variant
diff --git a/be/src/olap/rowset_builder.cpp b/be/src/olap/rowset_builder.cpp
index 248aaba5c93..e381d9ff9b7 100644
--- a/be/src/olap/rowset_builder.cpp
+++ b/be/src/olap/rowset_builder.cpp
@@ -199,7 +199,6 @@ Status RowsetBuilder::init() {
     context.rowset_state = PREPARED;
     context.segments_overlap = OVERLAPPING;
     context.tablet_schema = _tablet_schema;
-    context.original_tablet_schema = _tablet_schema;
     context.newest_write_timestamp = UnixSeconds();
     context.tablet_id = _tablet->tablet_id();
     context.tablet = _tablet;
diff --git a/be/src/olap/schema_change.cpp b/be/src/olap/schema_change.cpp
index 1f16321d55c..3235220b21b 100644
--- a/be/src/olap/schema_change.cpp
+++ b/be/src/olap/schema_change.cpp
@@ -621,7 +621,6 @@ Result<std::pair<RowsetSharedPtr, PendingRowsetGuard>> 
VSchemaChangeWithSorting:
     context.rowset_state = VISIBLE;
     context.segments_overlap = segments_overlap;
     context.tablet_schema = new_tablet_schema;
-    context.original_tablet_schema = new_tablet_schema;
     context.newest_write_timestamp = newest_write_timestamp;
     context.write_type = DataWriteType::TYPE_SCHEMA_CHANGE;
     std::unique_ptr<RowsetWriter> rowset_writer;
@@ -1082,7 +1081,6 @@ Status 
SchemaChangeHandler::_convert_historical_rowsets(const SchemaChangeParams
         context.rowset_state = VISIBLE;
         context.segments_overlap = 
rs_reader->rowset()->rowset_meta()->segments_overlap();
         context.tablet_schema = sc_params.new_tablet_schema;
-        context.original_tablet_schema = sc_params.new_tablet_schema;
         context.newest_write_timestamp = rs_reader->newest_write_timestamp();
         context.fs = rs_reader->rowset()->rowset_meta()->fs();
         context.write_type = DataWriteType::TYPE_SCHEMA_CHANGE;


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to