[feature-wip](unique-key-merge-on-write) opt lock and only save valid delete_bitmap (#11953)

1. use rlock in most logic instead of wrlock
2. filter stale rowset's delete bitmap in save meta
3. add a delete_bitmap lock to handle compaction and publish_txn confict

Co-authored-by: yixiutt <yixiu@selectdb.com>
This commit is contained in:
yixiutt
2022-08-23 14:43:40 +08:00
committed by GitHub
parent 30a13c8141
commit 60fddd56e7
10 changed files with 73 additions and 51 deletions

View File

@ -536,11 +536,17 @@ void TabletMeta::to_meta_pb(TabletMetaPB* tablet_meta_pb) {
tablet_meta_pb->set_storage_policy(_storage_policy);
tablet_meta_pb->set_enable_unique_key_merge_on_write(_enable_unique_key_merge_on_write);
{
std::shared_lock l(delete_bitmap().lock);
if (_enable_unique_key_merge_on_write) {
std::set<RowsetId> rs_ids;
for (const auto& rowset : _rs_metas) {
rs_ids.insert(rowset->rowset_id());
}
DeleteBitmapPB* delete_bitmap_pb = tablet_meta_pb->mutable_delete_bitmap();
for (auto& [id, bitmap] : delete_bitmap().delete_bitmap) {
for (auto& [id, bitmap] : delete_bitmap().snapshot().delete_bitmap) {
auto& [rowset_id, segment_id, ver] = id;
if (rs_ids.count(rowset_id) == 0) {
continue;
}
delete_bitmap_pb->add_rowset_ids(rowset_id.to_string());
delete_bitmap_pb->add_segment_ids(segment_id);
delete_bitmap_pb->add_versions(ver);