This is an automated email from the ASF dual-hosted git repository. yiguolei pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push: new 0ab43c51e8 [Feature](unique-key-merge-on-write) some fix on delete bitmap usage (#11623) 0ab43c51e8 is described below commit 0ab43c51e8fd1bbc35a8b183521e0efbe223ad3e Author: zhannngchen <48427519+zhannngc...@users.noreply.github.com> AuthorDate: Fri Aug 12 11:54:31 2022 +0800 [Feature](unique-key-merge-on-write) some fix on delete bitmap usage (#11623) --- be/src/olap/delta_writer.cpp | 17 ++++++++++------- be/src/olap/merger.cpp | 6 +++++- be/src/olap/rowset/beta_rowset_reader.cpp | 2 ++ be/src/olap/rowset/segment_v2/segment_iterator.cpp | 3 +++ be/src/olap/tablet.cpp | 11 +++++++---- be/src/olap/tablet_meta.cpp | 2 +- be/src/vec/exec/volap_scanner.cpp | 4 +++- 7 files changed, 31 insertions(+), 14 deletions(-) diff --git a/be/src/olap/delta_writer.cpp b/be/src/olap/delta_writer.cpp index 1d1ec6c01d..89ce579b5a 100644 --- a/be/src/olap/delta_writer.cpp +++ b/be/src/olap/delta_writer.cpp @@ -101,6 +101,13 @@ Status DeltaWriter::init() { << ", schema_hash=" << _req.schema_hash; return Status::OLAPInternalError(OLAP_ERR_TABLE_NOT_FOUND); } + + // get rowset ids snapshot + if (_tablet->enable_unique_key_merge_on_write()) { + std::lock_guard<std::shared_mutex> lck(_tablet->get_header_lock()); + _rowset_ids = _tablet->all_rs_id(); + } + _mem_tracker = std::make_shared<MemTrackerLimiter>( -1, fmt::format("DeltaWriter:tabletId={}", _tablet->tablet_id()), _parent_tracker); SCOPED_ATTACH_TASK(_mem_tracker, ThreadContext::TaskType::LOAD); @@ -138,13 +145,6 @@ Status DeltaWriter::init() { RETURN_NOT_OK(_storage_engine->memtable_flush_executor()->create_flush_token( &_flush_token, _rowset_writer->type(), _req.is_high_priority)); - // create delete bitmap and get rowset ids snapshot - if (_tablet->enable_unique_key_merge_on_write()) { - _delete_bitmap = std::make_shared<DeleteBitmap>(-1); - std::lock_guard<std::shared_mutex> lck(_tablet->get_header_lock()); - _rowset_ids = _tablet->all_rs_id(); - } - _is_init = true; return Status::OK(); } @@ -289,6 +289,9 @@ Status DeltaWriter::wait_flush() { } void DeltaWriter::_reset_mem_table() { + if (_tablet->enable_unique_key_merge_on_write()) { + _delete_bitmap.reset(new DeleteBitmap(-1)); + } _mem_table.reset(new MemTable(_tablet, _schema.get(), _tablet_schema.get(), _req.slots, _req.tuple_desc, _rowset_writer.get(), _delete_bitmap, _rowset_ids, _is_vec)); diff --git a/be/src/olap/merger.cpp b/be/src/olap/merger.cpp index 91c87bb081..fa7b99a973 100644 --- a/be/src/olap/merger.cpp +++ b/be/src/olap/merger.cpp @@ -115,7 +115,11 @@ Status Merger::vmerge_rowsets(TabletSharedPtr tablet, ReaderType reader_type, std::inserter(reader_params.delete_predicates, reader_params.delete_predicates.begin())); } - reader_params.delete_bitmap = &tablet->tablet_meta()->delete_bitmap(); + + if (tablet->enable_unique_key_merge_on_write()) { + reader_params.delete_bitmap = &tablet->tablet_meta()->delete_bitmap(); + } + if (stats_output && stats_output->rowid_conversion) { reader_params.record_rowids = true; } diff --git a/be/src/olap/rowset/beta_rowset_reader.cpp b/be/src/olap/rowset/beta_rowset_reader.cpp index 3c848a43b6..e1276d3fa8 100644 --- a/be/src/olap/rowset/beta_rowset_reader.cpp +++ b/be/src/olap/rowset/beta_rowset_reader.cpp @@ -93,6 +93,8 @@ Status BetaRowsetReader::init(RowsetReaderContext* read_context) { auto d = read_context->delete_bitmap->get_agg( {rowset_id, seg_id, read_context->version.second}); if (d->isEmpty()) continue; // Empty delete bitmap for the segment + VLOG_TRACE << "Get the delete bitmap for rowset: " << rowset_id.to_string() + << ", segment id:" << seg_id << ", size:" << d->cardinality(); read_options.delete_bitmap.emplace(seg_id, std::move(d)); } } diff --git a/be/src/olap/rowset/segment_v2/segment_iterator.cpp b/be/src/olap/rowset/segment_v2/segment_iterator.cpp index 3b91bbc024..cc728bdbe7 100644 --- a/be/src/olap/rowset/segment_v2/segment_iterator.cpp +++ b/be/src/olap/rowset/segment_v2/segment_iterator.cpp @@ -197,6 +197,9 @@ Status SegmentIterator::_init(bool is_vec) { size_t pre_size = _row_bitmap.cardinality(); _row_bitmap -= *(_opts.delete_bitmap[segment_id()]); _opts.stats->rows_del_by_bitmap += (pre_size - _row_bitmap.cardinality()); + VLOG_DEBUG << "read on segment: " << segment_id() << ", delete bitmap cardinality: " + << _opts.delete_bitmap[segment_id()]->cardinality() << ", " + << _opts.stats->rows_del_by_bitmap << " rows deleted by bitmap"; } if (_opts.read_orderby_key_reverse) { _range_iter.reset(new BackwardBitmapRangeIterator(_row_bitmap)); diff --git a/be/src/olap/tablet.cpp b/be/src/olap/tablet.cpp index 86ff3dd2d9..bf209a52f0 100644 --- a/be/src/olap/tablet.cpp +++ b/be/src/olap/tablet.cpp @@ -1994,8 +1994,9 @@ Status Tablet::calc_delete_bitmap(RowsetId rowset_id, } } LOG(INFO) << "construct delete bitmap tablet: " << tablet_id() << " rowset: " << rowset_id - << " dummy_version: " << dummy_version << " cost: " << watch.get_elapse_time_us() - << "(us)"; + << " dummy_version: " << dummy_version + << "bitmap num: " << delete_bitmap->delete_bitmap.size() + << " cost: " << watch.get_elapse_time_us() << "(us)"; return Status::OK(); } @@ -2043,8 +2044,10 @@ Status Tablet::update_delete_bitmap(const RowsetSharedPtr& rowset, DeleteBitmapP std::lock_guard<std::shared_mutex> meta_wrlock(_meta_lock); cur_rowset_ids = all_rs_id(); _rowset_ids_difference(cur_rowset_ids, pre_rowset_ids, &rowset_ids_to_add, &rowset_ids_to_del); - LOG(INFO) << "rowset_ids_to_add: " << rowset_ids_to_add.size() - << ", rowset_ids_to_del: " << rowset_ids_to_del.size(); + if (!rowset_ids_to_add.empty() || !rowset_ids_to_del.empty()) { + LOG(INFO) << "rowset_ids_to_add: " << rowset_ids_to_add.size() + << ", rowset_ids_to_del: " << rowset_ids_to_del.size(); + } for (const auto& to_del : rowset_ids_to_del) { delete_bitmap->remove({to_del, 0, 0}, {to_del, UINT32_MAX, INT64_MAX}); } diff --git a/be/src/olap/tablet_meta.cpp b/be/src/olap/tablet_meta.cpp index c1bc473bbd..b2dd33b281 100644 --- a/be/src/olap/tablet_meta.cpp +++ b/be/src/olap/tablet_meta.cpp @@ -783,7 +783,7 @@ void TabletMeta::update_delete_bitmap(const std::vector<RowsetSharedPtr>& input_ for (auto index = iter->second.begin(); index != iter->second.end(); ++index) { src.row_id = *index; if (rowid_conversion.get(src, &dst) != 0) { - LOG(WARNING) << "Can't find rowid, may be deleted by the delete_handler."; + VLOG_CRITICAL << "Can't find rowid, may be deleted by the delete_handler."; continue; } output_rowset_delete_bitmap.add({dst.rowset_id, dst.segment_id, cur_version}, diff --git a/be/src/vec/exec/volap_scanner.cpp b/be/src/vec/exec/volap_scanner.cpp index 2a454c3f88..beb04ab0b8 100644 --- a/be/src/vec/exec/volap_scanner.cpp +++ b/be/src/vec/exec/volap_scanner.cpp @@ -242,7 +242,9 @@ Status VOlapScanner::_init_tablet_reader_params( _tablet_reader_params.use_page_cache = true; } - _tablet_reader_params.delete_bitmap = &_tablet->tablet_meta()->delete_bitmap(); + if (_tablet->enable_unique_key_merge_on_write()) { + _tablet_reader_params.delete_bitmap = &_tablet->tablet_meta()->delete_bitmap(); + } if (_parent->_olap_scan_node.__isset.sort_info && _parent->_olap_scan_node.sort_info.is_asc_order.size() > 0) { --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org