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 <[email protected]>
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: [email protected]
For additional commands, e-mail: [email protected]