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

dataroaring 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 6a5c2a7d0b3 [fix](schema change) fix schema change check does not 
calculate reader merged rows (#33825) (#37467)
6a5c2a7d0b3 is described below

commit 6a5c2a7d0b397b097ca316a4db7f4b555ce87adb
Author: Luwei <[email protected]>
AuthorDate: Tue Jul 9 09:42:51 2024 +0800

    [fix](schema change) fix schema change check does not calculate reader 
merged rows (#33825) (#37467)
---
 be/src/common/config.cpp                  |  2 ++
 be/src/common/config.h                    |  2 ++
 be/src/olap/rowset/beta_rowset_reader.cpp |  3 +++
 be/src/olap/rowset/beta_rowset_reader.h   |  3 +++
 be/src/olap/rowset/rowset_reader.h        |  2 ++
 be/src/olap/schema_change.h               | 21 ++++++++++++++-------
 6 files changed, 26 insertions(+), 7 deletions(-)

diff --git a/be/src/common/config.cpp b/be/src/common/config.cpp
index c83f869095f..7fc4bc9c5d6 100644
--- a/be/src/common/config.cpp
+++ b/be/src/common/config.cpp
@@ -1172,6 +1172,8 @@ DEFINE_mDouble(high_disk_avail_level_diff_usages, "0.15");
 // create tablet in partition random robin idx lru size, default 10000
 DEFINE_Int32(partition_disk_index_lru_size, "10000");
 
+DEFINE_mBool(ignore_schema_change_check, "false");
+
 // clang-format off
 #ifdef BE_TEST
 // test s3
diff --git a/be/src/common/config.h b/be/src/common/config.h
index 8336515af3e..c762df19f53 100644
--- a/be/src/common/config.h
+++ b/be/src/common/config.h
@@ -1225,6 +1225,8 @@ DECLARE_mDouble(high_disk_avail_level_diff_usages);
 // create tablet in partition random robin idx lru size, default 10000
 DECLARE_Int32(partition_disk_index_lru_size);
 
+DECLARE_mBool(ignore_schema_change_check);
+
 #ifdef BE_TEST
 // test s3
 DECLARE_String(test_s3_resource);
diff --git a/be/src/olap/rowset/beta_rowset_reader.cpp 
b/be/src/olap/rowset/beta_rowset_reader.cpp
index 0ad45bebf3a..24a5f2d891f 100644
--- a/be/src/olap/rowset/beta_rowset_reader.cpp
+++ b/be/src/olap/rowset/beta_rowset_reader.cpp
@@ -273,6 +273,9 @@ Status BetaRowsetReader::_init_iterator() {
     std::vector<RowwiseIteratorUPtr> iterators;
     RETURN_IF_ERROR(get_segment_iterators(_read_context, &iterators));
 
+    if (_read_context->merged_rows == nullptr) {
+        _read_context->merged_rows = &_merged_rows;
+    }
     // merge or union segment iterator
     if (_is_merge_iterator()) {
         auto sequence_loc = -1;
diff --git a/be/src/olap/rowset/beta_rowset_reader.h 
b/be/src/olap/rowset/beta_rowset_reader.h
index db0b1facc73..336fb247dcf 100644
--- a/be/src/olap/rowset/beta_rowset_reader.h
+++ b/be/src/olap/rowset/beta_rowset_reader.h
@@ -72,6 +72,8 @@ public:
                _stats->rows_vec_cond_filtered + 
_stats->rows_short_circuit_cond_filtered;
     }
 
+    uint64_t merged_rows() override { return *(_read_context->merged_rows); }
+
     RowsetTypePB type() const override { return RowsetTypePB::BETA_ROWSET; }
 
     Status current_block_row_locations(std::vector<RowLocation>* locations) 
override {
@@ -125,6 +127,7 @@ private:
 
     bool _empty = false;
     size_t _topn_limit = 0;
+    uint64_t _merged_rows = 0;
 };
 
 } // namespace doris
diff --git a/be/src/olap/rowset/rowset_reader.h 
b/be/src/olap/rowset/rowset_reader.h
index 34caa615c25..ead18c076ed 100644
--- a/be/src/olap/rowset/rowset_reader.h
+++ b/be/src/olap/rowset/rowset_reader.h
@@ -74,6 +74,8 @@ public:
 
     virtual int64_t filtered_rows() = 0;
 
+    virtual uint64_t merged_rows() = 0;
+
     virtual RowsetTypePB type() const = 0;
 
     virtual int64_t newest_write_timestamp() = 0;
diff --git a/be/src/olap/schema_change.h b/be/src/olap/schema_change.h
index c13f543d726..679a50b30b3 100644
--- a/be/src/olap/schema_change.h
+++ b/be/src/olap/schema_change.h
@@ -121,7 +121,6 @@ public:
 
         RETURN_IF_ERROR(
                 _inner_process(rowset_reader, rowset_writer, new_tablet, 
base_tablet_schema));
-        _add_filtered_rows(rowset_reader->filtered_rows());
 
         // Check row num changes
         if (!_check_row_nums(rowset_reader, *rowset_writer)) {
@@ -129,8 +128,11 @@ public:
         }
 
         LOG(INFO) << "all row nums. source_rows=" << 
rowset_reader->rowset()->num_rows()
+                  << ", source_filtered_rows=" << 
rowset_reader->filtered_rows()
+                  << ", source_merged_rows=" << rowset_reader->merged_rows()
                   << ", merged_rows=" << merged_rows() << ", filtered_rows=" 
<< filtered_rows()
-                  << ", new_index_rows=" << rowset_writer->num_rows();
+                  << ", new_index_rows=" << rowset_writer->num_rows()
+                  << ", writer_filtered_rows=" << 
rowset_writer->num_rows_filtered();
         return Status::OK();
     }
 
@@ -149,14 +151,19 @@ protected:
     }
 
     virtual bool _check_row_nums(RowsetReaderSharedPtr reader, const 
RowsetWriter& writer) const {
-        if (reader->rowset()->num_rows() != writer.num_rows() + _merged_rows + 
_filtered_rows) {
+        if (reader->rowset()->num_rows() - reader->filtered_rows() - 
reader->merged_rows() !=
+            writer.num_rows() + writer.num_rows_filtered() + _merged_rows + 
_filtered_rows) {
             LOG(WARNING) << "fail to check row num! "
                          << "source_rows=" << reader->rowset()->num_rows()
-                         << ", writer rows=" << writer.num_rows()
+                         << ", source_filtered_rows=" << 
reader->filtered_rows()
+                         << ", source_merged_rows=" << reader->merged_rows()
+                         << ", written_rows=" << writer.num_rows()
+                         << ", writer_filtered_rows=" << 
writer.num_rows_filtered()
                          << ", merged_rows=" << merged_rows()
-                         << ", filtered_rows=" << filtered_rows()
-                         << ", new_index_rows=" << writer.num_rows();
-            return false;
+                         << ", filtered_rows=" << filtered_rows();
+            if (!config::ignore_schema_change_check) {
+                return false;
+            }
         }
         return true;
     }


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

Reply via email to