@@ -26,6 +26,8 @@ use lightning::chain::chainmonitor::{ChainMonitor, Persist};
26
26
use lightning:: events:: EventHandler ;
27
27
#[ cfg( feature = "std" ) ]
28
28
use lightning:: events:: EventsProvider ;
29
+ #[ cfg( feature = "futures" ) ]
30
+ use lightning:: events:: ReplayEvent ;
29
31
use lightning:: events:: { Event , PathFailure } ;
30
32
31
33
use lightning:: ln:: channelmanager:: AChannelManager ;
@@ -583,6 +585,7 @@ use futures_util::{dummy_waker, Selector, SelectorOutput};
583
585
/// could setup `process_events_async` like this:
584
586
/// ```
585
587
/// # use lightning::io;
588
+ /// # use lightning::events::ReplayEvent;
586
589
/// # use std::sync::{Arc, RwLock};
587
590
/// # use std::sync::atomic::{AtomicBool, Ordering};
588
591
/// # use std::time::SystemTime;
@@ -600,7 +603,7 @@ use futures_util::{dummy_waker, Selector, SelectorOutput};
600
603
/// # }
601
604
/// # struct EventHandler {}
602
605
/// # impl EventHandler {
603
- /// # async fn handle_event(&self, _: lightning::events::Event) { }
606
+ /// # async fn handle_event(&self, _: lightning::events::Event) -> Result<(), ReplayEvent> { Ok(()) }
604
607
/// # }
605
608
/// # #[derive(Eq, PartialEq, Clone, Hash)]
606
609
/// # struct SocketDescriptor {}
@@ -698,7 +701,7 @@ pub async fn process_events_async<
698
701
G : ' static + Deref < Target = NetworkGraph < L > > + Send + Sync ,
699
702
L : ' static + Deref + Send + Sync ,
700
703
P : ' static + Deref + Send + Sync ,
701
- EventHandlerFuture : core:: future:: Future < Output = ( ) > ,
704
+ EventHandlerFuture : core:: future:: Future < Output = Result < ( ) , ReplayEvent > > ,
702
705
EventHandler : Fn ( Event ) -> EventHandlerFuture ,
703
706
PS : ' static + Deref + Send ,
704
707
M : ' static
@@ -751,12 +754,16 @@ where
751
754
if update_scorer ( scorer, & event, duration_since_epoch) {
752
755
log_trace ! ( logger, "Persisting scorer after update" ) ;
753
756
if let Err ( e) = persister. persist_scorer ( & scorer) {
754
- log_error ! ( logger, "Error: Failed to persist scorer, check your disk and permissions {}" , e)
757
+ log_error ! ( logger, "Error: Failed to persist scorer, check your disk and permissions {}" , e) ;
758
+ // We opt not to abort early on persistence failure here as persisting
759
+ // the scorer is non-critical and we still hope that it will have
760
+ // resolved itself when it is potentially critical in event handling
761
+ // below.
755
762
}
756
763
}
757
764
}
758
765
}
759
- event_handler ( event) . await ;
766
+ event_handler ( event) . await
760
767
} )
761
768
} ;
762
769
define_run_body ! (
@@ -913,7 +920,7 @@ impl BackgroundProcessor {
913
920
}
914
921
}
915
922
}
916
- event_handler. handle_event ( event) ;
923
+ event_handler. handle_event ( event)
917
924
} ;
918
925
define_run_body ! (
919
926
persister,
@@ -1757,7 +1764,7 @@ mod tests {
1757
1764
// Initiate the background processors to watch each node.
1758
1765
let data_dir = nodes[ 0 ] . kv_store . get_data_dir ( ) ;
1759
1766
let persister = Arc :: new ( Persister :: new ( data_dir) ) ;
1760
- let event_handler = |_: _ | { } ;
1767
+ let event_handler = |_: _ | Ok ( ( ) ) ;
1761
1768
let bg_processor = BackgroundProcessor :: start (
1762
1769
persister,
1763
1770
event_handler,
@@ -1847,7 +1854,7 @@ mod tests {
1847
1854
let ( _, nodes) = create_nodes ( 1 , "test_timer_tick_called" ) ;
1848
1855
let data_dir = nodes[ 0 ] . kv_store . get_data_dir ( ) ;
1849
1856
let persister = Arc :: new ( Persister :: new ( data_dir) ) ;
1850
- let event_handler = |_: _ | { } ;
1857
+ let event_handler = |_: _ | Ok ( ( ) ) ;
1851
1858
let bg_processor = BackgroundProcessor :: start (
1852
1859
persister,
1853
1860
event_handler,
@@ -1889,7 +1896,7 @@ mod tests {
1889
1896
let persister = Arc :: new (
1890
1897
Persister :: new ( data_dir) . with_manager_error ( std:: io:: ErrorKind :: Other , "test" ) ,
1891
1898
) ;
1892
- let event_handler = |_: _ | { } ;
1899
+ let event_handler = |_: _ | Ok ( ( ) ) ;
1893
1900
let bg_processor = BackgroundProcessor :: start (
1894
1901
persister,
1895
1902
event_handler,
@@ -1924,7 +1931,7 @@ mod tests {
1924
1931
1925
1932
let bp_future = super :: process_events_async (
1926
1933
persister,
1927
- |_: _ | async { } ,
1934
+ |_: _ | async { Ok ( ( ) ) } ,
1928
1935
nodes[ 0 ] . chain_monitor . clone ( ) ,
1929
1936
nodes[ 0 ] . node . clone ( ) ,
1930
1937
Some ( nodes[ 0 ] . messenger . clone ( ) ) ,
@@ -1957,7 +1964,7 @@ mod tests {
1957
1964
let data_dir = nodes[ 0 ] . kv_store . get_data_dir ( ) ;
1958
1965
let persister =
1959
1966
Arc :: new ( Persister :: new ( data_dir) . with_graph_error ( std:: io:: ErrorKind :: Other , "test" ) ) ;
1960
- let event_handler = |_: _ | { } ;
1967
+ let event_handler = |_: _ | Ok ( ( ) ) ;
1961
1968
let bg_processor = BackgroundProcessor :: start (
1962
1969
persister,
1963
1970
event_handler,
@@ -1986,7 +1993,7 @@ mod tests {
1986
1993
let data_dir = nodes[ 0 ] . kv_store . get_data_dir ( ) ;
1987
1994
let persister =
1988
1995
Arc :: new ( Persister :: new ( data_dir) . with_scorer_error ( std:: io:: ErrorKind :: Other , "test" ) ) ;
1989
- let event_handler = |_: _ | { } ;
1996
+ let event_handler = |_: _ | Ok ( ( ) ) ;
1990
1997
let bg_processor = BackgroundProcessor :: start (
1991
1998
persister,
1992
1999
event_handler,
@@ -2021,13 +2028,16 @@ mod tests {
2021
2028
// Set up a background event handler for FundingGenerationReady events.
2022
2029
let ( funding_generation_send, funding_generation_recv) = std:: sync:: mpsc:: sync_channel ( 1 ) ;
2023
2030
let ( channel_pending_send, channel_pending_recv) = std:: sync:: mpsc:: sync_channel ( 1 ) ;
2024
- let event_handler = move |event : Event | match event {
2025
- Event :: FundingGenerationReady { .. } => funding_generation_send
2026
- . send ( handle_funding_generation_ready ! ( event, channel_value) )
2027
- . unwrap ( ) ,
2028
- Event :: ChannelPending { .. } => channel_pending_send. send ( ( ) ) . unwrap ( ) ,
2029
- Event :: ChannelReady { .. } => { } ,
2030
- _ => panic ! ( "Unexpected event: {:?}" , event) ,
2031
+ let event_handler = move |event : Event | {
2032
+ match event {
2033
+ Event :: FundingGenerationReady { .. } => funding_generation_send
2034
+ . send ( handle_funding_generation_ready ! ( event, channel_value) )
2035
+ . unwrap ( ) ,
2036
+ Event :: ChannelPending { .. } => channel_pending_send. send ( ( ) ) . unwrap ( ) ,
2037
+ Event :: ChannelReady { .. } => { } ,
2038
+ _ => panic ! ( "Unexpected event: {:?}" , event) ,
2039
+ }
2040
+ Ok ( ( ) )
2031
2041
} ;
2032
2042
2033
2043
let bg_processor = BackgroundProcessor :: start (
@@ -2082,11 +2092,14 @@ mod tests {
2082
2092
2083
2093
// Set up a background event handler for SpendableOutputs events.
2084
2094
let ( sender, receiver) = std:: sync:: mpsc:: sync_channel ( 1 ) ;
2085
- let event_handler = move |event : Event | match event {
2086
- Event :: SpendableOutputs { .. } => sender. send ( event) . unwrap ( ) ,
2087
- Event :: ChannelReady { .. } => { } ,
2088
- Event :: ChannelClosed { .. } => { } ,
2089
- _ => panic ! ( "Unexpected event: {:?}" , event) ,
2095
+ let event_handler = move |event : Event | {
2096
+ match event {
2097
+ Event :: SpendableOutputs { .. } => sender. send ( event) . unwrap ( ) ,
2098
+ Event :: ChannelReady { .. } => { } ,
2099
+ Event :: ChannelClosed { .. } => { } ,
2100
+ _ => panic ! ( "Unexpected event: {:?}" , event) ,
2101
+ }
2102
+ Ok ( ( ) )
2090
2103
} ;
2091
2104
let persister = Arc :: new ( Persister :: new ( data_dir) ) ;
2092
2105
let bg_processor = BackgroundProcessor :: start (
@@ -2220,7 +2233,7 @@ mod tests {
2220
2233
let ( _, nodes) = create_nodes ( 2 , "test_scorer_persistence" ) ;
2221
2234
let data_dir = nodes[ 0 ] . kv_store . get_data_dir ( ) ;
2222
2235
let persister = Arc :: new ( Persister :: new ( data_dir) ) ;
2223
- let event_handler = |_: _ | { } ;
2236
+ let event_handler = |_: _ | Ok ( ( ) ) ;
2224
2237
let bg_processor = BackgroundProcessor :: start (
2225
2238
persister,
2226
2239
event_handler,
@@ -2315,7 +2328,7 @@ mod tests {
2315
2328
let data_dir = nodes[ 0 ] . kv_store . get_data_dir ( ) ;
2316
2329
let persister = Arc :: new ( Persister :: new ( data_dir) . with_graph_persistence_notifier ( sender) ) ;
2317
2330
2318
- let event_handler = |_: _ | { } ;
2331
+ let event_handler = |_: _ | Ok ( ( ) ) ;
2319
2332
let background_processor = BackgroundProcessor :: start (
2320
2333
persister,
2321
2334
event_handler,
@@ -2350,7 +2363,7 @@ mod tests {
2350
2363
let ( exit_sender, exit_receiver) = tokio:: sync:: watch:: channel ( ( ) ) ;
2351
2364
let bp_future = super :: process_events_async (
2352
2365
persister,
2353
- |_: _ | async { } ,
2366
+ |_: _ | async { Ok ( ( ) ) } ,
2354
2367
nodes[ 0 ] . chain_monitor . clone ( ) ,
2355
2368
nodes[ 0 ] . node . clone ( ) ,
2356
2369
Some ( nodes[ 0 ] . messenger . clone ( ) ) ,
@@ -2492,12 +2505,15 @@ mod tests {
2492
2505
#[ test]
2493
2506
fn test_payment_path_scoring ( ) {
2494
2507
let ( sender, receiver) = std:: sync:: mpsc:: sync_channel ( 1 ) ;
2495
- let event_handler = move |event : Event | match event {
2496
- Event :: PaymentPathFailed { .. } => sender. send ( event) . unwrap ( ) ,
2497
- Event :: PaymentPathSuccessful { .. } => sender. send ( event) . unwrap ( ) ,
2498
- Event :: ProbeSuccessful { .. } => sender. send ( event) . unwrap ( ) ,
2499
- Event :: ProbeFailed { .. } => sender. send ( event) . unwrap ( ) ,
2500
- _ => panic ! ( "Unexpected event: {:?}" , event) ,
2508
+ let event_handler = move |event : Event | {
2509
+ match event {
2510
+ Event :: PaymentPathFailed { .. } => sender. send ( event) . unwrap ( ) ,
2511
+ Event :: PaymentPathSuccessful { .. } => sender. send ( event) . unwrap ( ) ,
2512
+ Event :: ProbeSuccessful { .. } => sender. send ( event) . unwrap ( ) ,
2513
+ Event :: ProbeFailed { .. } => sender. send ( event) . unwrap ( ) ,
2514
+ _ => panic ! ( "Unexpected event: {:?}" , event) ,
2515
+ }
2516
+ Ok ( ( ) )
2501
2517
} ;
2502
2518
2503
2519
let ( _, nodes) = create_nodes ( 1 , "test_payment_path_scoring" ) ;
@@ -2543,6 +2559,7 @@ mod tests {
2543
2559
Event :: ProbeFailed { .. } => sender_ref. send ( event) . await . unwrap ( ) ,
2544
2560
_ => panic ! ( "Unexpected event: {:?}" , event) ,
2545
2561
}
2562
+ Ok ( ( ) )
2546
2563
}
2547
2564
} ;
2548
2565
0 commit comments