Skip to content

Commit

Permalink
fix logic of capture_tablet_and_rowsets
Browse files Browse the repository at this point in the history
Signed-off-by: smartlxh <[email protected]>
  • Loading branch information
smartlxh committed Jun 21, 2024
1 parent f836b91 commit 85d709c
Showing 1 changed file with 23 additions and 15 deletions.
38 changes: 23 additions & 15 deletions be/src/storage/lake/tablet_manager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -682,29 +682,37 @@ StatusOr<SegmentPtr> TabletManager::load_segment(const FileInfo& segment_info, i
StatusOr<TabletAndRowsets> TabletManager::capture_tablet_and_rowsets(int64_t tablet_id, int64_t from_version,
int64_t to_version) {
auto tablet_ptr = std::make_shared<Tablet>(this, tablet_id);

std::vector<std::shared_ptr<BaseRowset>> rowsets;

std::vector<RowsetPtr> from_rowsets;
std::vector<RowsetPtr> to_rowsets;
if (from_version != 0) {
auto tablet_meta_from_version = get_tablet_metadata(tablet_id, from_version).value();
from_rowsets = Rowset::get_rowsets(this, tablet_meta_from_version);
}

auto tablet_meta_to_version = get_tablet_metadata(tablet_id, to_version).value();
to_rowsets = Rowset::get_rowsets(this, tablet_meta_to_version);
for (int version = from_version + 1; version <= to_version; version++) {
auto current_version_tablet_meta = get_tablet_metadata(tablet_id, version).value();
if (current_version_tablet_meta->compaction_inputs_size() == 0) {
std::set<uint32_t> rowset_ids;
// indicates the tablet metadata is generated by load
if (version != 1) {
auto pre_version_tablet_meta = get_tablet_metadata(tablet_id, version - 1);
if (!pre_version_tablet_meta.ok()) {

std::unordered_map<int64_t, std::shared_ptr<Rowset>> distinct_rowset;
for (const auto& rowset : from_rowsets) {
distinct_rowset[rowset->id()] = std::move(rowset);
}
}

auto pre_tablet_meta = pre_version_tablet_meta.value();
for (int i = 0, size = pre_tablet_meta->rowsets_size(); i < size; ++i) {
rowset_ids.emplace(pre_tablet_meta->rowsets(i).id());
}
}

for (const auto& rowset : to_rowsets) {
if (distinct_rowset.find(rowset->id()) != distinct_rowset.end()) {
auto base_rowset_ptr = std::static_pointer_cast<BaseRowset>(rowset);
rowsets.emplace_back(base_rowset_ptr);
for (int i = 0, size = current_version_tablet_meta->rowsets_size(); i < size; i++) {
if (rowset_ids.count(current_version_tablet_meta->rowsets(i).id()) == 0) {
// inc rowset
auto rowset = std::make_shared<Rowset>(this, current_version_tablet_meta, i);
rowsets.emplace_back(std::static_pointer_cast<BaseRowset>(rowset));
}
}
}

}

return std::make_tuple(std::move(tablet_ptr), std::move(rowsets));
Expand Down

0 comments on commit 85d709c

Please sign in to comment.