diff --git a/be/src/olap/tablet.cpp b/be/src/olap/tablet.cpp index 8f3ca8c1254369..c0cab52680b375 100644 --- a/be/src/olap/tablet.cpp +++ b/be/src/olap/tablet.cpp @@ -429,6 +429,11 @@ void Tablet::delete_expired_stale_rowset() { return; } + const RowsetSharedPtr lastest_delta = rowset_with_max_version(); + if (lastest_delta == nullptr) { + LOG(WARNING) << "lastest_delta is null " << tablet_id(); + return; + } // do check consistent operation auto path_id_iter = path_id_vec.begin(); @@ -436,12 +441,8 @@ void Tablet::delete_expired_stale_rowset() { while (path_id_iter != path_id_vec.end()) { PathVersionListSharedPtr version_path = _timestamped_version_tracker.fetch_and_delete_path_by_id(*path_id_iter); - const std::vector& to_delete_version = version_path->timestamped_versions(); - - auto first_version = to_delete_version.front(); - auto end_version = to_delete_version.back(); - Version test_version = Version(first_version->version().first, end_version->version().second); + Version test_version = Version(0, lastest_delta->end_version()); stale_version_path_map[*path_id_iter] = version_path; OLAPStatus status = capture_consistent_versions(test_version, nullptr); diff --git a/be/src/olap/version_graph.cpp b/be/src/olap/version_graph.cpp index f397dce7f9c335..f7b27b2fa7b7a3 100644 --- a/be/src/olap/version_graph.cpp +++ b/be/src/olap/version_graph.cpp @@ -101,19 +101,11 @@ void TimestampedVersionTracker::_init_stale_version_path_map( // 2.1 find a path in stale_map can replace current stale_meta version bool r = _find_path_from_stale_map(stale_map, stale_meta->start_version(), stale_meta->end_version(), &stale_path); - // 2.2 add stale_meta to stale_map - auto start_iter = stale_map.find(stale_meta->start_version()); - if (start_iter != stale_map.end()) { - start_iter->second[stale_meta->end_version()] = stale_meta; - } else { - std::unordered_map item; - item[stale_meta->end_version()] = stale_meta; - stale_map[stale_meta->start_version()] = std::move(item); - } - // 2.3 add version to version_graph + // 2.2 add version to version_graph Version stale_meta_version = stale_meta->version(); add_version(stale_meta_version); - // 2.4 find the path + + // 2.3 find the path if (r) { // add the path to _stale_version_path_map add_stale_path_version(stale_path); @@ -126,6 +118,16 @@ void TimestampedVersionTracker::_init_stale_version_path_map( } } } + + // 2.4 add stale_meta to stale_map + auto start_iter = stale_map.find(stale_meta->start_version()); + if (start_iter != stale_map.end()) { + start_iter->second[stale_meta->end_version()] = stale_meta; + } else { + std::unordered_map item; + item[stale_meta->end_version()] = stale_meta; + stale_map[stale_meta->start_version()] = std::move(item); + } } // 3. generate stale path from rs_metas @@ -189,6 +191,7 @@ bool TimestampedVersionTracker::_find_path_from_stale_map( while (map_iter != second_version_map.end()) { // the version greater than second_version, we can't find path in stale_map if (map_iter->first > second_version) { + map_iter++; continue; } // backtracking _find_path_from_stale_map find from map_iter->first + 1 to second_version