This is an automated email from the ASF dual-hosted git repository. zhangchen pushed a commit to branch branch-1.2-lts in repository https://gitbox.apache.org/repos/asf/doris.git
commit bdb66e84ef0f49bf12c76374e626c681260a697a Author: yixiutt <[email protected]> AuthorDate: Mon Apr 17 19:59:44 2023 +0800 [improvement](merge-on-write) move segment check to delta writer (#18643) --- be/src/olap/delta_writer.cpp | 11 +++++++++++ be/src/olap/tablet.cpp | 2 +- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/be/src/olap/delta_writer.cpp b/be/src/olap/delta_writer.cpp index ce3ad6a6b9..75ec2eea43 100644 --- a/be/src/olap/delta_writer.cpp +++ b/be/src/olap/delta_writer.cpp @@ -23,6 +23,7 @@ #include "olap/data_dir.h" #include "olap/memtable.h" #include "olap/memtable_flush_executor.h" +#include "olap/rowset/beta_rowset.h" #include "olap/rowset/beta_rowset_writer.h" #include "olap/rowset/rowset_writer_context.h" #include "olap/schema.h" @@ -396,6 +397,16 @@ Status DeltaWriter::close_wait(const PSlaveTabletNodes& slave_tablet_nodes, return res; } if (_tablet->enable_unique_key_merge_on_write()) { + auto beta_rowset = reinterpret_cast<BetaRowset*>(_cur_rowset.get()); + std::vector<segment_v2::SegmentSharedPtr> 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(); + } + 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); diff --git a/be/src/olap/tablet.cpp b/be/src/olap/tablet.cpp index 7bba605b67..9b1c68f4e1 100644 --- a/be/src/olap/tablet.cpp +++ b/be/src/olap/tablet.cpp @@ -2242,7 +2242,7 @@ Status Tablet::update_delete_bitmap(const RowsetSharedPtr& rowset, const TabletT } RETURN_IF_ERROR(calc_delete_bitmap(rowset->rowset_id(), segments, &rowset_ids_to_add, - delete_bitmap, cur_version - 1, true)); + delete_bitmap, cur_version - 1, false)); // update version without write lock, compaction and publish_txn // will update delete bitmap, handle compaction with _rowset_update_lock --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
