This is an automated email from the ASF dual-hosted git repository.
zhangchen pushed a commit to branch branch-2.0
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-2.0 by this push:
new 10ab006c7c [fix](inverted index change) better fix for update delete
bitmap incompletely when build inverted index on mow table(#23141)
10ab006c7c is described below
commit 10ab006c7ceba9ca3421d75d22b8d7b52693bb0d
Author: YueW <[email protected]>
AuthorDate: Fri Aug 18 18:09:25 2023 +0800
[fix](inverted index change) better fix for update delete bitmap
incompletely when build inverted index on mow table(#23141)
better fix for update delete bitmap incompletely when build inverted index
on mow table
master pr: #23047
---
be/src/olap/task/index_builder.cpp | 41 ++++++++++++++++++--------------------
1 file changed, 19 insertions(+), 22 deletions(-)
diff --git a/be/src/olap/task/index_builder.cpp
b/be/src/olap/task/index_builder.cpp
index d642253d99..0f9c51a4ba 100644
--- a/be/src/olap/task/index_builder.cpp
+++ b/be/src/olap/task/index_builder.cpp
@@ -449,30 +449,27 @@ Status IndexBuilder::modify_rowsets(const
Merger::Statistics* stats) {
if (_tablet->keys_type() == KeysType::UNIQUE_KEYS &&
_tablet->enable_unique_key_merge_on_write()) {
- std::lock_guard<std::mutex> rwlock(_tablet->get_rowset_update_lock());
- std::shared_lock<std::shared_mutex> wrlock(_tablet->get_header_lock());
- RETURN_IF_ERROR(_tablet->modify_rowsets(_output_rowsets,
_input_rowsets, true));
-
- std::vector<RowsetSharedPtr> calc_delete_bitmap_rowsets;
- int64_t to_add_min_version = INT64_MAX;
- for (auto& rs : _output_rowsets) {
- if (to_add_min_version > rs->start_version()) {
- to_add_min_version = rs->start_version();
- }
- }
- Version calc_delete_bitmap_ver =
- Version(to_add_min_version,
_tablet->max_version_unlocked().second);
- if (calc_delete_bitmap_ver.first <= calc_delete_bitmap_ver.second) {
- Status res =
_tablet->capture_consistent_rowsets(calc_delete_bitmap_ver,
-
&calc_delete_bitmap_rowsets);
- // Because the data in memory has been changed, can't return an
error.
- CHECK(res.ok()) << "fail to capture_consistent_rowsets, res: " <<
res;
-
- for (auto rs : calc_delete_bitmap_rowsets) {
- res = _tablet->update_delete_bitmap_without_lock(rs);
- CHECK(res.ok()) << "fail to update_delete_bitmap_without_lock,
res: " << res;
+ std::lock_guard<std::mutex> wlock(_tablet->get_rowset_update_lock());
+ std::shared_lock<std::shared_mutex> rlock(_tablet->get_header_lock());
+ DeleteBitmapPtr delete_bitmap =
std::make_shared<DeleteBitmap>(_tablet->tablet_id());
+ for (auto i = 0; i < _input_rowsets.size(); ++i) {
+ RowsetId input_rowset_id = _input_rowsets[i]->rowset_id();
+ RowsetId output_rowset_id = _output_rowsets[i]->rowset_id();
+ for (const auto& [k, v] :
_tablet->tablet_meta()->delete_bitmap().delete_bitmap) {
+ RowsetId rs_id = std::get<0>(k);
+ if (rs_id == input_rowset_id) {
+ DeleteBitmap::BitmapKey output_rs_key = {output_rowset_id,
std::get<1>(k),
+ std::get<2>(k)};
+ auto res = delete_bitmap->set(output_rs_key, v);
+ DCHECK(res > 0) << "delete_bitmap set failed, res=" << res;
+ }
}
}
+ _tablet->tablet_meta()->delete_bitmap().merge(*delete_bitmap);
+
+ // modify_rowsets will remove the delete_bimap for input rowsets,
+ // should call it after merge delete_bitmap
+ RETURN_IF_ERROR(_tablet->modify_rowsets(_output_rowsets,
_input_rowsets, true));
} else {
std::lock_guard<std::shared_mutex> wrlock(_tablet->get_header_lock());
RETURN_IF_ERROR(_tablet->modify_rowsets(_output_rowsets,
_input_rowsets, true));
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]