This is an automated email from the ASF dual-hosted git repository. dataroaring 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 018665aba2 [feature-wip](unique-key-merge-on-write) some followup of #11057 (#11290) 018665aba2 is described below commit 018665aba2d0fffae83111d356a696b3294380b1 Author: zhannngchen <48427519+zhannngc...@users.noreply.github.com> AuthorDate: Fri Jul 29 14:44:48 2022 +0800 [feature-wip](unique-key-merge-on-write) some followup of #11057 (#11290) --- be/src/olap/rowset/beta_rowset_writer.cpp | 8 ++++++++ be/src/olap/rowset/beta_rowset_writer.h | 2 ++ be/src/olap/tablet.cpp | 6 +++++- 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/be/src/olap/rowset/beta_rowset_writer.cpp b/be/src/olap/rowset/beta_rowset_writer.cpp index 5a0625a870..228fcee95b 100644 --- a/be/src/olap/rowset/beta_rowset_writer.cpp +++ b/be/src/olap/rowset/beta_rowset_writer.cpp @@ -249,6 +249,7 @@ RowsetSharedPtr BetaRowsetWriter::build() { } else { _rowset_meta->set_rowset_state(VISIBLE); } + _rowset_meta->set_segments_key_bounds(_segments_encoded_key_bounds); if (_rowset_meta->oldest_write_timestamp() == -1) { _rowset_meta->set_oldest_write_timestamp(UnixSeconds()); @@ -319,6 +320,13 @@ Status BetaRowsetWriter::_flush_segment_writer(std::unique_ptr<segment_v2::Segme } _total_data_size += segment_size; _total_index_size += index_size; + KeyBoundsPB key_bounds; + Slice min_key = (*writer)->min_encoded_key(); + Slice max_key = (*writer)->max_encoded_key(); + DCHECK_LE(min_key.compare(max_key), 0); + key_bounds.set_min_key(min_key.to_string()); + key_bounds.set_max_key(max_key.to_string()); + _segments_encoded_key_bounds.emplace_back(key_bounds); writer->reset(); return Status::OK(); } diff --git a/be/src/olap/rowset/beta_rowset_writer.h b/be/src/olap/rowset/beta_rowset_writer.h index 96a513f5fe..e046f3d101 100644 --- a/be/src/olap/rowset/beta_rowset_writer.h +++ b/be/src/olap/rowset/beta_rowset_writer.h @@ -101,6 +101,8 @@ private: bool _is_pending = false; bool _already_built = false; + // for unique key table with merge-on-write + std::vector<KeyBoundsPB> _segments_encoded_key_bounds; // record rows number of every segment std::vector<uint32_t> _segment_num_rows; }; diff --git a/be/src/olap/tablet.cpp b/be/src/olap/tablet.cpp index 290753de9e..75e64f875e 100644 --- a/be/src/olap/tablet.cpp +++ b/be/src/olap/tablet.cpp @@ -1897,7 +1897,11 @@ Status Tablet::lookup_row_key(const Slice& encoded_key, RowLocation* row_locatio return s; } loc.rowset_id = rs.first->rowset_id(); - // Check delete bitmap, if the row + if (version >= 0 && _tablet_meta->delete_bitmap().contains_agg( + {loc.rowset_id, loc.segment_id, version}, loc.row_id)) { + // The key is deleted, we don't need to search for it any more. + break; + } *row_location = loc; // find it and return return s; --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org