From aa7e5704fa765754b8bba15d9c9c45a3d662627a Mon Sep 17 00:00:00 2001 From: forcodedancing Date: Mon, 21 Oct 2024 13:39:08 +0800 Subject: [PATCH] fix an issue --- crates/stages/stages/src/stages/execution.rs | 10 ++++--- .../src/providers/state/cache/cache_writer.rs | 26 ++++++++++++------- 2 files changed, 23 insertions(+), 13 deletions(-) diff --git a/crates/stages/stages/src/stages/execution.rs b/crates/stages/stages/src/stages/execution.rs index d5d91c003..37f2b4c86 100644 --- a/crates/stages/stages/src/stages/execution.rs +++ b/crates/stages/stages/src/stages/execution.rs @@ -398,10 +398,12 @@ where let time = Instant::now(); // write output - let (plain_state, _) = - state.bundle.clone().into_plain_state_and_reverts(OriginalValuesKnown::Yes); - let mut cache_writer = PlainCacheWriter::new(provider.tx_ref()); - cache_writer.write_change_set(stage_progress, &plain_state); + if self.enable_cache { + let (plain_state, _) = + state.bundle.clone().into_plain_state_and_reverts(OriginalValuesKnown::Yes); + let mut cache_writer = PlainCacheWriter::new(provider.tx_ref()); + cache_writer.write_change_set(stage_progress, &plain_state); + } let mut writer = UnifiedStorageWriter::new(&provider, static_file_producer); writer.write_to_storage(state, OriginalValuesKnown::Yes)?; diff --git a/crates/storage/provider/src/providers/state/cache/cache_writer.rs b/crates/storage/provider/src/providers/state/cache/cache_writer.rs index db345ace6..dd3ec4380 100644 --- a/crates/storage/provider/src/providers/state/cache/cache_writer.rs +++ b/crates/storage/provider/src/providers/state/cache/cache_writer.rs @@ -92,17 +92,25 @@ impl<'a, TX> PlainCacheWriter<'a, TX> { // Update storage cache for storage in &change_set.storage { if storage.wipe_storage { - let walker = cursor.walk_dup(Some(storage.address), None).unwrap(); - for kv in walker { - match kv { - Ok((k, v)) => { - super::plain_state::PLAIN_STORAGES.remove(&(k, v.key)); - } - Err(_) => { - super::plain_state::PLAIN_STORAGES.clear(); - break; + let walker = cursor.walk_dup(Some(storage.address), None); + match walker { + Ok(walker) => { + for kv in walker { + match kv { + Ok((k, v)) => { + super::plain_state::PLAIN_STORAGES.remove(&(k, v.key)); + } + Err(_) => { + super::plain_state::PLAIN_STORAGES.clear(); + break; + } + } } } + Err(_) => { + super::plain_state::PLAIN_STORAGES.clear(); + break; + } } }