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 ba11d8dc67 [feature-wip](unique-key-merge-on-write) fix bugs on tablet 
clone #12067
ba11d8dc67 is described below

commit ba11d8dc67d853e67e82a1717c6bd6578717522f
Author: zhannngchen <[email protected]>
AuthorDate: Fri Aug 26 10:37:00 2022 +0800

    [feature-wip](unique-key-merge-on-write) fix bugs on tablet clone #12067
---
 be/src/olap/tablet.cpp      | 10 ++++++++++
 be/src/olap/tablet_meta.cpp |  1 +
 2 files changed, 11 insertions(+)

diff --git a/be/src/olap/tablet.cpp b/be/src/olap/tablet.cpp
index 83e78f9c61..e038fe78ab 100644
--- a/be/src/olap/tablet.cpp
+++ b/be/src/olap/tablet.cpp
@@ -199,10 +199,13 @@ Status Tablet::revise_tablet_meta(const 
std::vector<RowsetMetaSharedPtr>& rowset
         _tablet_meta = new_tablet_meta;
     } while (0);
 
+    RowsetVector rs_to_delete, rs_to_add;
+
     for (auto& version : versions_to_delete) {
         auto it = _rs_version_map.find(version);
         DCHECK(it != _rs_version_map.end());
         StorageEngine::instance()->add_unused_rowset(it->second);
+        rs_to_delete.push_back(it->second);
         _rs_version_map.erase(it);
     }
 
@@ -214,9 +217,16 @@ Status Tablet::revise_tablet_meta(const 
std::vector<RowsetMetaSharedPtr>& rowset
             LOG(WARNING) << "fail to init rowset. version=" << version;
             return res;
         }
+        rs_to_add.push_back(rowset);
         _rs_version_map[version] = std::move(rowset);
     }
 
+    if (keys_type() == UNIQUE_KEYS && enable_unique_key_merge_on_write()) {
+        auto new_rowset_tree = std::make_unique<RowsetTree>();
+        ModifyRowSetTree(*_rowset_tree, rs_to_delete, rs_to_add, 
new_rowset_tree.get());
+        _rowset_tree = std::move(new_rowset_tree);
+    }
+
     // reconstruct from tablet meta
     
_timestamped_version_tracker.construct_versioned_tracker(_tablet_meta->all_rs_metas());
     // clear stale rowset
diff --git a/be/src/olap/tablet_meta.cpp b/be/src/olap/tablet_meta.cpp
index 1689c0a356..1a2c429dcc 100644
--- a/be/src/olap/tablet_meta.cpp
+++ b/be/src/olap/tablet_meta.cpp
@@ -212,6 +212,7 @@ TabletMeta::TabletMeta(const TabletMeta& b)
           _in_restore_mode(b._in_restore_mode),
           _preferred_rowset_type(b._preferred_rowset_type),
           _storage_policy(b._storage_policy),
+          
_enable_unique_key_merge_on_write(b._enable_unique_key_merge_on_write),
           _delete_bitmap(b._delete_bitmap) {};
 
 void TabletMeta::init_column_from_tcolumn(uint32_t unique_id, const TColumn& 
tcolumn,


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to