diff --git a/be/src/olap/delta_writer_v2.cpp b/be/src/olap/delta_writer_v2.cpp index 701b897f3c..1dbc96a294 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 5cde609f1c..0f4385cb64 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 24b7ffed6a..ffa8a1b291 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 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 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 248aaba5c9..e381d9ff9b 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 1f16321d55..3235220b21 100644 --- a/be/src/olap/schema_change.cpp +++ b/be/src/olap/schema_change.cpp @@ -621,7 +621,6 @@ Result> 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 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;