From 4cb4b1f79f98e815dbd123690da94c9b6fdc2270 Mon Sep 17 00:00:00 2001 From: Xin Liao Date: Fri, 21 Jul 2023 22:41:30 +0800 Subject: [PATCH] [fix](meger-on-write) fix query result wrong when schema change (#22044) --- be/src/olap/delta_writer.cpp | 36 ++++++++++++++++++++++------------- be/src/olap/schema_change.cpp | 2 +- 2 files changed, 24 insertions(+), 14 deletions(-) diff --git a/be/src/olap/delta_writer.cpp b/be/src/olap/delta_writer.cpp index fb26c010fbac37..4342d22363e232 100644 --- a/be/src/olap/delta_writer.cpp +++ b/be/src/olap/delta_writer.cpp @@ -113,7 +113,13 @@ Status DeltaWriter::init() { if (_tablet->enable_unique_key_merge_on_write()) { std::lock_guard lck(_tablet->get_header_lock()); _cur_max_version = _tablet->max_version_unlocked().second; - _rowset_ids = _tablet->all_rs_id(_cur_max_version); + // tablet is under alter process. The delete bitmap will be calculated after conversion. + if (_tablet->tablet_state() == TABLET_NOTREADY && + SchemaChangeHandler::tablet_in_converting(_tablet->tablet_id())) { + _rowset_ids.clear(); + } else { + _rowset_ids = _tablet->all_rs_id(_cur_max_version); + } } // check tablet version number @@ -399,22 +405,26 @@ Status DeltaWriter::close_wait(const PSlaveTabletNodes& slave_tablet_nodes, return res; } if (_tablet->enable_unique_key_merge_on_write()) { - auto beta_rowset = reinterpret_cast(_cur_rowset.get()); - std::vector segments; - RETURN_IF_ERROR(beta_rowset->load_segments(&segments)); // tablet is under alter process. The delete bitmap will be calculated after conversion. if (_tablet->tablet_state() == TABLET_NOTREADY && SchemaChangeHandler::tablet_in_converting(_tablet->tablet_id())) { - return Status::OK(); - } - if (segments.size() > 1) { - RETURN_IF_ERROR(_tablet->calc_delete_bitmap(beta_rowset->rowset_id(), segments, nullptr, - _delete_bitmap, _cur_max_version, true)); - } + LOG(INFO) << "tablet is under alter process, delete bitmap will be calculated later, " + "tablet_id: " + << _tablet->tablet_id() << " txn_id: " << _req.txn_id; + } else { + auto beta_rowset = reinterpret_cast(_cur_rowset.get()); + std::vector segments; + RETURN_IF_ERROR(beta_rowset->load_segments(&segments)); + if (segments.size() > 1) { + RETURN_IF_ERROR(_tablet->calc_delete_bitmap(beta_rowset->rowset_id(), segments, + nullptr, _delete_bitmap, + _cur_max_version, true)); + } - _storage_engine->txn_manager()->set_txn_related_delete_bitmap( - _req.partition_id, _req.txn_id, _tablet->tablet_id(), _tablet->schema_hash(), - _tablet->tablet_uid(), true, _delete_bitmap, _rowset_ids); + _storage_engine->txn_manager()->set_txn_related_delete_bitmap( + _req.partition_id, _req.txn_id, _tablet->tablet_id(), _tablet->schema_hash(), + _tablet->tablet_uid(), true, _delete_bitmap, _rowset_ids); + } } _delta_written_success = true; diff --git a/be/src/olap/schema_change.cpp b/be/src/olap/schema_change.cpp index dd81df84d3dd2d..2e0067010524ae 100644 --- a/be/src/olap/schema_change.cpp +++ b/be/src/olap/schema_change.cpp @@ -2067,7 +2067,7 @@ Status SchemaChangeHandler::_do_process_alter_tablet_v2(const TAlterTabletReqV2& std::lock_guard rwlock(new_tablet->get_rowset_update_lock()); std::lock_guard new_wlock(new_tablet->get_header_lock()); SCOPED_SIMPLE_TRACE_IF_TIMEOUT(TRACE_TABLET_LOCK_THRESHOLD); - int64_t new_max_version = new_tablet->max_version().second; + int64_t new_max_version = new_tablet->max_version_unlocked().second; rowsets.clear(); if (max_version < new_max_version) { LOG(INFO)