@@ -556,7 +556,7 @@ use core::task;
556
556
/// # }
557
557
/// # struct EventHandler {}
558
558
/// # impl EventHandler {
559
- /// # async fn handle_event(&self, _: lightning::events::Event) { }
559
+ /// # async fn handle_event(&self, _: lightning::events::Event) -> Result<(), ()> { Ok(()) }
560
560
/// # }
561
561
/// # #[derive(Eq, PartialEq, Clone, Hash)]
562
562
/// # struct SocketDescriptor {}
@@ -654,7 +654,7 @@ pub async fn process_events_async<
654
654
G : ' static + Deref < Target = NetworkGraph < L > > + Send + Sync ,
655
655
L : ' static + Deref + Send + Sync ,
656
656
P : ' static + Deref + Send + Sync ,
657
- EventHandlerFuture : core:: future:: Future < Output = ( ) > ,
657
+ EventHandlerFuture : core:: future:: Future < Output = Result < ( ) , ( ) > > ,
658
658
EventHandler : Fn ( Event ) -> EventHandlerFuture ,
659
659
PS : ' static + Deref + Send ,
660
660
M : ' static + Deref < Target = ChainMonitor < <CM :: Target as AChannelManager >:: Signer , CF , T , F , L , P > > + Send + Sync ,
@@ -703,12 +703,13 @@ where
703
703
if update_scorer ( scorer, & event, duration_since_epoch) {
704
704
log_trace ! ( logger, "Persisting scorer after update" ) ;
705
705
if let Err ( e) = persister. persist_scorer ( & scorer) {
706
- log_error ! ( logger, "Error: Failed to persist scorer, check your disk and permissions {}" , e)
706
+ log_error ! ( logger, "Error: Failed to persist scorer, check your disk and permissions {}" , e) ;
707
+ return Err ( ( ) ) ;
707
708
}
708
709
}
709
710
}
710
711
}
711
- event_handler ( event) . await ;
712
+ event_handler ( event) . await
712
713
} )
713
714
} ;
714
715
define_run_body ! (
@@ -740,6 +741,26 @@ where
740
741
)
741
742
}
742
743
744
+ #[ cfg( feature = "futures" ) ]
745
+ async fn process_onion_message_handler_events_async <
746
+ EventHandlerFuture : core:: future:: Future < Output = Result < ( ) , ( ) > > ,
747
+ EventHandler : Fn ( Event ) -> EventHandlerFuture ,
748
+ PM : ' static + Deref + Send + Sync ,
749
+ > (
750
+ peer_manager : & PM , handler : EventHandler
751
+ )
752
+ where
753
+ PM :: Target : APeerManager + Send + Sync ,
754
+ {
755
+ let events = core:: cell:: RefCell :: new ( Vec :: new ( ) ) ;
756
+ peer_manager. onion_message_handler ( ) . process_pending_events ( & |e| Ok ( events. borrow_mut ( ) . push ( e) ) ) ;
757
+
758
+ for event in events. into_inner ( ) {
759
+ // Ignore any errors as onion messages are best effort anyways.
760
+ let _ = handler ( event) . await ;
761
+ }
762
+ }
763
+
743
764
#[ cfg( feature = "std" ) ]
744
765
impl BackgroundProcessor {
745
766
/// Start a background thread that takes care of responsibilities enumerated in the [top-level
@@ -841,7 +862,7 @@ impl BackgroundProcessor {
841
862
}
842
863
}
843
864
}
844
- event_handler. handle_event ( event) ;
865
+ event_handler. handle_event ( event)
845
866
} ;
846
867
define_run_body ! (
847
868
persister, chain_monitor, chain_monitor. process_pending_events( & event_handler) ,
@@ -1425,7 +1446,7 @@ mod tests {
1425
1446
// Initiate the background processors to watch each node.
1426
1447
let data_dir = nodes[ 0 ] . kv_store . get_data_dir ( ) ;
1427
1448
let persister = Arc :: new ( Persister :: new ( data_dir) ) ;
1428
- let event_handler = |_: _ | { } ;
1449
+ let event_handler = |_: _ | { Ok ( ( ) ) } ;
1429
1450
let bg_processor = BackgroundProcessor :: start ( persister, event_handler, nodes[ 0 ] . chain_monitor . clone ( ) , nodes[ 0 ] . node . clone ( ) , Some ( nodes[ 0 ] . messenger . clone ( ) ) , nodes[ 0 ] . p2p_gossip_sync ( ) , nodes[ 0 ] . peer_manager . clone ( ) , nodes[ 0 ] . logger . clone ( ) , Some ( nodes[ 0 ] . scorer . clone ( ) ) ) ;
1430
1451
1431
1452
macro_rules! check_persisted_data {
@@ -1493,7 +1514,7 @@ mod tests {
1493
1514
let ( _, nodes) = create_nodes ( 1 , "test_timer_tick_called" ) ;
1494
1515
let data_dir = nodes[ 0 ] . kv_store . get_data_dir ( ) ;
1495
1516
let persister = Arc :: new ( Persister :: new ( data_dir) ) ;
1496
- let event_handler = |_: _ | { } ;
1517
+ let event_handler = |_: _ | { Ok ( ( ) ) } ;
1497
1518
let bg_processor = BackgroundProcessor :: start ( persister, event_handler, nodes[ 0 ] . chain_monitor . clone ( ) , nodes[ 0 ] . node . clone ( ) , Some ( nodes[ 0 ] . messenger . clone ( ) ) , nodes[ 0 ] . no_gossip_sync ( ) , nodes[ 0 ] . peer_manager . clone ( ) , nodes[ 0 ] . logger . clone ( ) , Some ( nodes[ 0 ] . scorer . clone ( ) ) ) ;
1498
1519
loop {
1499
1520
let log_entries = nodes[ 0 ] . logger . lines . lock ( ) . unwrap ( ) ;
@@ -1522,7 +1543,7 @@ mod tests {
1522
1543
1523
1544
let data_dir = nodes[ 0 ] . kv_store . get_data_dir ( ) ;
1524
1545
let persister = Arc :: new ( Persister :: new ( data_dir) . with_manager_error ( std:: io:: ErrorKind :: Other , "test" ) ) ;
1525
- let event_handler = |_: _ | { } ;
1546
+ let event_handler = |_: _ | { Ok ( ( ) ) } ;
1526
1547
let bg_processor = BackgroundProcessor :: start ( persister, event_handler, nodes[ 0 ] . chain_monitor . clone ( ) , nodes[ 0 ] . node . clone ( ) , Some ( nodes[ 0 ] . messenger . clone ( ) ) , nodes[ 0 ] . no_gossip_sync ( ) , nodes[ 0 ] . peer_manager . clone ( ) , nodes[ 0 ] . logger . clone ( ) , Some ( nodes[ 0 ] . scorer . clone ( ) ) ) ;
1527
1548
match bg_processor. join ( ) {
1528
1549
Ok ( _) => panic ! ( "Expected error persisting manager" ) ,
@@ -1544,7 +1565,7 @@ mod tests {
1544
1565
let persister = Arc :: new ( Persister :: new ( data_dir) . with_manager_error ( std:: io:: ErrorKind :: Other , "test" ) ) ;
1545
1566
1546
1567
let bp_future = super :: process_events_async (
1547
- persister, |_: _ | { async { } } , nodes[ 0 ] . chain_monitor . clone ( ) , nodes[ 0 ] . node . clone ( ) , Some ( nodes[ 0 ] . messenger . clone ( ) ) ,
1568
+ persister, |_: _ | { async { Ok ( ( ) ) } } , nodes[ 0 ] . chain_monitor . clone ( ) , nodes[ 0 ] . node . clone ( ) , Some ( nodes[ 0 ] . messenger . clone ( ) ) ,
1548
1569
nodes[ 0 ] . rapid_gossip_sync ( ) , nodes[ 0 ] . peer_manager . clone ( ) , nodes[ 0 ] . logger . clone ( ) ,
1549
1570
Some ( nodes[ 0 ] . scorer . clone ( ) ) , move |dur : Duration | {
1550
1571
Box :: pin ( async move {
@@ -1568,7 +1589,7 @@ mod tests {
1568
1589
let ( _, nodes) = create_nodes ( 2 , "test_persist_network_graph_error" ) ;
1569
1590
let data_dir = nodes[ 0 ] . kv_store . get_data_dir ( ) ;
1570
1591
let persister = Arc :: new ( Persister :: new ( data_dir) . with_graph_error ( std:: io:: ErrorKind :: Other , "test" ) ) ;
1571
- let event_handler = |_: _ | { } ;
1592
+ let event_handler = |_: _ | { Ok ( ( ) ) } ;
1572
1593
let bg_processor = BackgroundProcessor :: start ( persister, event_handler, nodes[ 0 ] . chain_monitor . clone ( ) , nodes[ 0 ] . node . clone ( ) , Some ( nodes[ 0 ] . messenger . clone ( ) ) , nodes[ 0 ] . p2p_gossip_sync ( ) , nodes[ 0 ] . peer_manager . clone ( ) , nodes[ 0 ] . logger . clone ( ) , Some ( nodes[ 0 ] . scorer . clone ( ) ) ) ;
1573
1594
1574
1595
match bg_processor. stop ( ) {
@@ -1586,7 +1607,7 @@ mod tests {
1586
1607
let ( _, nodes) = create_nodes ( 2 , "test_persist_scorer_error" ) ;
1587
1608
let data_dir = nodes[ 0 ] . kv_store . get_data_dir ( ) ;
1588
1609
let persister = Arc :: new ( Persister :: new ( data_dir) . with_scorer_error ( std:: io:: ErrorKind :: Other , "test" ) ) ;
1589
- let event_handler = |_: _ | { } ;
1610
+ let event_handler = |_: _ | { Ok ( ( ) ) } ;
1590
1611
let bg_processor = BackgroundProcessor :: start ( persister, event_handler, nodes[ 0 ] . chain_monitor . clone ( ) , nodes[ 0 ] . node . clone ( ) , Some ( nodes[ 0 ] . messenger . clone ( ) ) , nodes[ 0 ] . no_gossip_sync ( ) , nodes[ 0 ] . peer_manager . clone ( ) , nodes[ 0 ] . logger . clone ( ) , Some ( nodes[ 0 ] . scorer . clone ( ) ) ) ;
1591
1612
1592
1613
match bg_processor. stop ( ) {
@@ -1608,11 +1629,14 @@ mod tests {
1608
1629
// Set up a background event handler for FundingGenerationReady events.
1609
1630
let ( funding_generation_send, funding_generation_recv) = std:: sync:: mpsc:: sync_channel ( 1 ) ;
1610
1631
let ( channel_pending_send, channel_pending_recv) = std:: sync:: mpsc:: sync_channel ( 1 ) ;
1611
- let event_handler = move |event : Event | match event {
1612
- Event :: FundingGenerationReady { .. } => funding_generation_send. send ( handle_funding_generation_ready ! ( event, channel_value) ) . unwrap ( ) ,
1613
- Event :: ChannelPending { .. } => channel_pending_send. send ( ( ) ) . unwrap ( ) ,
1614
- Event :: ChannelReady { .. } => { } ,
1615
- _ => panic ! ( "Unexpected event: {:?}" , event) ,
1632
+ let event_handler = move |event : Event | {
1633
+ match event {
1634
+ Event :: FundingGenerationReady { .. } => funding_generation_send. send ( handle_funding_generation_ready ! ( event, channel_value) ) . unwrap ( ) ,
1635
+ Event :: ChannelPending { .. } => channel_pending_send. send ( ( ) ) . unwrap ( ) ,
1636
+ Event :: ChannelReady { .. } => { } ,
1637
+ _ => panic ! ( "Unexpected event: {:?}" , event) ,
1638
+ }
1639
+ Ok ( ( ) )
1616
1640
} ;
1617
1641
1618
1642
let bg_processor = BackgroundProcessor :: start ( persister, event_handler, nodes[ 0 ] . chain_monitor . clone ( ) , nodes[ 0 ] . node . clone ( ) , Some ( nodes[ 0 ] . messenger . clone ( ) ) , nodes[ 0 ] . no_gossip_sync ( ) , nodes[ 0 ] . peer_manager . clone ( ) , nodes[ 0 ] . logger . clone ( ) , Some ( nodes[ 0 ] . scorer . clone ( ) ) ) ;
@@ -1648,11 +1672,14 @@ mod tests {
1648
1672
1649
1673
// Set up a background event handler for SpendableOutputs events.
1650
1674
let ( sender, receiver) = std:: sync:: mpsc:: sync_channel ( 1 ) ;
1651
- let event_handler = move |event : Event | match event {
1652
- Event :: SpendableOutputs { .. } => sender. send ( event) . unwrap ( ) ,
1653
- Event :: ChannelReady { .. } => { } ,
1654
- Event :: ChannelClosed { .. } => { } ,
1655
- _ => panic ! ( "Unexpected event: {:?}" , event) ,
1675
+ let event_handler = move |event : Event | {
1676
+ match event {
1677
+ Event :: SpendableOutputs { .. } => sender. send ( event) . unwrap ( ) ,
1678
+ Event :: ChannelReady { .. } => { } ,
1679
+ Event :: ChannelClosed { .. } => { } ,
1680
+ _ => panic ! ( "Unexpected event: {:?}" , event) ,
1681
+ }
1682
+ Ok ( ( ) )
1656
1683
} ;
1657
1684
let persister = Arc :: new ( Persister :: new ( data_dir) ) ;
1658
1685
let bg_processor = BackgroundProcessor :: start ( persister, event_handler, nodes[ 0 ] . chain_monitor . clone ( ) , nodes[ 0 ] . node . clone ( ) , Some ( nodes[ 0 ] . messenger . clone ( ) ) , nodes[ 0 ] . no_gossip_sync ( ) , nodes[ 0 ] . peer_manager . clone ( ) , nodes[ 0 ] . logger . clone ( ) , Some ( nodes[ 0 ] . scorer . clone ( ) ) ) ;
@@ -1766,7 +1793,7 @@ mod tests {
1766
1793
let ( _, nodes) = create_nodes ( 2 , "test_scorer_persistence" ) ;
1767
1794
let data_dir = nodes[ 0 ] . kv_store . get_data_dir ( ) ;
1768
1795
let persister = Arc :: new ( Persister :: new ( data_dir) ) ;
1769
- let event_handler = |_: _ | { } ;
1796
+ let event_handler = |_: _ | { Ok ( ( ) ) } ;
1770
1797
let bg_processor = BackgroundProcessor :: start ( persister, event_handler, nodes[ 0 ] . chain_monitor . clone ( ) , nodes[ 0 ] . node . clone ( ) , Some ( nodes[ 0 ] . messenger . clone ( ) ) , nodes[ 0 ] . no_gossip_sync ( ) , nodes[ 0 ] . peer_manager . clone ( ) , nodes[ 0 ] . logger . clone ( ) , Some ( nodes[ 0 ] . scorer . clone ( ) ) ) ;
1771
1798
1772
1799
loop {
@@ -1839,7 +1866,7 @@ mod tests {
1839
1866
let data_dir = nodes[ 0 ] . kv_store . get_data_dir ( ) ;
1840
1867
let persister = Arc :: new ( Persister :: new ( data_dir) . with_graph_persistence_notifier ( sender) ) ;
1841
1868
1842
- let event_handler = |_: _ | { } ;
1869
+ let event_handler = |_: _ | { Ok ( ( ) ) } ;
1843
1870
let background_processor = BackgroundProcessor :: start ( persister, event_handler, nodes[ 0 ] . chain_monitor . clone ( ) , nodes[ 0 ] . node . clone ( ) , Some ( nodes[ 0 ] . messenger . clone ( ) ) , nodes[ 0 ] . rapid_gossip_sync ( ) , nodes[ 0 ] . peer_manager . clone ( ) , nodes[ 0 ] . logger . clone ( ) , Some ( nodes[ 0 ] . scorer . clone ( ) ) ) ;
1844
1871
1845
1872
do_test_not_pruning_network_graph_until_graph_sync_completion ! ( nodes,
@@ -1860,7 +1887,7 @@ mod tests {
1860
1887
1861
1888
let ( exit_sender, exit_receiver) = tokio:: sync:: watch:: channel ( ( ) ) ;
1862
1889
let bp_future = super :: process_events_async (
1863
- persister, |_: _ | { async { } } , nodes[ 0 ] . chain_monitor . clone ( ) , nodes[ 0 ] . node . clone ( ) , Some ( nodes[ 0 ] . messenger . clone ( ) ) ,
1890
+ persister, |_: _ | { async { Ok ( ( ) ) } } , nodes[ 0 ] . chain_monitor . clone ( ) , nodes[ 0 ] . node . clone ( ) , Some ( nodes[ 0 ] . messenger . clone ( ) ) ,
1864
1891
nodes[ 0 ] . rapid_gossip_sync ( ) , nodes[ 0 ] . peer_manager . clone ( ) , nodes[ 0 ] . logger . clone ( ) ,
1865
1892
Some ( nodes[ 0 ] . scorer . clone ( ) ) , move |dur : Duration | {
1866
1893
let mut exit_receiver = exit_receiver. clone ( ) ;
@@ -1987,12 +2014,15 @@ mod tests {
1987
2014
#[ test]
1988
2015
fn test_payment_path_scoring ( ) {
1989
2016
let ( sender, receiver) = std:: sync:: mpsc:: sync_channel ( 1 ) ;
1990
- let event_handler = move |event : Event | match event {
1991
- Event :: PaymentPathFailed { .. } => sender. send ( event) . unwrap ( ) ,
1992
- Event :: PaymentPathSuccessful { .. } => sender. send ( event) . unwrap ( ) ,
1993
- Event :: ProbeSuccessful { .. } => sender. send ( event) . unwrap ( ) ,
1994
- Event :: ProbeFailed { .. } => sender. send ( event) . unwrap ( ) ,
1995
- _ => panic ! ( "Unexpected event: {:?}" , event) ,
2017
+ let event_handler = move |event : Event | {
2018
+ match event {
2019
+ Event :: PaymentPathFailed { .. } => sender. send ( event) . unwrap ( ) ,
2020
+ Event :: PaymentPathSuccessful { .. } => sender. send ( event) . unwrap ( ) ,
2021
+ Event :: ProbeSuccessful { .. } => sender. send ( event) . unwrap ( ) ,
2022
+ Event :: ProbeFailed { .. } => sender. send ( event) . unwrap ( ) ,
2023
+ _ => panic ! ( "Unexpected event: {:?}" , event) ,
2024
+ }
2025
+ Ok ( ( ) )
1996
2026
} ;
1997
2027
1998
2028
let ( _, nodes) = create_nodes ( 1 , "test_payment_path_scoring" ) ;
@@ -2025,6 +2055,7 @@ mod tests {
2025
2055
Event :: ProbeFailed { .. } => { sender_ref. send ( event) . await . unwrap ( ) } ,
2026
2056
_ => panic ! ( "Unexpected event: {:?}" , event) ,
2027
2057
}
2058
+ Ok ( ( ) )
2028
2059
}
2029
2060
} ;
2030
2061
0 commit comments