@@ -291,6 +291,7 @@ pub struct StateDbSync<BlockHash: Hash, Key: Hash, D: MetaDb> {
291
291
non_canonical : NonCanonicalOverlay < BlockHash , Key > ,
292
292
pruning : Option < RefWindow < BlockHash , Key , D > > ,
293
293
pinned : HashMap < BlockHash , u32 > ,
294
+ ref_counting : bool ,
294
295
}
295
296
296
297
impl < BlockHash : Hash + MallocSizeOf , Key : Hash + MallocSizeOf , D : MetaDb >
@@ -311,7 +312,7 @@ impl<BlockHash: Hash + MallocSizeOf, Key: Hash + MallocSizeOf, D: MetaDb>
311
312
PruningMode :: ArchiveAll | PruningMode :: ArchiveCanonical => None ,
312
313
} ;
313
314
314
- Ok ( StateDbSync { mode, non_canonical, pruning, pinned : Default :: default ( ) } )
315
+ Ok ( StateDbSync { mode, non_canonical, pruning, pinned : Default :: default ( ) , ref_counting } )
315
316
}
316
317
317
318
fn insert_block (
@@ -372,9 +373,9 @@ impl<BlockHash: Hash + MallocSizeOf, Key: Hash + MallocSizeOf, D: MetaDb>
372
373
match self . pruning . as_ref ( ) {
373
374
None => IsPruned :: NotPruned ,
374
375
Some ( pruning) => match pruning. have_block ( hash, number) {
375
- HaveBlock :: NotHave => IsPruned :: Pruned ,
376
- HaveBlock :: Have => IsPruned :: NotPruned ,
377
- HaveBlock :: MayHave => IsPruned :: MaybePruned ,
376
+ HaveBlock :: No => IsPruned :: Pruned ,
377
+ HaveBlock :: Yes => IsPruned :: NotPruned ,
378
+ HaveBlock :: Maybe => IsPruned :: MaybePruned ,
378
379
} ,
379
380
}
380
381
}
@@ -444,9 +445,9 @@ impl<BlockHash: Hash + MallocSizeOf, Key: Hash + MallocSizeOf, D: MetaDb>
444
445
let have_block = self . non_canonical . have_block ( hash) ||
445
446
self . pruning . as_ref ( ) . map_or ( false , |pruning| {
446
447
match pruning. have_block ( hash, number) {
447
- HaveBlock :: NotHave => false ,
448
- HaveBlock :: Have => true ,
449
- HaveBlock :: MayHave => hint ( ) ,
448
+ HaveBlock :: No => false ,
449
+ HaveBlock :: Yes => true ,
450
+ HaveBlock :: Maybe => hint ( ) ,
450
451
}
451
452
} ) ;
452
453
if have_block {
@@ -496,30 +497,6 @@ impl<BlockHash: Hash + MallocSizeOf, Key: Hash + MallocSizeOf, D: MetaDb>
496
497
db. get ( key. as_ref ( ) ) . map_err ( Error :: Db )
497
498
}
498
499
499
- fn apply_pending ( & mut self ) {
500
- self . non_canonical . apply_pending ( ) ;
501
- if let Some ( pruning) = & mut self . pruning {
502
- pruning. apply_pending ( ) ;
503
- }
504
- let next_hash = self . pruning . as_mut ( ) . map ( |p| p. next_hash ( ) ) ;
505
- trace ! (
506
- target: "forks" ,
507
- "First available: {:?} ({}), Last canon: {:?} ({}), Best forks: {:?}" ,
508
- next_hash,
509
- self . pruning. as_ref( ) . map( |p| p. pending( ) ) . unwrap_or( 0 ) ,
510
- self . non_canonical. last_canonicalized_hash( ) ,
511
- self . non_canonical. last_canonicalized_block_number( ) . unwrap_or( 0 ) ,
512
- self . non_canonical. top_level( ) ,
513
- ) ;
514
- }
515
-
516
- fn revert_pending ( & mut self ) {
517
- if let Some ( pruning) = & mut self . pruning {
518
- pruning. revert_pending ( ) ;
519
- }
520
- self . non_canonical . revert_pending ( ) ;
521
- }
522
-
523
500
fn memory_info ( & self ) -> StateDbMemoryInfo {
524
501
StateDbMemoryInfo {
525
502
non_canonical : MemorySize :: from_bytes ( malloc_size ( & self . non_canonical ) ) ,
@@ -654,14 +631,11 @@ impl<BlockHash: Hash + MallocSizeOf, Key: Hash + MallocSizeOf, D: MetaDb>
654
631
return self . db . read ( ) . is_pruned ( hash, number)
655
632
}
656
633
657
- /// Apply all pending changes
658
- pub fn apply_pending ( & self ) {
659
- self . db . write ( ) . apply_pending ( ) ;
660
- }
661
-
662
- /// Revert all pending changes
663
- pub fn revert_pending ( & self ) {
664
- self . db . write ( ) . revert_pending ( ) ;
634
+ /// Reset in-memory changes to the last disk-backed state.
635
+ pub fn reset ( & self , db : D ) -> Result < ( ) , Error < D :: Error > > {
636
+ let mut state_db = self . db . write ( ) ;
637
+ * state_db = StateDbSync :: new ( state_db. mode . clone ( ) , state_db. ref_counting , db) ?;
638
+ Ok ( ( ) )
665
639
}
666
640
667
641
/// Returns the current memory statistics of this instance.
@@ -766,9 +740,7 @@ mod tests {
766
740
)
767
741
. unwrap ( ) ,
768
742
) ;
769
- state_db. apply_pending ( ) ;
770
743
db. commit ( & state_db. canonicalize_block ( & H256 :: from_low_u64_be ( 1 ) ) . unwrap ( ) ) ;
771
- state_db. apply_pending ( ) ;
772
744
db. commit (
773
745
& state_db
774
746
. insert_block (
@@ -779,11 +751,8 @@ mod tests {
779
751
)
780
752
. unwrap ( ) ,
781
753
) ;
782
- state_db. apply_pending ( ) ;
783
754
db. commit ( & state_db. canonicalize_block ( & H256 :: from_low_u64_be ( 21 ) ) . unwrap ( ) ) ;
784
- state_db. apply_pending ( ) ;
785
755
db. commit ( & state_db. canonicalize_block ( & H256 :: from_low_u64_be ( 3 ) ) . unwrap ( ) ) ;
786
- state_db. apply_pending ( ) ;
787
756
788
757
( db, state_db)
789
758
}
0 commit comments