@@ -36,10 +36,10 @@ pub struct BodyDB {
3636 // block cache
3737 body_cache : Mutex < LruCache < BlockHash , Bytes > > ,
3838 address_by_hash_cache : RwLock < HashMap < TxHash , TransactionAddress > > ,
39- pending_addresses_by_hash : RwLock < HashMap < TxHash , Option < TransactionAddress > > > ,
39+ pending_addresses_by_hash : RwLock < HashMap < TxHash , TransactionAddress > > ,
4040
4141 addresses_by_tracker_cache : Mutex < HashMap < Tracker , TransactionAddresses > > ,
42- pending_addresses_by_tracker : Mutex < HashMap < Tracker , Option < TransactionAddresses > > > ,
42+ pending_addresses_by_tracker : Mutex < HashMap < Tracker , TransactionAddresses > > ,
4343
4444 db : Arc < dyn KeyValueDB > ,
4545}
@@ -90,13 +90,13 @@ impl BodyDB {
9090 pub fn update_best_block ( & self , batch : & mut DBTransaction , best_block_changed : & BestBlockChanged ) {
9191 let mut pending_addresses_by_hash = self . pending_addresses_by_hash . write ( ) ;
9292 let mut pending_addresses_by_tracker = self . pending_addresses_by_tracker . lock ( ) ;
93- batch. extend_with_option_cache (
93+ batch. extend_with_cache (
9494 db:: COL_EXTRA ,
9595 & mut * pending_addresses_by_hash,
9696 self . new_transaction_address_entries ( best_block_changed) ,
9797 CacheUpdatePolicy :: Overwrite ,
9898 ) ;
99- batch. extend_with_option_cache (
99+ batch. extend_with_cache (
100100 db:: COL_EXTRA ,
101101 & mut * pending_addresses_by_tracker,
102102 self . new_transaction_addresses_entries ( best_block_changed) ,
@@ -113,33 +113,19 @@ impl BodyDB {
113113 let mut pending_addresses_by_tracker = self . pending_addresses_by_tracker . lock ( ) ;
114114
115115 let new_txs_by_hash = mem:: replace ( & mut * pending_addresses_by_hash, HashMap :: new ( ) ) ;
116- let ( retracted_txs, enacted_txs) =
117- new_txs_by_hash. into_iter ( ) . partition :: < HashMap < _ , _ > , _ > ( |& ( _, ref value) | value. is_none ( ) ) ;
118116
119- address_by_hash_cache
120- . extend ( enacted_txs. into_iter ( ) . map ( |( k, v) | ( k, v. expect ( "Transactions were partitioned; qed" ) ) ) ) ;
121-
122- for hash in retracted_txs. keys ( ) {
123- address_by_hash_cache. remove ( hash) ;
124- }
117+ address_by_hash_cache. extend ( new_txs_by_hash. into_iter ( ) ) ;
125118
126119 let new_txs_by_tracker = mem:: replace ( & mut * pending_addresses_by_tracker, HashMap :: new ( ) ) ;
127- let ( removed_transactions, added_transactions) =
128- new_txs_by_tracker. into_iter ( ) . partition :: < HashMap < _ , _ > , _ > ( |& ( _, ref value) | value. is_none ( ) ) ;
129-
130- addresses_by_tracker_cache
131- . extend ( added_transactions. into_iter ( ) . map ( |( k, v) | ( k, v. expect ( "Transactions were partitioned; qed" ) ) ) ) ;
132120
133- for hash in removed_transactions. keys ( ) {
134- addresses_by_tracker_cache. remove ( hash) ;
135- }
121+ addresses_by_tracker_cache. extend ( new_txs_by_tracker. into_iter ( ) ) ;
136122 }
137123
138124 /// This function returns modified transaction addresses.
139125 fn new_transaction_address_entries (
140126 & self ,
141127 best_block_changed : & BestBlockChanged ,
142- ) -> HashMap < TxHash , Option < TransactionAddress > > {
128+ ) -> HashMap < TxHash , TransactionAddress > {
143129 let block = match best_block_changed. best_block ( ) {
144130 Some ( block) => block,
145131 None => return HashMap :: new ( ) ,
@@ -157,7 +143,7 @@ impl BodyDB {
157143 fn new_transaction_addresses_entries (
158144 & self ,
159145 best_block_changed : & BestBlockChanged ,
160- ) -> HashMap < Tracker , Option < TransactionAddresses > > {
146+ ) -> HashMap < Tracker , TransactionAddresses > {
161147 let block_hash = if let Some ( best_block_hash) = best_block_changed. new_best_hash ( ) {
162148 best_block_hash
163149 } else {
@@ -168,57 +154,32 @@ impl BodyDB {
168154 None => return HashMap :: new ( ) ,
169155 } ;
170156
171- let ( removed, added) : (
172- Box < dyn Iterator < Item = TrackerAndAddress > > ,
173- Box < dyn Iterator < Item = TrackerAndAddress > > ,
174- ) = match best_block_changed {
157+ let added: Box < dyn Iterator < Item = TrackerAndAddress > > = match best_block_changed {
175158 BestBlockChanged :: CanonChainAppended {
176159 ..
177- } => (
178- Box :: new ( :: std:: iter:: empty ( ) ) ,
179- Box :: new ( tracker_and_addresses_entries ( block_hash, block. transactions ( ) ) ) ,
180- ) ,
160+ } => Box :: new ( tracker_and_addresses_entries ( block_hash, block. transactions ( ) ) ) ,
181161 BestBlockChanged :: None => return Default :: default ( ) ,
182162 } ;
183163
184164 let mut added_addresses: HashMap < Tracker , TransactionAddresses > = Default :: default ( ) ;
185- let mut removed_addresses: HashMap < Tracker , TransactionAddresses > = Default :: default ( ) ;
186165 let mut trackers: HashSet < Tracker > = Default :: default ( ) ;
187166 for ( tracker, address) in added {
188167 trackers. insert ( tracker) ;
189168 * added_addresses. entry ( tracker) . or_insert_with ( Default :: default) += address;
190169 }
191- for ( tracker, address) in removed {
192- trackers. insert ( tracker) ;
193- * removed_addresses. entry ( tracker) . or_insert_with ( Default :: default) += address;
194- }
195170 let mut inserted_address: HashMap < Tracker , TransactionAddresses > = Default :: default ( ) ;
196171 for tracker in trackers. into_iter ( ) {
197172 let address: TransactionAddresses = self . db . read ( db:: COL_EXTRA , & tracker) . unwrap_or_default ( ) ;
198173 inserted_address. insert ( tracker, address) ;
199174 }
200175
201- for ( tracker, removed_address) in removed_addresses. into_iter ( ) {
202- * inserted_address
203- . get_mut ( & tracker)
204- . expect ( "inserted addresses are sum of added_addresses and removed_addresses" ) -= removed_address;
205- }
206176 for ( tracker, added_address) in added_addresses. into_iter ( ) {
207177 * inserted_address
208178 . get_mut ( & tracker)
209179 . expect ( "inserted addresses are sum of added_addresses and removed_addresses" ) += added_address;
210180 }
211181
212182 inserted_address
213- . into_iter ( )
214- . map ( |( hash, address) | {
215- if address. is_empty ( ) {
216- ( hash, None )
217- } else {
218- ( hash, Some ( address) )
219- }
220- } )
221- . collect ( )
222183 }
223184
224185 /// Create a block body from a block.
@@ -286,15 +247,12 @@ impl BodyProvider for BodyDB {
286247fn tx_hash_and_address_entries (
287248 block_hash : BlockHash ,
288249 tx_hashes : impl IntoIterator < Item = TxHash > ,
289- ) -> impl Iterator < Item = ( TxHash , Option < TransactionAddress > ) > {
250+ ) -> impl Iterator < Item = ( TxHash , TransactionAddress ) > {
290251 tx_hashes. into_iter ( ) . enumerate ( ) . map ( move |( index, tx_hash) | {
291- (
292- tx_hash,
293- Some ( TransactionAddress {
294- block_hash,
295- index,
296- } ) ,
297- )
252+ ( tx_hash, TransactionAddress {
253+ block_hash,
254+ index,
255+ } )
298256 } )
299257}
300258
0 commit comments