diff --git a/be/src/cloud/cloud_rowset_builder.cpp b/be/src/cloud/cloud_rowset_builder.cpp index b495ae953caf7e..3da6a55aa44241 100644 --- a/be/src/cloud/cloud_rowset_builder.cpp +++ b/be/src/cloud/cloud_rowset_builder.cpp @@ -126,7 +126,7 @@ Status CloudRowsetBuilder::set_txn_related_delete_bitmap() { if (_tablet->enable_unique_key_merge_on_write()) { if (config::enable_merge_on_write_correctness_check && _rowset->num_rows() != 0) { auto st = _tablet->check_delete_bitmap_correctness( - _delete_bitmap, _rowset->end_version() - 1, _req.txn_id, _rowset_ids); + _delete_bitmap, _rowset->end_version() - 1, _req.txn_id, *_rowset_ids); if (!st.ok()) { LOG(WARNING) << fmt::format( "[tablet_id:{}][txn_id:{}][load_id:{}][partition_id:{}] " @@ -137,7 +137,7 @@ Status CloudRowsetBuilder::set_txn_related_delete_bitmap() { } } _engine.txn_delete_bitmap_cache().set_tablet_txn_info( - _req.txn_id, _tablet->tablet_id(), _delete_bitmap, _rowset_ids, _rowset, + _req.txn_id, _tablet->tablet_id(), _delete_bitmap, *_rowset_ids, _rowset, _req.txn_expiration, _partial_update_info); } return Status::OK(); diff --git a/be/src/olap/olap_common.h b/be/src/olap/olap_common.h index 2034f1f25bb9bc..e8cc1e021982ca 100644 --- a/be/src/olap/olap_common.h +++ b/be/src/olap/olap_common.h @@ -542,16 +542,16 @@ inline RowsetId extract_rowset_id(std::string_view filename) { class DeleteBitmap; // merge on write context struct MowContext { - MowContext(int64_t version, int64_t txnid, const RowsetIdUnorderedSet& ids, + MowContext(int64_t version, int64_t txnid, std::shared_ptr ids, std::vector rowset_ptrs, std::shared_ptr db) : max_version(version), txn_id(txnid), - rowset_ids(ids), + rowset_ids(std::move(ids)), rowset_ptrs(std::move(rowset_ptrs)), delete_bitmap(std::move(db)) {} int64_t max_version; int64_t txn_id; - const RowsetIdUnorderedSet& rowset_ids; + std::shared_ptr rowset_ids; std::vector rowset_ptrs; std::shared_ptr delete_bitmap; }; diff --git a/be/src/olap/rowset/beta_rowset_writer.cpp b/be/src/olap/rowset/beta_rowset_writer.cpp index af053f62faec3c..3d15a2293fa450 100644 --- a/be/src/olap/rowset/beta_rowset_writer.cpp +++ b/be/src/olap/rowset/beta_rowset_writer.cpp @@ -329,7 +329,8 @@ Status BaseBetaRowsetWriter::_generate_delete_bitmap(int32_t segment_id) { std::vector specified_rowsets; { std::shared_lock meta_rlock(_context.tablet->get_header_lock()); - specified_rowsets = _context.tablet->get_rowset_by_ids(&_context.mow_context->rowset_ids); + specified_rowsets = + _context.tablet->get_rowset_by_ids(_context.mow_context->rowset_ids.get()); } OlapStopWatch watch; RETURN_IF_ERROR(BaseTablet::calc_delete_bitmap( @@ -339,7 +340,7 @@ Status BaseBetaRowsetWriter::_generate_delete_bitmap(int32_t segment_id) { segments.begin(), segments.end(), 0, [](size_t sum, const segment_v2::SegmentSharedPtr& s) { return sum += s->num_rows(); }); LOG(INFO) << "[Memtable Flush] construct delete bitmap tablet: " << _context.tablet->tablet_id() - << ", rowset_ids: " << _context.mow_context->rowset_ids.size() + << ", rowset_ids: " << _context.mow_context->rowset_ids->size() << ", cur max_version: " << _context.mow_context->max_version << ", transaction_id: " << _context.mow_context->txn_id << ", delete_bitmap_count: " << _context.mow_context->delete_bitmap->get_delete_bitmap_count() diff --git a/be/src/olap/rowset/segment_v2/segment_writer.cpp b/be/src/olap/rowset/segment_v2/segment_writer.cpp index a923408669ff97..3046871864acab 100644 --- a/be/src/olap/rowset/segment_v2/segment_writer.cpp +++ b/be/src/olap/rowset/segment_v2/segment_writer.cpp @@ -702,7 +702,7 @@ Status SegmentWriter::append_block_with_partial_content(const vectorized::Block* if (config::enable_merge_on_write_correctness_check) { _tablet->add_sentinel_mark_to_delete_bitmap(_mow_context->delete_bitmap.get(), - _mow_context->rowset_ids); + *_mow_context->rowset_ids); } // read to fill full block diff --git a/be/src/olap/rowset/segment_v2/vertical_segment_writer.cpp b/be/src/olap/rowset/segment_v2/vertical_segment_writer.cpp index 276fbc953943a1..adb4986c2be12d 100644 --- a/be/src/olap/rowset/segment_v2/vertical_segment_writer.cpp +++ b/be/src/olap/rowset/segment_v2/vertical_segment_writer.cpp @@ -590,7 +590,7 @@ Status VerticalSegmentWriter::_append_block_with_partial_content(RowsInBlock& da if (config::enable_merge_on_write_correctness_check) { _tablet->add_sentinel_mark_to_delete_bitmap(_mow_context->delete_bitmap.get(), - _mow_context->rowset_ids); + *_mow_context->rowset_ids); } // read to fill full_block @@ -728,7 +728,7 @@ Status VerticalSegmentWriter::_append_block_with_flexible_partial_content( if (config::enable_merge_on_write_correctness_check) { _tablet->add_sentinel_mark_to_delete_bitmap(_mow_context->delete_bitmap.get(), - _mow_context->rowset_ids); + *_mow_context->rowset_ids); } // 6. read according plan to fill full_block diff --git a/be/src/olap/rowset_builder.cpp b/be/src/olap/rowset_builder.cpp index 218c8a58527bd6..5f69051e3f64e3 100644 --- a/be/src/olap/rowset_builder.cpp +++ b/be/src/olap/rowset_builder.cpp @@ -135,11 +135,11 @@ Status BaseRowsetBuilder::init_mow_context(std::shared_ptr& mow_cont "Unable to do 'partial_update' when " "the tablet is undergoing a 'schema changing process'"); } - _rowset_ids.clear(); + _rowset_ids->clear(); } else { RETURN_IF_ERROR( - tablet()->get_all_rs_id_unlocked(_max_version_in_flush_phase, &_rowset_ids)); - rowset_ptrs = tablet()->get_rowset_by_ids(&_rowset_ids); + tablet()->get_all_rs_id_unlocked(_max_version_in_flush_phase, _rowset_ids.get())); + rowset_ptrs = tablet()->get_rowset_by_ids(_rowset_ids.get()); } _delete_bitmap = std::make_shared(tablet()->tablet_id()); mow_context = std::make_shared(_max_version_in_flush_phase, _req.txn_id, @@ -300,7 +300,7 @@ Status BaseRowsetBuilder::submit_calc_delete_bitmap_task() { "rowset_ids({}), cur max_version({}), bitmap num({}), bitmap_cardinality({}), num " "rows updated({}), num rows new added({}), num rows deleted({}), total rows({})", _partial_update_info->partial_update_mode_str(), tablet()->tablet_id(), _req.txn_id, - _rowset_ids.size(), rowset_writer()->context().mow_context->max_version, + _rowset_ids->size(), rowset_writer()->context().mow_context->max_version, _delete_bitmap->get_delete_bitmap_count(), _delete_bitmap->cardinality(), rowset_writer()->num_rows_updated(), rowset_writer()->num_rows_new_added(), rowset_writer()->num_rows_deleted(), rowset_writer()->num_rows()); @@ -309,7 +309,7 @@ Status BaseRowsetBuilder::submit_calc_delete_bitmap_task() { LOG(INFO) << "submit calc delete bitmap task to executor, tablet_id: " << tablet()->tablet_id() << ", txn_id: " << _req.txn_id; - return BaseTablet::commit_phase_update_delete_bitmap(_tablet, _rowset, _rowset_ids, + return BaseTablet::commit_phase_update_delete_bitmap(_tablet, _rowset, *_rowset_ids, _delete_bitmap, segments, _req.txn_id, _calc_delete_bitmap_token.get(), nullptr); } @@ -329,7 +329,7 @@ Status RowsetBuilder::commit_txn() { config::enable_merge_on_write_correctness_check && _rowset->num_rows() != 0 && tablet()->tablet_state() != TABLET_NOTREADY) { auto st = tablet()->check_delete_bitmap_correctness( - _delete_bitmap, _rowset->end_version() - 1, _req.txn_id, _rowset_ids); + _delete_bitmap, _rowset->end_version() - 1, _req.txn_id, *_rowset_ids); if (!st.ok()) { LOG(WARNING) << fmt::format( "[tablet_id:{}][txn_id:{}][load_id:{}][partition_id:{}] " @@ -374,7 +374,7 @@ Status RowsetBuilder::commit_txn() { if (_tablet->enable_unique_key_merge_on_write()) { _engine.txn_manager()->set_txn_related_delete_bitmap( _req.partition_id, _req.txn_id, tablet()->tablet_id(), tablet()->tablet_uid(), true, - _delete_bitmap, _rowset_ids, _partial_update_info); + _delete_bitmap, *_rowset_ids, _partial_update_info); } _is_committed = true; diff --git a/be/src/olap/rowset_builder.h b/be/src/olap/rowset_builder.h index d87e2a9efa4a8f..8da8fe8ad60897 100644 --- a/be/src/olap/rowset_builder.h +++ b/be/src/olap/rowset_builder.h @@ -104,7 +104,7 @@ class BaseRowsetBuilder { DeleteBitmapPtr _delete_bitmap; std::unique_ptr _calc_delete_bitmap_token; // current rowset_ids, used to do diff in publish_version - RowsetIdUnorderedSet _rowset_ids; + std::shared_ptr _rowset_ids {std::make_shared()}; int64_t _max_version_in_flush_phase {-1}; std::shared_ptr _partial_update_info; diff --git a/be/test/olap/segcompaction_mow_test.cpp b/be/test/olap/segcompaction_mow_test.cpp index efe40dcb859bca..18a0f241a2a95b 100644 --- a/be/test/olap/segcompaction_mow_test.cpp +++ b/be/test/olap/segcompaction_mow_test.cpp @@ -314,7 +314,7 @@ TEST_P(SegCompactionMoWTest, SegCompactionThenRead) { RowsetWriterContext writer_context; int raw_rsid = rand(); create_rowset_writer_context(raw_rsid, tablet_schema, &writer_context); - RowsetIdUnorderedSet rsids; + std::shared_ptr rsids {std::make_shared()}; std::vector rowset_ptrs; writer_context.mow_context = std::make_shared(1, 1, rsids, rowset_ptrs, delete_bitmap); @@ -417,7 +417,7 @@ TEST_F(SegCompactionMoWTest, SegCompactionInterleaveWithBig_ooooOOoOooooooooO) { { // write `num_segments * rows_per_segment` rows to rowset RowsetWriterContext writer_context; create_rowset_writer_context(20048, tablet_schema, &writer_context); - RowsetIdUnorderedSet rsids; + std::shared_ptr rsids {std::make_shared()}; std::vector rowset_ptrs; writer_context.mow_context = std::make_shared(1, 1, rsids, rowset_ptrs, delete_bitmap); @@ -648,7 +648,7 @@ TEST_F(SegCompactionMoWTest, SegCompactionInterleaveWithBig_OoOoO) { { // write `num_segments * rows_per_segment` rows to rowset RowsetWriterContext writer_context; create_rowset_writer_context(20049, tablet_schema, &writer_context); - RowsetIdUnorderedSet rsids; + std::shared_ptr rsids {std::make_shared()}; std::vector rowset_ptrs; writer_context.mow_context = std::make_shared(1, 1, rsids, rowset_ptrs, delete_bitmap); @@ -838,7 +838,7 @@ TEST_F(SegCompactionMoWTest, SegCompactionNotTrigger) { { // write `num_segments * rows_per_segment` rows to rowset RowsetWriterContext writer_context; create_rowset_writer_context(20050, tablet_schema, &writer_context); - RowsetIdUnorderedSet rsids; + std::shared_ptr rsids {std::make_shared()}; std::vector rowset_ptrs; writer_context.mow_context = std::make_shared(1, 1, rsids, rowset_ptrs, delete_bitmap);