From ffbc7d65fa74d8e15ca0a983d6788d63b606d0ef Mon Sep 17 00:00:00 2001 From: bobhan1 Date: Tue, 18 Mar 2025 21:28:52 +0800 Subject: [PATCH] [Fix](SC) Prevent the values of `__DORIS_VERSION_COL__` be wrongly replaced by fake version when merging tmp rowset in sort SC (#49193) ### What problem does this PR solve? When converting historical rowsets in sort schema change, it may write many temp rowsets and merge them into one rowset later if memory is not enough. However, these rowsets have fake versions which are like `[2^29+x, 2^29+x]`, so the values of `__DORIS_VERSION_COL__` in these temp rowsets will be wrongly replaced by these fake version(see https://github.com/apache/doris/pull/16509) in `Merger::vmerge_rowsets` when merging them into a single rowset. This PR modify these fake versions to avoid it. --- be/src/olap/schema_change.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/be/src/olap/schema_change.cpp b/be/src/olap/schema_change.cpp index 762ee889c9fdd2..ae285a94aff1d7 100644 --- a/be/src/olap/schema_change.cpp +++ b/be/src/olap/schema_change.cpp @@ -568,7 +568,7 @@ Status VBaseSchemaChangeWithSorting::_inner_process(RowsetReaderSharedPtr rowset } auto rowset = DORIS_TRY(_internal_sorting( - blocks, Version(_temp_delta_versions.second, _temp_delta_versions.second), + blocks, Version(_temp_delta_versions.second, _temp_delta_versions.second + 1), newest_write_timestamp, new_tablet, BETA_ROWSET, segments_overlap, new_tablet_schema)); _src_rowsets.push_back(std::move(rowset)); @@ -578,7 +578,7 @@ Status VBaseSchemaChangeWithSorting::_inner_process(RowsetReaderSharedPtr rowset blocks.clear(); // increase temp version - _temp_delta_versions.second++; + _temp_delta_versions.second += 2; return Status::OK(); };