@@ -272,7 +272,7 @@ impl BackgroundProcessor {
272272 if last_prune_call. elapsed ( ) . as_secs ( ) > if have_pruned { NETWORK_PRUNE_TIMER } else { FIRST_NETWORK_PRUNE_TIMER } {
273273 if let Some ( ref handler) = net_graph_msg_handler {
274274 log_trace ! ( logger, "Pruning network graph of stale entries" ) ;
275- handler. network_graph ( ) . remove_stale_channels ( ) ;
275+ handler. network_graph ( ) . remove_stale_channels ( ) ;
276276 if let Err ( e) = persister. persist_graph ( handler. network_graph ( ) ) {
277277 log_error ! ( logger, "Error: Failed to persist network graph, check your disk and permissions {}" , e)
278278 }
@@ -413,6 +413,22 @@ mod tests {
413413
414414 struct Persister {
415415 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+ }
416432 }
417433
418434 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 {
423439 L :: Target : ' static + Logger ,
424440 {
425441 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+ }
427446 }
428447
429448 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+ }
431453 }
432454 }
433455
@@ -554,7 +576,7 @@ mod tests {
554576
555577 // Initiate the background processors to watch each node.
556578 let data_dir = nodes[ 0 ] . persister . get_data_dir ( ) ;
557- let persister = Persister { data_dir } ;
579+ let persister = Persister :: new ( data_dir) ;
558580 let event_handler = |_: & _ | { } ;
559581 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 ( ) ) ;
560582
@@ -615,7 +637,7 @@ mod tests {
615637 // `FRESHNESS_TIMER`.
616638 let nodes = create_nodes ( 1 , "test_timer_tick_called" . to_string ( ) ) ;
617639 let data_dir = nodes[ 0 ] . persister . get_data_dir ( ) ;
618- let persister = Persister { data_dir } ;
640+ let persister = Persister :: new ( data_dir) ;
619641 let event_handler = |_: & _ | { } ;
620642 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 ( ) ) ;
621643 loop {
@@ -637,28 +659,8 @@ mod tests {
637659 let nodes = create_nodes ( 2 , "test_persist_error" . to_string ( ) ) ;
638660 open_channel ! ( nodes[ 0 ] , nodes[ 1 ] , 100000 ) ;
639661
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-
660662 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" ) ;
662664 let event_handler = |_: & _ | { } ;
663665 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 ( ) ) ;
664666 match bg_processor. join ( ) {
@@ -674,28 +676,8 @@ mod tests {
674676 fn test_network_graph_persist_error ( ) {
675677 // Test that if we encounter an error during network graph persistence, an error gets returned.
676678 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-
697679 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" ) ;
699681 let event_handler = |_: & _ | { } ;
700682 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 ( ) ) ;
701683
@@ -713,7 +695,7 @@ mod tests {
713695 let mut nodes = create_nodes ( 2 , "test_background_event_handling" . to_string ( ) ) ;
714696 let channel_value = 100000 ;
715697 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 ( ) ) ;
717699
718700 // Set up a background event handler for FundingGenerationReady events.
719701 let ( sender, receiver) = std:: sync:: mpsc:: sync_channel ( 1 ) ;
@@ -744,7 +726,7 @@ mod tests {
744726 // Set up a background event handler for SpendableOutputs events.
745727 let ( sender, receiver) = std:: sync:: mpsc:: sync_channel ( 1 ) ;
746728 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 ( ) ) ;
748730
749731 // Force close the channel and check that the SpendableOutputs event was handled.
750732 nodes[ 0 ] . node . force_close_channel ( & nodes[ 0 ] . node . list_channels ( ) [ 0 ] . channel_id ) . unwrap ( ) ;
@@ -770,7 +752,7 @@ mod tests {
770752
771753 // Initiate the background processors to watch each node.
772754 let data_dir = nodes[ 0 ] . persister . get_data_dir ( ) ;
773- let persister = Persister { data_dir } ;
755+ let persister = Persister :: new ( data_dir) ;
774756 let scorer = Arc :: new ( Mutex :: new ( test_utils:: TestScorer :: with_penalty ( 0 ) ) ) ;
775757 let router = DefaultRouter :: new ( Arc :: clone ( & nodes[ 0 ] . network_graph ) , Arc :: clone ( & nodes[ 0 ] . logger ) , random_seed_bytes) ;
776758 let invoice_payer = Arc :: new ( InvoicePayer :: new ( Arc :: clone ( & nodes[ 0 ] . node ) , router, scorer, Arc :: clone ( & nodes[ 0 ] . logger ) , |_: & _ | { } , RetryAttempts ( 2 ) ) ) ;
0 commit comments