@@ -272,7 +272,7 @@ impl BackgroundProcessor {
272
272
if last_prune_call. elapsed ( ) . as_secs ( ) > if have_pruned { NETWORK_PRUNE_TIMER } else { FIRST_NETWORK_PRUNE_TIMER } {
273
273
if let Some ( ref handler) = net_graph_msg_handler {
274
274
log_trace ! ( logger, "Pruning network graph of stale entries" ) ;
275
- handler. network_graph ( ) . remove_stale_channels ( ) ;
275
+ handler. network_graph ( ) . remove_stale_channels ( ) ;
276
276
if let Err ( e) = persister. persist_graph ( handler. network_graph ( ) ) {
277
277
log_error ! ( logger, "Error: Failed to persist network graph, check your disk and permissions {}" , e)
278
278
}
@@ -413,6 +413,22 @@ mod tests {
413
413
414
414
struct Persister {
415
415
data_dir : String ,
416
+ graph_error : Option < ( std:: io:: ErrorKind , & ' static str ) > ,
417
+ manager_error : Option < ( std:: io:: ErrorKind , & ' static str ) >
418
+ }
419
+
420
+ impl Persister {
421
+ fn new ( data_dir : String ) -> Self {
422
+ Self { data_dir, graph_error : None , manager_error : None }
423
+ }
424
+
425
+ fn with_graph_error ( self , error : std:: io:: ErrorKind , message : & ' static str ) -> Self {
426
+ Self { graph_error : Some ( ( error, message) ) , ..self }
427
+ }
428
+
429
+ fn with_manager_error ( self , error : std:: io:: ErrorKind , message : & ' static str ) -> Self {
430
+ Self { manager_error : Some ( ( error, message) ) , ..self }
431
+ }
416
432
}
417
433
418
434
impl < Signer : Sign , M : Deref , T : Deref , K : Deref , F : Deref , L : Deref > super :: Persister < Signer , M , T , K , F , L > for Persister where
@@ -423,11 +439,17 @@ mod tests {
423
439
L :: Target : ' static + Logger ,
424
440
{
425
441
fn persist_manager ( & self , channel_manager : & ChannelManager < Signer , M , T , K , F , L > ) -> Result < ( ) , std:: io:: Error > {
426
- FilesystemPersister :: persist_manager ( self . data_dir . clone ( ) , channel_manager)
442
+ match self . manager_error {
443
+ None => FilesystemPersister :: persist_manager ( self . data_dir . clone ( ) , channel_manager) ,
444
+ Some ( ( error, message) ) => Err ( std:: io:: Error :: new ( error, message) ) ,
445
+ }
427
446
}
428
447
429
448
fn persist_graph ( & self , network_graph : & NetworkGraph ) -> Result < ( ) , std:: io:: Error > {
430
- FilesystemPersister :: persist_network_graph ( self . data_dir . clone ( ) , network_graph)
449
+ match self . graph_error {
450
+ None => FilesystemPersister :: persist_network_graph ( self . data_dir . clone ( ) , network_graph) ,
451
+ Some ( ( error, message) ) => Err ( std:: io:: Error :: new ( error, message) ) ,
452
+ }
431
453
}
432
454
}
433
455
@@ -554,7 +576,7 @@ mod tests {
554
576
555
577
// Initiate the background processors to watch each node.
556
578
let data_dir = nodes[ 0 ] . persister . get_data_dir ( ) ;
557
- let persister = Persister { data_dir } ;
579
+ let persister = Persister :: new ( data_dir) ;
558
580
let event_handler = |_: & _ | { } ;
559
581
let bg_processor = BackgroundProcessor :: start ( persister, event_handler, nodes[ 0 ] . chain_monitor . clone ( ) , nodes[ 0 ] . node . clone ( ) , nodes[ 0 ] . net_graph_msg_handler . clone ( ) , nodes[ 0 ] . peer_manager . clone ( ) , nodes[ 0 ] . logger . clone ( ) ) ;
560
582
@@ -615,7 +637,7 @@ mod tests {
615
637
// `FRESHNESS_TIMER`.
616
638
let nodes = create_nodes ( 1 , "test_timer_tick_called" . to_string ( ) ) ;
617
639
let data_dir = nodes[ 0 ] . persister . get_data_dir ( ) ;
618
- let persister = Persister { data_dir } ;
640
+ let persister = Persister :: new ( data_dir) ;
619
641
let event_handler = |_: & _ | { } ;
620
642
let bg_processor = BackgroundProcessor :: start ( persister, event_handler, nodes[ 0 ] . chain_monitor . clone ( ) , nodes[ 0 ] . node . clone ( ) , nodes[ 0 ] . net_graph_msg_handler . clone ( ) , nodes[ 0 ] . peer_manager . clone ( ) , nodes[ 0 ] . logger . clone ( ) ) ;
621
643
loop {
@@ -637,28 +659,8 @@ mod tests {
637
659
let nodes = create_nodes ( 2 , "test_persist_error" . to_string ( ) ) ;
638
660
open_channel ! ( nodes[ 0 ] , nodes[ 1 ] , 100000 ) ;
639
661
640
- struct ChannelManagerErrorPersister {
641
- data_dir : String ,
642
- }
643
-
644
- impl < Signer : Sign , M : Deref , T : Deref , K : Deref , F : Deref , L : Deref > super :: Persister < Signer , M , T , K , F , L > for ChannelManagerErrorPersister where
645
- M :: Target : ' static + chain:: Watch < Signer > ,
646
- T :: Target : ' static + BroadcasterInterface ,
647
- K :: Target : ' static + KeysInterface < Signer = Signer > ,
648
- F :: Target : ' static + FeeEstimator ,
649
- L :: Target : ' static + Logger ,
650
- {
651
- fn persist_manager ( & self , _channel_manager : & ChannelManager < Signer , M , T , K , F , L > ) -> Result < ( ) , std:: io:: Error > {
652
- Err ( std:: io:: Error :: new ( std:: io:: ErrorKind :: Other , "test" ) )
653
- }
654
-
655
- fn persist_graph ( & self , network_graph : & NetworkGraph ) -> Result < ( ) , std:: io:: Error > {
656
- FilesystemPersister :: persist_network_graph ( self . data_dir . clone ( ) , network_graph)
657
- }
658
- }
659
-
660
662
let data_dir = nodes[ 0 ] . persister . get_data_dir ( ) ;
661
- let persister = ChannelManagerErrorPersister { data_dir } ;
663
+ let persister = Persister :: new ( data_dir) . with_manager_error ( std :: io :: ErrorKind :: Other , "test" ) ;
662
664
let event_handler = |_: & _ | { } ;
663
665
let bg_processor = BackgroundProcessor :: start ( persister, event_handler, nodes[ 0 ] . chain_monitor . clone ( ) , nodes[ 0 ] . node . clone ( ) , nodes[ 0 ] . net_graph_msg_handler . clone ( ) , nodes[ 0 ] . peer_manager . clone ( ) , nodes[ 0 ] . logger . clone ( ) ) ;
664
666
match bg_processor. join ( ) {
@@ -674,28 +676,8 @@ mod tests {
674
676
fn test_network_graph_persist_error ( ) {
675
677
// Test that if we encounter an error during network graph persistence, an error gets returned.
676
678
let nodes = create_nodes ( 2 , "test_persist_network_graph_error" . to_string ( ) ) ;
677
- struct NetworkGraphErrorPersister {
678
- data_dir : String ,
679
- }
680
-
681
- impl < Signer : Sign , M : Deref , T : Deref , K : Deref , F : Deref , L : Deref > super :: Persister < Signer , M , T , K , F , L > for NetworkGraphErrorPersister where
682
- M :: Target : ' static + chain:: Watch < Signer > ,
683
- T :: Target : ' static + BroadcasterInterface ,
684
- K :: Target : ' static + KeysInterface < Signer = Signer > ,
685
- F :: Target : ' static + FeeEstimator ,
686
- L :: Target : ' static + Logger ,
687
- {
688
- fn persist_manager ( & self , channel_manager : & ChannelManager < Signer , M , T , K , F , L > ) -> Result < ( ) , std:: io:: Error > {
689
- FilesystemPersister :: persist_manager ( self . data_dir . clone ( ) , channel_manager)
690
- }
691
-
692
- fn persist_graph ( & self , _network_graph : & NetworkGraph ) -> Result < ( ) , std:: io:: Error > {
693
- Err ( std:: io:: Error :: new ( std:: io:: ErrorKind :: Other , "test" ) )
694
- }
695
- }
696
-
697
679
let data_dir = nodes[ 0 ] . persister . get_data_dir ( ) ;
698
- let persister = NetworkGraphErrorPersister { data_dir } ;
680
+ let persister = Persister :: new ( data_dir) . with_graph_error ( std :: io :: ErrorKind :: Other , "test" ) ;
699
681
let event_handler = |_: & _ | { } ;
700
682
let bg_processor = BackgroundProcessor :: start ( persister, event_handler, nodes[ 0 ] . chain_monitor . clone ( ) , nodes[ 0 ] . node . clone ( ) , nodes[ 0 ] . net_graph_msg_handler . clone ( ) , nodes[ 0 ] . peer_manager . clone ( ) , nodes[ 0 ] . logger . clone ( ) ) ;
701
683
@@ -713,7 +695,7 @@ mod tests {
713
695
let mut nodes = create_nodes ( 2 , "test_background_event_handling" . to_string ( ) ) ;
714
696
let channel_value = 100000 ;
715
697
let data_dir = nodes[ 0 ] . persister . get_data_dir ( ) ;
716
- let persister = Persister { data_dir : data_dir. clone ( ) } ;
698
+ let persister = Persister :: new ( data_dir. clone ( ) ) ;
717
699
718
700
// Set up a background event handler for FundingGenerationReady events.
719
701
let ( sender, receiver) = std:: sync:: mpsc:: sync_channel ( 1 ) ;
@@ -744,7 +726,7 @@ mod tests {
744
726
// Set up a background event handler for SpendableOutputs events.
745
727
let ( sender, receiver) = std:: sync:: mpsc:: sync_channel ( 1 ) ;
746
728
let event_handler = move |event : & Event | sender. send ( event. clone ( ) ) . unwrap ( ) ;
747
- let bg_processor = BackgroundProcessor :: start ( Persister { data_dir : data_dir . clone ( ) } , event_handler, nodes[ 0 ] . chain_monitor . clone ( ) , nodes[ 0 ] . node . clone ( ) , nodes[ 0 ] . net_graph_msg_handler . clone ( ) , nodes[ 0 ] . peer_manager . clone ( ) , nodes[ 0 ] . logger . clone ( ) ) ;
729
+ let bg_processor = BackgroundProcessor :: start ( Persister :: new ( data_dir ) , event_handler, nodes[ 0 ] . chain_monitor . clone ( ) , nodes[ 0 ] . node . clone ( ) , nodes[ 0 ] . net_graph_msg_handler . clone ( ) , nodes[ 0 ] . peer_manager . clone ( ) , nodes[ 0 ] . logger . clone ( ) ) ;
748
730
749
731
// Force close the channel and check that the SpendableOutputs event was handled.
750
732
nodes[ 0 ] . node . force_close_channel ( & nodes[ 0 ] . node . list_channels ( ) [ 0 ] . channel_id ) . unwrap ( ) ;
@@ -770,7 +752,7 @@ mod tests {
770
752
771
753
// Initiate the background processors to watch each node.
772
754
let data_dir = nodes[ 0 ] . persister . get_data_dir ( ) ;
773
- let persister = Persister { data_dir } ;
755
+ let persister = Persister :: new ( data_dir) ;
774
756
let scorer = Arc :: new ( Mutex :: new ( test_utils:: TestScorer :: with_penalty ( 0 ) ) ) ;
775
757
let router = DefaultRouter :: new ( Arc :: clone ( & nodes[ 0 ] . network_graph ) , Arc :: clone ( & nodes[ 0 ] . logger ) , random_seed_bytes) ;
776
758
let invoice_payer = Arc :: new ( InvoicePayer :: new ( Arc :: clone ( & nodes[ 0 ] . node ) , router, scorer, Arc :: clone ( & nodes[ 0 ] . logger ) , |_: & _ | { } , RetryAttempts ( 2 ) ) ) ;
0 commit comments