From 17bd89a00885cba5e8b5a6001531fd52637377a5 Mon Sep 17 00:00:00 2001 From: zwang28 <84491488@qq.com> Date: Wed, 25 Sep 2024 14:24:37 +0800 Subject: [PATCH] refactor(meta): reduce time travel hummock version size --- src/meta/src/hummock/manager/time_travel.rs | 3 ++- src/storage/hummock_sdk/src/time_travel.rs | 10 +++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/meta/src/hummock/manager/time_travel.rs b/src/meta/src/hummock/manager/time_travel.rs index 0b6ef73e5260..5782b30a8d7d 100644 --- a/src/meta/src/hummock/manager/time_travel.rs +++ b/src/meta/src/hummock/manager/time_travel.rs @@ -330,6 +330,7 @@ impl HummockManager { .order_by_asc(hummock_time_travel_delta::Column::VersionId) .all(&sql_store.conn) .await?; + // SstableInfo in actual_version is incomplete before refill_version. let mut actual_version = replay_archive( replay_version.version.to_protobuf(), deltas.into_iter().map(|d| d.version_delta.to_protobuf()), @@ -363,7 +364,7 @@ impl HummockManager { query_epoch, actual_version_id, )))); } - refill_version(&mut actual_version, &sst_id_to_info); + refill_version(&mut actual_version, &sst_id_to_info, table_id); Ok(actual_version) } diff --git a/src/storage/hummock_sdk/src/time_travel.rs b/src/storage/hummock_sdk/src/time_travel.rs index 8859daa572d9..69e2b74dfc24 100644 --- a/src/storage/hummock_sdk/src/time_travel.rs +++ b/src/storage/hummock_sdk/src/time_travel.rs @@ -28,9 +28,12 @@ use crate::{CompactionGroupId, HummockSstableId}; pub type IncompleteHummockVersion = HummockVersionCommon; +/// Populates `SstableInfo` for `table_id`. +/// `SstableInfo` not associated with `table_id` is removed. pub fn refill_version( version: &mut HummockVersion, sst_id_to_info: &HashMap, + table_id: u32, ) { for level in version.levels.values_mut().flat_map(|level| { level @@ -41,8 +44,13 @@ pub fn refill_version( .chain(level.levels.iter_mut()) }) { refill_level(level, sst_id_to_info); + level + .table_infos + .retain(|t| t.table_ids.contains(&table_id)); } - + version + .table_change_log + .retain(|t, _| t.table_id == table_id); for t in version.table_change_log.values_mut() { refill_table_change_log(t, sst_id_to_info); }