Skip to content

Commit c057024

Browse files
committed
refactor(stage): run prune logic on blocking pool
1 parent eccac4f commit c057024

File tree

1 file changed

+46
-25
lines changed

1 file changed

+46
-25
lines changed

crates/sync/stage/src/trie.rs

Lines changed: 46 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -140,32 +140,53 @@ impl Stage for StateTrie {
140140
};
141141

142142
let tx = self.storage_provider.db().tx_mut().map_err(Error::Database)?;
143-
let mut pruned_count = 0u64;
144-
145-
// Remove trie snapshots for blocks in the prune range
146-
for block_number in range {
147-
// Remove snapshot from classes trie
148-
let mut classes_trie_db = TrieDbMut::<tables::ClassesTrie, _>::new(tx.clone());
149-
classes_trie_db
150-
.remove_snapshot(block_number)
151-
.map_err(|e| Error::Database(e.into_inner()))?;
152-
153-
// Remove snapshot from contracts trie
154-
let mut contracts_trie_db = TrieDbMut::<tables::ContractsTrie, _>::new(tx.clone());
155-
contracts_trie_db
156-
.remove_snapshot(block_number)
157-
.map_err(|e| Error::Database(e.into_inner()))?;
158-
159-
// Remove snapshot from storages trie
160-
let mut storages_trie_db = TrieDbMut::<tables::StoragesTrie, _>::new(tx.clone());
161-
storages_trie_db
162-
.remove_snapshot(block_number)
163-
.map_err(|e| Error::Database(e.into_inner()))?;
164-
165-
pruned_count += 1;
166-
}
167143

168-
tx.commit().map_err(Error::Database)?;
144+
let pruned_count = self
145+
.task_spawner
146+
.spawn_blocking(move || {
147+
let mut pruned_count = 0u64;
148+
149+
// Remove trie snapshots for blocks in the prune range
150+
for block_number in range {
151+
let span = debug_span!("state_trie.prune", %block_number);
152+
let _enter = span.enter();
153+
154+
// Remove snapshot from classes trie
155+
let mut classes_trie_db =
156+
TrieDbMut::<tables::ClassesTrie, _>::new(tx.clone());
157+
classes_trie_db
158+
.remove_snapshot(block_number)
159+
.map_err(|e| Error::Database(e.into_inner()))?;
160+
161+
debug!(target: "stage", "Classes trie snapshot removed.");
162+
163+
// Remove snapshot from contracts trie
164+
let mut contracts_trie_db =
165+
TrieDbMut::<tables::ContractsTrie, _>::new(tx.clone());
166+
contracts_trie_db
167+
.remove_snapshot(block_number)
168+
.map_err(|e| Error::Database(e.into_inner()))?;
169+
170+
debug!(target: "stage", "Contracts trie snapshot removed.");
171+
172+
// Remove snapshot from storages trie
173+
let mut storages_trie_db =
174+
TrieDbMut::<tables::StoragesTrie, _>::new(tx.clone());
175+
storages_trie_db
176+
.remove_snapshot(block_number)
177+
.map_err(|e| Error::Database(e.into_inner()))?;
178+
179+
debug!(target: "stage", "Storage trie snapshot removed.");
180+
181+
pruned_count += 1;
182+
}
183+
184+
tx.commit().map_err(Error::Database)?;
185+
186+
Result::<u64, Error>::Ok(pruned_count)
187+
})
188+
.await
189+
.map_err(Error::StateComputationTaskJoinError)??;
169190

170191
debug!(target: "stage", %pruned_count, "Pruned trie snapshots");
171192

0 commit comments

Comments
 (0)