You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by yi...@apache.org on 2023/06/01 01:06:59 UTC

[doris] branch master updated: [fix](checksum) delete predicates might be inconsistent with rowset readers in checksum task (#20251)

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 09e6b6580f [fix](checksum) delete predicates might be inconsistent with rowset readers in checksum task (#20251)
09e6b6580f is described below

commit 09e6b6580f97f30e32f296f44f0161edf8d84c43
Author: Xin Liao <li...@126.com>
AuthorDate: Thu Jun 1 09:06:51 2023 +0800

    [fix](checksum) delete predicates might be inconsistent with rowset readers in checksum task (#20251)
    
    The BlockReader capture rowsets and init delete_handler in different place. If there is a base compaction, it may result in obtaining inconsistent delete handlers. Therefore, place these two operations under the same lock.
---
 be/src/olap/reader.cpp                    | 13 ++++++-------
 be/src/olap/task/engine_checksum_task.cpp | 23 +++++++++++++----------
 2 files changed, 19 insertions(+), 17 deletions(-)

diff --git a/be/src/olap/reader.cpp b/be/src/olap/reader.cpp
index a0e9b989c1..82274c1d09 100644
--- a/be/src/olap/reader.cpp
+++ b/be/src/olap/reader.cpp
@@ -643,13 +643,12 @@ Status TabletReader::init_reader_params_and_create_block(
             tablet->rowset_meta_with_max_schema_version(rowset_metas)->tablet_schema();
     TabletSchemaSPtr merge_tablet_schema = std::make_shared<TabletSchema>();
     merge_tablet_schema->copy_from(*read_tablet_schema);
-    {
-        std::shared_lock rdlock(tablet->get_header_lock());
-        auto& delete_preds = tablet->delete_predicates();
-        std::copy(delete_preds.cbegin(), delete_preds.cend(),
-                  std::inserter(reader_params->delete_predicates,
-                                reader_params->delete_predicates.begin()));
-    }
+
+    auto& delete_preds = tablet->delete_predicates();
+    std::copy(delete_preds.cbegin(), delete_preds.cend(),
+              std::inserter(reader_params->delete_predicates,
+                            reader_params->delete_predicates.begin()));
+
     // Merge the columns in delete predicate that not in latest schema in to current tablet schema
     for (auto& del_pred_pb : reader_params->delete_predicates) {
         merge_tablet_schema->merge_dropped_columns(tablet->tablet_schema(del_pred_pb->version()));
diff --git a/be/src/olap/task/engine_checksum_task.cpp b/be/src/olap/task/engine_checksum_task.cpp
index 645027dafa..614802e1f0 100644
--- a/be/src/olap/task/engine_checksum_task.cpp
+++ b/be/src/olap/task/engine_checksum_task.cpp
@@ -71,21 +71,24 @@ Status EngineChecksumTask::_compute_checksum() {
 
     std::vector<RowsetSharedPtr> input_rowsets;
     Version version(0, _version);
-    Status acquire_reader_st = tablet->capture_consistent_rowsets(version, &input_rowsets);
-    if (acquire_reader_st != Status::OK()) {
-        LOG(WARNING) << "fail to captute consistent rowsets. tablet=" << tablet->full_name()
-                     << "res=" << acquire_reader_st;
-        return acquire_reader_st;
+    vectorized::BlockReader reader;
+    TabletReader::ReaderParams reader_params;
+    vectorized::Block block;
+    {
+        std::shared_lock rdlock(tablet->get_header_lock());
+        Status acquire_reader_st = tablet->capture_consistent_rowsets(version, &input_rowsets);
+        if (acquire_reader_st != Status::OK()) {
+            LOG(WARNING) << "fail to captute consistent rowsets. tablet=" << tablet->full_name()
+                         << "res=" << acquire_reader_st;
+            return acquire_reader_st;
+        }
+        RETURN_IF_ERROR(TabletReader::init_reader_params_and_create_block(
+                tablet, ReaderType::READER_CHECKSUM, input_rowsets, &reader_params, &block));
     }
     size_t input_size = 0;
     for (const auto& rowset : input_rowsets) {
         input_size += rowset->data_disk_size();
     }
-    vectorized::BlockReader reader;
-    TabletReader::ReaderParams reader_params;
-    vectorized::Block block;
-    RETURN_IF_ERROR(TabletReader::init_reader_params_and_create_block(
-            tablet, ReaderType::READER_CHECKSUM, input_rowsets, &reader_params, &block));
 
     auto res = reader.init(reader_params);
     if (!res.ok()) {


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