@@ -70,6 +70,7 @@ use crate::{
70
70
/// the removed key is not present in the history overlay.
71
71
/// 7. Delete ancient record from memory and disk.
72
72
73
+ #[ derive( Clone ) ]
73
74
pub struct OverlayRecentDB {
74
75
transaction_overlay : super :: MemoryDB ,
75
76
backing : Arc < dyn KeyValueDB > ,
@@ -140,17 +141,6 @@ struct JournalEntry {
140
141
deletions : Vec < H256 > ,
141
142
}
142
143
143
- impl Clone for OverlayRecentDB {
144
- fn clone ( & self ) -> OverlayRecentDB {
145
- OverlayRecentDB {
146
- transaction_overlay : self . transaction_overlay . clone ( ) ,
147
- backing : self . backing . clone ( ) ,
148
- journal_overlay : self . journal_overlay . clone ( ) ,
149
- column : self . column . clone ( ) ,
150
- }
151
- }
152
- }
153
-
154
144
impl OverlayRecentDB {
155
145
/// Create a new instance.
156
146
pub fn new ( backing : Arc < dyn KeyValueDB > , col : u32 ) -> OverlayRecentDB {
@@ -197,7 +187,11 @@ impl OverlayRecentDB {
197
187
} ;
198
188
while let Some ( rlp_data) = db. get ( col, & encode ( & db_key) ) . expect ( "Low-level database error." ) {
199
189
trace ! ( "read_overlay: era={}, index={}" , era, db_key. index) ;
200
- let value = decode :: < DatabaseValue > ( & rlp_data) . expect ( & format ! ( "read_overlay: Error decoding DatabaseValue era={}, index{}" , era, db_key. index) ) ;
190
+ let value = decode :: < DatabaseValue > ( & rlp_data) . unwrap_or_else ( |e| {
191
+ panic ! ( "read_overlay: Error decoding DatabaseValue era={}, index={}, error={}" ,
192
+ era, db_key. index, e
193
+ )
194
+ } ) ;
201
195
count += value. inserts . len ( ) ;
202
196
let mut inserted_keys = Vec :: new ( ) ;
203
197
for ( k, v) in value. inserts {
@@ -286,7 +280,7 @@ impl JournalDB for OverlayRecentDB {
286
280
journal_overlay
287
281
. backing_overlay
288
282
. get ( & key, EMPTY_PREFIX )
289
- . or_else ( || journal_overlay. pending_overlay . get ( & key) . map ( |d| d . clone ( ) ) )
283
+ . or_else ( || journal_overlay. pending_overlay . get ( & key) . cloned ( ) )
290
284
} ;
291
285
292
286
maybe_state_data. or_else ( || {
@@ -306,8 +300,8 @@ impl JournalDB for OverlayRecentDB {
306
300
journal_overlay. pending_overlay . clear ( ) ;
307
301
308
302
let mut tx = self . transaction_overlay . drain ( ) ;
309
- let inserted_keys: Vec < _ > = tx. iter ( ) . filter_map ( |( k, & ( _, c) ) | if c > 0 { Some ( k . clone ( ) ) } else { None } ) . collect ( ) ;
310
- let removed_keys: Vec < _ > = tx. iter ( ) . filter_map ( |( k, & ( _, c) ) | if c < 0 { Some ( k . clone ( ) ) } else { None } ) . collect ( ) ;
303
+ let inserted_keys: Vec < _ > = tx. iter ( ) . filter_map ( |( k, & ( _, c) ) | if c > 0 { Some ( * k ) } else { None } ) . collect ( ) ;
304
+ let removed_keys: Vec < _ > = tx. iter ( ) . filter_map ( |( k, & ( _, c) ) | if c < 0 { Some ( * k ) } else { None } ) . collect ( ) ;
311
305
let ops = inserted_keys. len ( ) + removed_keys. len ( ) ;
312
306
313
307
// Increase counter for each inserted key no matter if the block is canonical or not.
@@ -349,7 +343,10 @@ impl JournalDB for OverlayRecentDB {
349
343
journal_overlay. earliest_era = Some ( now) ;
350
344
}
351
345
352
- journal_overlay. journal . entry ( now) . or_insert_with ( Vec :: new) . push ( JournalEntry { id : id. clone ( ) , insertions : inserted_keys, deletions : removed_keys } ) ;
346
+ journal_overlay. journal
347
+ . entry ( now)
348
+ . or_insert_with ( Vec :: new)
349
+ . push ( JournalEntry { id : * id, insertions : inserted_keys, deletions : removed_keys } ) ;
353
350
Ok ( ops as u32 )
354
351
}
355
352
@@ -365,8 +362,7 @@ impl JournalDB for OverlayRecentDB {
365
362
let mut canon_insertions: Vec < ( H256 , DBValue ) > = Vec :: new ( ) ;
366
363
let mut canon_deletions: Vec < H256 > = Vec :: new ( ) ;
367
364
let mut overlay_deletions: Vec < H256 > = Vec :: new ( ) ;
368
- let mut index = 0usize ;
369
- for mut journal in records. drain ( ..) {
365
+ for ( index, mut journal) in records. drain ( ..) . enumerate ( ) {
370
366
//delete the record from the db
371
367
let db_key = DatabaseKey {
372
368
era : end_era,
@@ -379,15 +375,14 @@ impl JournalDB for OverlayRecentDB {
379
375
for h in & journal. insertions {
380
376
if let Some ( ( d, rc) ) = journal_overlay. backing_overlay . raw ( & to_short_key ( h) , EMPTY_PREFIX ) {
381
377
if rc > 0 {
382
- canon_insertions. push ( ( h . clone ( ) , d. clone ( ) ) ) ; //TODO: optimize this to avoid data copy
378
+ canon_insertions. push ( ( * h , d. clone ( ) ) ) ; //TODO: optimize this to avoid data copy
383
379
}
384
380
}
385
381
}
386
382
canon_deletions = journal. deletions ;
387
383
}
388
384
overlay_deletions. append ( & mut journal. insertions ) ;
389
385
}
390
- index += 1 ;
391
386
}
392
387
393
388
ops += canon_insertions. len ( ) ;
0 commit comments