This is an automated email from the ASF dual-hosted git repository.

w41ter pushed a commit to branch fix_snapshot_binlog_files
in repository https://gitbox.apache.org/repos/asf/doris.git

commit 4254a77c40d6f3502099637c4a43c9ab9ed53990
Author: w41ter <w41te...@gmail.com>
AuthorDate: Thu Sep 26 01:50:39 2024 +0000

    [fix](snapshot) Link binlog files according to consistent rowsets
    
    In previous implementations, binlog files would be linked according to
    making snapshot request. However, sometimes not all requests can be
    executed directly. For example, when a certain version in
    missing_version does not exist, it will fallback to full snapshot.
    Therefore, it is correct to link binlog files according to consistent
    rowsets.
---
 be/src/olap/snapshot_manager.cpp | 21 ++++++++++-----------
 1 file changed, 10 insertions(+), 11 deletions(-)

diff --git a/be/src/olap/snapshot_manager.cpp b/be/src/olap/snapshot_manager.cpp
index e0bfaf704dd..2cfa9a8e8b7 100644
--- a/be/src/olap/snapshot_manager.cpp
+++ b/be/src/olap/snapshot_manager.cpp
@@ -411,13 +411,13 @@ Status SnapshotManager::_create_snapshot_files(const 
TabletSharedPtr& ref_tablet
     string snapshot_id;
     
RETURN_IF_ERROR(io::global_local_filesystem()->canonicalize(snapshot_id_path, 
&snapshot_id));
 
+    std::vector<RowsetSharedPtr> consistent_rowsets;
     do {
         TabletMetaSharedPtr new_tablet_meta(new (nothrow) TabletMeta());
         if (new_tablet_meta == nullptr) {
             res = Status::Error<MEM_ALLOC_FAILED>("fail to malloc 
TabletMeta.");
             break;
         }
-        std::vector<RowsetSharedPtr> consistent_rowsets;
         DeleteBitmap delete_bitmap_snapshot(new_tablet_meta->tablet_id());
 
         /// If set missing_version, try to get all missing version.
@@ -628,17 +628,16 @@ Status SnapshotManager::_create_snapshot_files(const 
TabletSharedPtr& ref_tablet
         }
 
         RowsetBinlogMetasPB rowset_binlog_metas_pb;
-        if (request.__isset.missing_version) {
-            res = ref_tablet->get_rowset_binlog_metas(request.missing_version,
-                                                      &rowset_binlog_metas_pb);
-        } else {
-            std::vector<TVersion> missing_versions;
-            res = ref_tablet->get_rowset_binlog_metas(missing_versions, 
&rowset_binlog_metas_pb);
-        }
-        if (!res.ok()) {
-            break;
+        for (auto& rs : consistent_rowsets) {
+            if (!rs->is_local()) {
+                continue;
+            }
+            res = ref_tablet->get_rowset_binlog_metas(rs->version(), 
&rowset_binlog_metas_pb);
+            if (!res.ok()) {
+                break;
+            }
         }
-        if (rowset_binlog_metas_pb.rowset_binlog_metas_size() == 0) {
+        if (!res.ok() || rowset_binlog_metas_pb.rowset_binlog_metas_size() == 
0) {
             break;
         }
 


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to