From 13fe5bc8a3b53702f12f2f2fab1e051d72eadb43 Mon Sep 17 00:00:00 2001 From: Weny Xu Date: Thu, 21 May 2026 16:55:17 +0800 Subject: [PATCH] fix: skip sst cache preload for staging manifest (#8147) Signed-off-by: WenyXu --- src/mito2/src/engine.rs | 1 + src/mito2/src/request.rs | 2 ++ src/mito2/src/worker/handle_apply_staging.rs | 2 ++ src/mito2/src/worker/handle_manifest.rs | 17 ++++++++++++++--- 4 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/mito2/src/engine.rs b/src/mito2/src/engine.rs index d4c52c7162..57ea9b2986 100644 --- a/src/mito2/src/engine.rs +++ b/src/mito2/src/engine.rs @@ -459,6 +459,7 @@ impl MitoEngine { region_id, edit, tx, + preload_sst_cache: true, }); self.inner .workers diff --git a/src/mito2/src/request.rs b/src/mito2/src/request.rs index fefac39e6a..4c50d340e8 100644 --- a/src/mito2/src/request.rs +++ b/src/mito2/src/request.rs @@ -1105,6 +1105,8 @@ pub(crate) struct CopyRegionFromFinished { pub(crate) struct RegionEditRequest { pub(crate) region_id: RegionId, pub(crate) edit: RegionEdit, + /// Whether to preload SST files into the write cache. + pub(crate) preload_sst_cache: bool, /// The sender to notify the result to the region engine. pub(crate) tx: Sender>, } diff --git a/src/mito2/src/worker/handle_apply_staging.rs b/src/mito2/src/worker/handle_apply_staging.rs index 876d5c3c31..b183fed9c1 100644 --- a/src/mito2/src/worker/handle_apply_staging.rs +++ b/src/mito2/src/worker/handle_apply_staging.rs @@ -139,6 +139,8 @@ impl RegionWorkerLoop { RegionEditRequest { region_id: region.region_id, edit, + // we don't need to preload sst cache during repartition, as it may cause extra network overhead. + preload_sst_cache: false, tx, }, ))) diff --git a/src/mito2/src/worker/handle_manifest.rs b/src/mito2/src/worker/handle_manifest.rs index 40366f9ccd..306bdffee9 100644 --- a/src/mito2/src/worker/handle_manifest.rs +++ b/src/mito2/src/worker/handle_manifest.rs @@ -263,6 +263,7 @@ impl RegionWorkerLoop { region_id: _, mut edit, tx: sender, + preload_sst_cache, } = request; let file_sequence = region.version_control.committed_sequence() + 1; edit.committed_sequence = Some(file_sequence); @@ -291,8 +292,15 @@ impl RegionWorkerLoop { // Now the region is in editing state. // Updates manifest in background. common_runtime::spawn_global(async move { - let result = - edit_region(®ion, edit.clone(), cache_manager, listener, is_staging).await; + let result = edit_region( + ®ion, + edit.clone(), + cache_manager, + listener, + is_staging, + preload_sst_cache, + ) + .await; let notify = WorkerRequest::Background { region_id, notify: BackgroundNotify::RegionEdit(RegionEditResult { @@ -528,9 +536,12 @@ async fn edit_region( cache_manager: CacheManagerRef, listener: WorkerListener, is_staging: bool, + preload_sst_cache: bool, ) -> Result<()> { let region_id = region.region_id; - if let Some(write_cache) = cache_manager.write_cache() { + if let Some(write_cache) = cache_manager.write_cache() + && preload_sst_cache + { for file_meta in &edit.files_to_add { let write_cache = write_cache.clone(); let layer = region.access_layer.clone();