dataroaring commented on code in PR #40204: URL: https://github.com/apache/doris/pull/40204#discussion_r1766440222
########## be/src/cloud/cloud_cumulative_compaction.cpp: ########## @@ -340,9 +342,87 @@ Status CloudCumulativeCompaction::modify_rowsets() { stats.num_rows(), stats.data_size()); } } + if (_tablet->keys_type() == KeysType::UNIQUE_KEYS && + _tablet->enable_unique_key_merge_on_write() && _input_rowsets.size() != 1) { + process_old_version_delete_bitmap(); + } return Status::OK(); } +void CloudCumulativeCompaction::process_old_version_delete_bitmap() { + // agg previously rowset old version delete bitmap + std::vector<RowsetSharedPtr> pre_rowsets {}; + std::vector<std::string> pre_rowset_ids {}; + for (const auto& it : cloud_tablet()->rowset_map()) { + if (it.first.second < _input_rowsets.front()->start_version()) { + pre_rowsets.emplace_back(it.second); + pre_rowset_ids.emplace_back(it.second->rowset_id().to_string()); + } + } + std::sort(pre_rowsets.begin(), pre_rowsets.end(), Rowset::comparator); + pre_rowsets.erase(pre_rowsets.begin()); + if (!pre_rowsets.empty()) { + auto pre_max_version = _output_rowset->version().second; + DeleteBitmapPtr new_delete_bitmap = + std::make_shared<DeleteBitmap>(_tablet->tablet_meta()->tablet_id()); + std::vector<std::tuple<int64_t, DeleteBitmap::BitmapKey, DeleteBitmap::BitmapKey>> + to_remove_vec; + for (auto& rowset : pre_rowsets) { + for (uint32_t seg_id = 0; seg_id < rowset->num_segments(); ++seg_id) { + rowset->rowset_id().to_string(); + DeleteBitmap::BitmapKey start {rowset->rowset_id(), seg_id, 0}; + DeleteBitmap::BitmapKey end {rowset->rowset_id(), seg_id, pre_max_version}; + DeleteBitmap::BitmapKey before_end {rowset->rowset_id(), seg_id, + pre_max_version - 1}; + auto d = _tablet->tablet_meta()->delete_bitmap().get_agg( + {rowset->rowset_id(), seg_id, pre_max_version}); + to_remove_vec.emplace_back( + std::make_tuple(_tablet->tablet_id(), start, before_end)); + if (d->isEmpty()) { + continue; + } + new_delete_bitmap->set(end, *d); + } + } + if (!new_delete_bitmap->empty()) { + // store agg delete bitmap + Status update_st; + DBUG_EXECUTE_IF("CloudCumulativeCompaction.modify_rowsets.update_delete_bitmap_failed", + { + update_st = Status::InternalError( + "test fail to update delete bitmap for tablet_id {}", + cloud_tablet()->tablet_id()); + }); + if (update_st.ok()) { + update_st = _engine.meta_mgr().update_delete_bitmap_without_lock( + *cloud_tablet(), new_delete_bitmap.get()); + } + if (!update_st.ok()) { + std::stringstream ss; + ss << "failed to update delete bitmap for tablet=" << cloud_tablet()->tablet_id() + << " st=" << update_st.to_string(); + std::string msg = ss.str(); + LOG(WARNING) << msg; + } + if (update_st.ok()) { Review Comment: ```suggestion } else { ``` -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org