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]