@@ -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