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