[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:
@ -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);
|
||||
|
||||
Reference in New Issue
Block a user