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

kxiao pushed a commit to branch branch-2.0
in repository https://gitbox.apache.org/repos/asf/doris.git

commit b900e5cf4ec9ed46591ee3f1d2a49ffc443ec0f9
Author: huanghaibin <284824...@qq.com>
AuthorDate: Fri Aug 4 11:41:17 2023 +0800

    [fix](compaction) rowid_conversion should ignore deleted row (#22579)
---
 be/src/olap/rowid_conversion.h            | 3 +++
 be/src/vec/olap/vertical_block_reader.cpp | 4 ++++
 2 files changed, 7 insertions(+)

diff --git a/be/src/olap/rowid_conversion.h b/be/src/olap/rowid_conversion.h
index 940d6a106c..d8e2a058d8 100644
--- a/be/src/olap/rowid_conversion.h
+++ b/be/src/olap/rowid_conversion.h
@@ -54,6 +54,9 @@ public:
     void add(const std::vector<RowLocation>& rss_row_ids,
              const std::vector<uint32_t>& dst_segments_num_row) {
         for (auto& item : rss_row_ids) {
+            if (item.row_id == -1) {
+                continue;
+            }
             uint32_t id = _segment_to_id_map.at(
                     std::pair<RowsetId, uint32_t> {item.rowset_id, 
item.segment_id});
             if (_cur_dst_segment_id < dst_segments_num_row.size() &&
diff --git a/be/src/vec/olap/vertical_block_reader.cpp 
b/be/src/vec/olap/vertical_block_reader.cpp
index 17355135fe..e518f9ba8a 100644
--- a/be/src/vec/olap/vertical_block_reader.cpp
+++ b/be/src/vec/olap/vertical_block_reader.cpp
@@ -455,6 +455,7 @@ Status VerticalBlockReader::_unique_key_next_block(Block* 
block, bool* eof) {
                             .data();
 
             int cur_row = 0;
+            int delete_count = 0;
             while (cur_row < block_rows) {
                 if (_row_sources_buffer->get_agg_flag(row_source_idx)) {
                     row_source_idx++;
@@ -464,6 +465,8 @@ Status VerticalBlockReader::_unique_key_next_block(Block* 
block, bool* eof) {
                 filter_data[cur_row] = sign;
                 if (UNLIKELY(!sign)) {
                     _row_sources_buffer->set_agg_flag(row_source_idx, true);
+                    _block_row_locations[cur_row].row_id = -1;
+                    delete_count++;
                 }
                 cur_row++;
                 row_source_idx++;
@@ -480,6 +483,7 @@ Status VerticalBlockReader::_unique_key_next_block(Block* 
block, bool* eof) {
                     Block::filter_block(block, target_columns.size(), 
target_columns.size()));
             _stats.rows_del_filtered += block_rows - block->rows();
             DCHECK(block->try_get_by_name("__DORIS_COMPACTION_FILTER__") == 
nullptr);
+            DCHECK_EQ(_block_row_locations.size(), block->rows() + 
delete_count);
         }
 
         size_t filtered_rows_in_rs_buffer = 0;


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

Reply via email to