You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by ya...@apache.org on 2020/08/25 06:05:53 UTC

[incubator-doris] branch master updated: Support batch delete[part 2] (#4425)

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

yangzhg pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-doris.git


The following commit(s) were added to refs/heads/master by this push:
     new c201cf6  Support batch delete[part 2]  (#4425)
c201cf6 is described below

commit c201cf6e4fc3ed96c24f7096c68488311b38dae3
Author: ZhangYu0123 <67...@users.noreply.github.com>
AuthorDate: Tue Aug 25 14:05:04 2020 +0800

    Support batch delete[part 2]  (#4425)
    
     support batch delete for read compaction
---
 be/src/olap/reader.cpp   | 19 ++++++++++++++-----
 be/src/olap/reader.h     |  1 +
 be/src/olap/row_cursor.h |  8 ++++++++
 3 files changed, 23 insertions(+), 5 deletions(-)

diff --git a/be/src/olap/reader.cpp b/be/src/olap/reader.cpp
index 5a2017f..c66c80e 100644
--- a/be/src/olap/reader.cpp
+++ b/be/src/olap/reader.cpp
@@ -92,7 +92,7 @@ private:
         }
 
         const RowCursor* current_row(bool* delete_flag) const {
-            *delete_flag = _is_delete;
+            *delete_flag = _is_delete || _current_row->is_delete();
             return _current_row;
         }
 
@@ -109,6 +109,9 @@ private:
             auto res = _refresh_current_row();
             *row = _current_row;
             *delete_flag = _is_delete;
+            if (_current_row!= nullptr) {
+                *delete_flag = _is_delete || _current_row->is_delete();
+            };
             return res;
         }
 
@@ -411,7 +414,6 @@ OLAPStatus Reader::_unique_key_next_row(RowCursor* row_cursor, MemPool* mem_pool
             *eof = true;
             return OLAP_SUCCESS;
         }
-
         cur_delete_flag = _next_delete_flag;
         // the verion is in reverse order, the first row is the highest version,
         // in UNIQUE_KEY highest version is the final result, there is no need to
@@ -427,14 +429,16 @@ OLAPStatus Reader::_unique_key_next_row(RowCursor* row_cursor, MemPool* mem_pool
                 }
                 break;
             }
-
             // break while can NOT doing aggregation
             if (!equal_row(_key_cids, *row_cursor, *_next_key)) {
                 break;
             }
             ++merged_count;
         }
-        if (!cur_delete_flag) {
+
+        // if reader needs to filter delete row and current delete_flag is ture, 
+        // then continue
+        if (!(cur_delete_flag && _filter_delete)) {
             break;
         }
         _stats.rows_del_filtered++;
@@ -1039,8 +1043,13 @@ OLAPStatus Reader::_init_delete_condition(const ReaderParams& read_params) {
                                               _tablet->delete_predicates(),
                                               read_params.version.second);
         _tablet->release_header_lock();
+
+        if (read_params.reader_type == READER_BASE_COMPACTION) {
+            _filter_delete = true;
+        }
         return ret;
-    } else {
+    } 
+    else {
         return OLAP_SUCCESS;
     }
 }
diff --git a/be/src/olap/reader.h b/be/src/olap/reader.h
index fe3c8ff..69a3faa 100644
--- a/be/src/olap/reader.h
+++ b/be/src/olap/reader.h
@@ -224,6 +224,7 @@ private:
     bool _need_agg_finalize = true;
     ReaderType _reader_type = READER_QUERY;
     bool _next_delete_flag = false;
+    bool _filter_delete = false;
     const RowCursor* _next_key = nullptr;
     CollectIterator* _collect_iter = nullptr;
     std::vector<uint32_t> _key_cids;
diff --git a/be/src/olap/row_cursor.h b/be/src/olap/row_cursor.h
index eb4e537..0387bb1 100644
--- a/be/src/olap/row_cursor.h
+++ b/be/src/olap/row_cursor.h
@@ -109,6 +109,14 @@ public:
         return column_schema(index)->index_size();
     }
 
+    inline bool is_delete() const {
+        auto sign_idx = _schema->delete_sign_idx();
+        if (sign_idx < 0) {
+            return false;
+        }
+        return *reinterpret_cast<const char*>(cell(sign_idx).cell_ptr()) > 0;
+    }
+
     // set max/min for key field in _field_array
     OLAPStatus build_max_key();
     OLAPStatus build_min_key();


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