From d439caed9c3eecdd6a5959a03e413b942b33e1ee Mon Sep 17 00:00:00 2001 From: Yukang-Lian Date: Thu, 10 Aug 2023 14:19:05 +0800 Subject: [PATCH] 1 --- be/src/service/backend_service.cpp | 33 ++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/be/src/service/backend_service.cpp b/be/src/service/backend_service.cpp index 5b4ca8f07514a61..8eeca9e4ffbc106 100644 --- a/be/src/service/backend_service.cpp +++ b/be/src/service/backend_service.cpp @@ -50,6 +50,7 @@ #include "olap/rowset/rowset_meta.h" #include "olap/storage_engine.h" #include "olap/tablet_manager.h" +#include "olap/tablet_meta.h" #include "olap/txn_manager.h" #include "runtime/exec_env.h" #include "runtime/external_scan_context_mgr.h" @@ -629,7 +630,7 @@ void BackendService::ingest_binlog(TIngestBinlogResult& result, } } - // Step 6: create rowset && commit + // Step 6: create rowset && calculate delete bitmap && commit // Step 6.1: create rowset RowsetSharedPtr rowset; status = RowsetFactory::create_rowset(local_tablet->tablet_schema(), @@ -645,7 +646,29 @@ void BackendService::ingest_binlog(TIngestBinlogResult& result, return; } - // Step 6.2: commit txn + // Step 6.2 calculate delete bitmap before commit + auto calc_delete_bitmap_token = + StorageEngine::instance()->calc_delete_bitmap_executor()->create_token(); + DeleteBitmapPtr delete_bitmap = std::make_shared(local_tablet_id); + auto pre_rowset_ids = local_tablet->all_rs_id(local_tablet->max_version_unlocked().second); + if (local_tablet->enable_unique_key_merge_on_write()) { + auto beta_rowset = reinterpret_cast(rowset.get()); + std::vector segments; + RETURN_IF_ERROR(beta_rowset->load_segments(&segments)); + if (segments.size() > 1) { + // calculate delete bitmap between segments + RETURN_IF_ERROR(local_tablet->calc_delete_bitmap_between_segments(rowset, segments, + delete_bitmap)); + } + + local_tablet->commit_phase_update_delete_bitmap(rowset, pre_rowset_ids, delete_bitmap, + segments, txn_id, + calc_delete_bitmap_token.get(), nullptr); + calc_delete_bitmap_token->wait(); + calc_delete_bitmap_token->get_delete_bitmap(delete_bitmap); + } + + // Step 6.3: commit txn Status commit_txn_status = StorageEngine::instance()->txn_manager()->commit_txn( local_tablet->data_dir()->get_meta(), rowset_meta->partition_id(), rowset_meta->txn_id(), rowset_meta->tablet_id(), rowset_meta->tablet_schema_hash(), @@ -661,6 +684,12 @@ void BackendService::ingest_binlog(TIngestBinlogResult& result, return; } + if (local_tablet->enable_unique_key_merge_on_write()) { + StorageEngine::instance()->txn_manager()->set_txn_related_delete_bitmap( + partition_id, txn_id, local_tablet_id, local_tablet->schema_hash(), + local_tablet->tablet_uid(), true, delete_bitmap, pre_rowset_ids); + } + tstatus.__set_status_code(TStatusCode::OK); } } // namespace doris