|
1 | 1 | use ethrex_common::H256; |
2 | | -use rayon::iter::{ParallelBridge, ParallelIterator}; |
3 | 2 | use rustc_hash::FxHashMap; |
4 | 3 | use std::sync::Arc; |
5 | 4 |
|
@@ -133,45 +132,29 @@ impl TrieLayerCache { |
133 | 132 | self.layers.insert(state_root, Arc::new(entry)); |
134 | 133 | } |
135 | 134 |
|
136 | | - /// Rebuilds the global bloom filter accruing all current existing layers. |
| 135 | + /// Rebuilds the global bloom filter by inserting all keys from all layers. |
137 | 136 | pub fn rebuild_bloom(&mut self) { |
138 | | - let mut blooms: Vec<_> = self |
139 | | - .layers |
140 | | - .values() |
141 | | - .par_bridge() |
142 | | - .map(|entry| { |
143 | | - let Ok(mut bloom) = Self::create_filter() else { |
144 | | - tracing::warn!("TrieLayerCache: rebuild_bloom could not create filter"); |
145 | | - return None; |
146 | | - }; |
147 | | - for (p, _) in entry.nodes.iter() { |
148 | | - if let Err(qfilter::Error::CapacityExceeded) = bloom.insert(p) { |
149 | | - tracing::warn!("TrieLayerCache: rebuild_bloom capacity exceeded"); |
150 | | - return None; |
151 | | - } |
152 | | - } |
153 | | - Some(bloom) |
154 | | - }) |
155 | | - .collect(); |
156 | | - |
157 | | - let Some(mut ret) = blooms.pop().flatten() else { |
158 | | - tracing::warn!("TrieLayerCache: rebuild_bloom no valid bloom found"); |
| 137 | + let Ok(mut new_global_filter) = Self::create_filter() else { |
| 138 | + tracing::warn!( |
| 139 | + "TrieLayerCache: rebuild_bloom could not create new filter. Poisoning bloom." |
| 140 | + ); |
159 | 141 | self.bloom = None; |
160 | 142 | return; |
161 | 143 | }; |
162 | | - for bloom in blooms.iter() { |
163 | | - let Some(bloom) = bloom else { |
164 | | - tracing::warn!("TrieLayerCache: rebuild_bloom no valid bloom found"); |
165 | | - self.bloom = None; |
166 | | - return; |
167 | | - }; |
168 | | - if let Err(qfilter::Error::CapacityExceeded) = ret.merge(false, bloom) { |
169 | | - tracing::warn!("TrieLayerCache: rebuild_bloom capacity exceeded"); |
170 | | - self.bloom = None; |
171 | | - return; |
| 144 | + |
| 145 | + for layer in self.layers.values() { |
| 146 | + for path in layer.nodes.keys() { |
| 147 | + if let Err(qfilter::Error::CapacityExceeded) = new_global_filter.insert(path) { |
| 148 | + tracing::warn!( |
| 149 | + "TrieLayerCache: rebuild_bloom capacity exceeded. Poisoning bloom." |
| 150 | + ); |
| 151 | + self.bloom = None; |
| 152 | + return; |
| 153 | + } |
172 | 154 | } |
173 | 155 | } |
174 | | - self.bloom = Some(ret); |
| 156 | + |
| 157 | + self.bloom = Some(new_global_filter); |
175 | 158 | } |
176 | 159 |
|
177 | 160 | pub fn commit(&mut self, state_root: H256) -> Option<Vec<(Vec<u8>, Vec<u8>)>> { |
|
0 commit comments