From b4e202a9f996d44e8dbc2fa600a1f88ca2df1a70 Mon Sep 17 00:00:00 2001 From: yixiutt Date: Thu, 13 Apr 2023 18:00:59 +0800 Subject: [PATCH] [improvement](merge-on-write) move segment check to delta writer --- be/src/olap/delta_writer.cpp | 19 +++++++++++++++++++ be/src/olap/tablet.cpp | 2 +- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/be/src/olap/delta_writer.cpp b/be/src/olap/delta_writer.cpp index dcc1ae8d430a31..1b5b6087f4db01 100644 --- a/be/src/olap/delta_writer.cpp +++ b/be/src/olap/delta_writer.cpp @@ -22,9 +22,11 @@ #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" +#include "olap/schema_change.h" #include "olap/storage_engine.h" #include "runtime/load_channel_mgr.h" #include "service/backend_options.h" @@ -380,6 +382,23 @@ Status DeltaWriter::close_wait(const PSlaveTabletNodes& slave_tablet_nodes, _request_slave_tablet_pull_rowset(node_info); } } + // do calc delete bitmap in segments here + // generate delete bitmap, build a tmp rowset and load recent segment + if (!_tablet->enable_unique_key_merge_on_write()) { + return Status::OK(); + } + auto rowset = _rowset_writer->build_tmp(); + auto beta_rowset = reinterpret_cast(rowset.get()); + std::vector segments; + RETURN_IF_ERROR(beta_rowset->load_segments(&segments)); + std::shared_lock meta_rlock(_tablet->get_header_lock()); + // 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)); return Status::OK(); } diff --git a/be/src/olap/tablet.cpp b/be/src/olap/tablet.cpp index 017da4473ba70f..2c18c7bcab7ed9 100644 --- a/be/src/olap/tablet.cpp +++ b/be/src/olap/tablet.cpp @@ -2651,7 +2651,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)); // Check the delete_bitmap correctness. if (load_info->num_keys != 0) {