Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 13 additions & 13 deletions crates/storage/provider/src/providers/database/provider.rs
Original file line number Diff line number Diff line change
Expand Up @@ -630,27 +630,27 @@ impl<TX: DbTx + DbTxMut + 'static, N: NodeTypesForProvider> DatabaseProvider<TX,
},
)?;
timings.write_state += start.elapsed();

let trie_data = block.trie_data();

// insert hashes and intermediate merkle nodes
let start = Instant::now();
self.write_hashed_state(&trie_data.hashed_state)?;
timings.write_hashed_state += start.elapsed();
}
}

// Write all trie updates in a single batch.
// Write all hashed state and trie updates in single batches.
// This reduces cursor open/close overhead from N calls to 1.
if save_mode.with_state() {
// Blocks are oldest-to-newest, merge_batch expects newest-to-oldest.
let start = Instant::now();
let merged_hashed_state = HashedPostStateSorted::merge_batch(
blocks.iter().rev().map(|b| b.trie_data().hashed_state),
);
if !merged_hashed_state.is_empty() {
self.write_hashed_state(&merged_hashed_state)?;
}
timings.write_hashed_state += start.elapsed();

// Blocks are oldest-to-newest, merge_batch expects newest-to-oldest.
let merged =
let start = Instant::now();
let merged_trie =
TrieUpdatesSorted::merge_batch(blocks.iter().rev().map(|b| b.trie_updates()));

if !merged.is_empty() {
self.write_trie_updates_sorted(&merged)?;
if !merged_trie.is_empty() {
self.write_trie_updates_sorted(&merged_trie)?;
}
timings.write_trie_updates += start.elapsed();
}
Expand Down
Loading