@@ -43,6 +43,7 @@ use lightning::util::persist::{KVStore, Persister};
43
43
use lightning:: util:: sweep:: OutputSweeper ;
44
44
#[ cfg( feature = "std" ) ]
45
45
use lightning:: util:: sweep:: OutputSweeperSync ;
46
+ use lightning:: util:: wakers:: Sleep ;
46
47
#[ cfg( feature = "std" ) ]
47
48
use lightning:: util:: wakers:: Sleeper ;
48
49
use lightning_rapid_gossip_sync:: RapidGossipSync ;
@@ -981,7 +982,7 @@ impl BackgroundProcessor {
981
982
D : ' static + Deref ,
982
983
O : ' static + Deref ,
983
984
K : ' static + Deref ,
984
- OS : ' static + Deref < Target = OutputSweeperSync < T , D , F , CF , K , L , O > > + Send ,
985
+ OS : ' static + Deref < Target = OutputSweeper < T , D , F , CF , K , L , O > > + Send ,
985
986
> (
986
987
persister : PS , event_handler : EH , chain_monitor : M , channel_manager : CM ,
987
988
onion_messenger : Option < OM > , gossip_sync : GossipSync < PGS , RGS , G , UL , L > , peer_manager : PM ,
@@ -999,79 +1000,33 @@ impl BackgroundProcessor {
999
1000
OM :: Target : AOnionMessenger ,
1000
1001
PM :: Target : APeerManager ,
1001
1002
LM :: Target : ALiquidityManager ,
1002
- D :: Target : ChangeDestinationSourceSync ,
1003
+ D :: Target : ChangeDestinationSource ,
1003
1004
O :: Target : ' static + OutputSpender ,
1004
1005
K :: Target : ' static + KVStore ,
1005
1006
{
1006
1007
let stop_thread = Arc :: new ( AtomicBool :: new ( false ) ) ;
1007
1008
let stop_thread_clone = stop_thread. clone ( ) ;
1008
1009
let handle = thread:: spawn ( move || -> Result < ( ) , std:: io:: Error > {
1009
- let event_handler = |event| {
1010
- let network_graph = gossip_sync. network_graph ( ) ;
1011
- if let Some ( network_graph) = network_graph {
1012
- handle_network_graph_update ( network_graph, & event)
1013
- }
1014
- if let Some ( ref scorer) = scorer {
1015
- use std:: time:: SystemTime ;
1016
- let duration_since_epoch = SystemTime :: now ( )
1017
- . duration_since ( SystemTime :: UNIX_EPOCH )
1018
- . expect ( "Time should be sometime after 1970" ) ;
1019
- if update_scorer ( scorer, & event, duration_since_epoch) {
1020
- log_trace ! ( logger, "Persisting scorer after update" ) ;
1021
- if let Err ( e) = persister. persist_scorer ( & scorer) {
1022
- log_error ! ( logger, "Error: Failed to persist scorer, check your disk and permissions {}" , e)
1023
- }
1024
- }
1025
- }
1026
- event_handler. handle_event ( event)
1027
- } ;
1028
- define_run_body ! (
1010
+ let fut = process_events_async (
1029
1011
persister,
1012
+ |event| async { event_handler. handle_event ( event) } ,
1030
1013
chain_monitor,
1031
- chain_monitor. process_pending_events( & event_handler) ,
1032
1014
channel_manager,
1033
- channel_manager. get_cm( ) . process_pending_events( & event_handler) ,
1034
1015
onion_messenger,
1035
- if let Some ( om) = & onion_messenger {
1036
- om. get_om( ) . process_pending_events( & event_handler)
1037
- } ,
1038
- peer_manager,
1039
1016
gossip_sync,
1040
- {
1041
- if let Some ( ref sweeper) = sweeper {
1042
- let _ = sweeper. regenerate_and_broadcast_spend_if_necessary( ) ;
1043
- }
1044
- } ,
1017
+ peer_manager,
1018
+ liquidity_manager,
1019
+ sweeper,
1045
1020
logger,
1046
1021
scorer,
1047
- stop_thread. load( Ordering :: Acquire ) ,
1048
- {
1049
- let sleeper = match ( onion_messenger. as_ref( ) , liquidity_manager. as_ref( ) ) {
1050
- ( Some ( om) , Some ( lm) ) => Sleeper :: from_four_futures(
1051
- & channel_manager. get_cm( ) . get_event_or_persistence_needed_future( ) ,
1052
- & chain_monitor. get_update_future( ) ,
1053
- & om. get_om( ) . get_update_future( ) ,
1054
- & lm. get_lm( ) . get_pending_msgs_future( ) ,
1055
- ) ,
1056
- ( Some ( om) , None ) => Sleeper :: from_three_futures(
1057
- & channel_manager. get_cm( ) . get_event_or_persistence_needed_future( ) ,
1058
- & chain_monitor. get_update_future( ) ,
1059
- & om. get_om( ) . get_update_future( ) ,
1060
- ) ,
1061
- ( None , Some ( lm) ) => Sleeper :: from_three_futures(
1062
- & channel_manager. get_cm( ) . get_event_or_persistence_needed_future( ) ,
1063
- & chain_monitor. get_update_future( ) ,
1064
- & lm. get_lm( ) . get_pending_msgs_future( ) ,
1065
- ) ,
1066
- ( None , None ) => Sleeper :: from_two_futures(
1067
- & channel_manager. get_cm( ) . get_event_or_persistence_needed_future( ) ,
1068
- & chain_monitor. get_update_future( ) ,
1069
- ) ,
1070
- } ;
1071
- sleeper. wait_timeout( Duration :: from_millis( 100 ) ) ;
1022
+ move |dur : Duration | {
1023
+ let stop_thread_clone = stop_thread. clone ( ) ;
1024
+
1025
+ Box :: pin ( async move {
1026
+ Sleep :: new ( dur) . await ;
1027
+ stop_thread_clone. load ( Ordering :: Acquire )
1028
+ } )
1072
1029
} ,
1073
- |_| Instant :: now( ) ,
1074
- |time: & Instant , dur| time. elapsed( ) . as_secs( ) > dur,
1075
1030
false ,
1076
1031
|| {
1077
1032
use std:: time:: SystemTime ;
@@ -1081,7 +1036,10 @@ impl BackgroundProcessor {
1081
1036
. expect ( "Time should be sometime after 1970" ) ,
1082
1037
)
1083
1038
} ,
1084
- )
1039
+ ) ;
1040
+
1041
+ // TODO: Implement simple executor in utils.
1042
+ futures:: executor:: block_on ( fut) . map_err ( Into :: into)
1085
1043
} ) ;
1086
1044
Self { stop_thread : stop_thread_clone, thread_handle : Some ( handle) }
1087
1045
}
@@ -1925,7 +1883,7 @@ mod tests {
1925
1883
nodes[ 0 ] . p2p_gossip_sync ( ) ,
1926
1884
nodes[ 0 ] . peer_manager . clone ( ) ,
1927
1885
Some ( Arc :: clone ( & nodes[ 0 ] . liquidity_manager ) ) ,
1928
- Some ( nodes[ 0 ] . sweeper . clone ( ) ) ,
1886
+ Some ( nodes[ 0 ] . sweeper . sweeper_async ( ) . clone ( ) ) ,
1929
1887
nodes[ 0 ] . logger . clone ( ) ,
1930
1888
Some ( nodes[ 0 ] . scorer . clone ( ) ) ,
1931
1889
) ;
@@ -2020,7 +1978,7 @@ mod tests {
2020
1978
nodes[ 0 ] . no_gossip_sync ( ) ,
2021
1979
nodes[ 0 ] . peer_manager . clone ( ) ,
2022
1980
Some ( Arc :: clone ( & nodes[ 0 ] . liquidity_manager ) ) ,
2023
- Some ( nodes[ 0 ] . sweeper . clone ( ) ) ,
1981
+ Some ( nodes[ 0 ] . sweeper . sweeper_async ( ) . clone ( ) ) ,
2024
1982
nodes[ 0 ] . logger . clone ( ) ,
2025
1983
Some ( nodes[ 0 ] . scorer . clone ( ) ) ,
2026
1984
) ;
@@ -2064,7 +2022,7 @@ mod tests {
2064
2022
nodes[ 0 ] . no_gossip_sync ( ) ,
2065
2023
nodes[ 0 ] . peer_manager . clone ( ) ,
2066
2024
Some ( Arc :: clone ( & nodes[ 0 ] . liquidity_manager ) ) ,
2067
- Some ( nodes[ 0 ] . sweeper . clone ( ) ) ,
2025
+ Some ( nodes[ 0 ] . sweeper . sweeper_async ( ) . clone ( ) ) ,
2068
2026
nodes[ 0 ] . logger . clone ( ) ,
2069
2027
Some ( nodes[ 0 ] . scorer . clone ( ) ) ,
2070
2028
) ;
@@ -2135,7 +2093,7 @@ mod tests {
2135
2093
nodes[ 0 ] . p2p_gossip_sync ( ) ,
2136
2094
nodes[ 0 ] . peer_manager . clone ( ) ,
2137
2095
Some ( Arc :: clone ( & nodes[ 0 ] . liquidity_manager ) ) ,
2138
- Some ( nodes[ 0 ] . sweeper . clone ( ) ) ,
2096
+ Some ( nodes[ 0 ] . sweeper . sweeper_async ( ) . clone ( ) ) ,
2139
2097
nodes[ 0 ] . logger . clone ( ) ,
2140
2098
Some ( nodes[ 0 ] . scorer . clone ( ) ) ,
2141
2099
) ;
@@ -2166,7 +2124,7 @@ mod tests {
2166
2124
nodes[ 0 ] . no_gossip_sync ( ) ,
2167
2125
nodes[ 0 ] . peer_manager . clone ( ) ,
2168
2126
Some ( Arc :: clone ( & nodes[ 0 ] . liquidity_manager ) ) ,
2169
- Some ( nodes[ 0 ] . sweeper . clone ( ) ) ,
2127
+ Some ( nodes[ 0 ] . sweeper . sweeper_async ( ) . clone ( ) ) ,
2170
2128
nodes[ 0 ] . logger . clone ( ) ,
2171
2129
Some ( nodes[ 0 ] . scorer . clone ( ) ) ,
2172
2130
) ;
@@ -2214,7 +2172,7 @@ mod tests {
2214
2172
nodes[ 0 ] . no_gossip_sync ( ) ,
2215
2173
nodes[ 0 ] . peer_manager . clone ( ) ,
2216
2174
Some ( Arc :: clone ( & nodes[ 0 ] . liquidity_manager ) ) ,
2217
- Some ( nodes[ 0 ] . sweeper . clone ( ) ) ,
2175
+ Some ( nodes[ 0 ] . sweeper . sweeper_async ( ) . clone ( ) ) ,
2218
2176
nodes[ 0 ] . logger . clone ( ) ,
2219
2177
Some ( nodes[ 0 ] . scorer . clone ( ) ) ,
2220
2178
) ;
@@ -2278,7 +2236,7 @@ mod tests {
2278
2236
nodes[ 0 ] . no_gossip_sync ( ) ,
2279
2237
nodes[ 0 ] . peer_manager . clone ( ) ,
2280
2238
Some ( Arc :: clone ( & nodes[ 0 ] . liquidity_manager ) ) ,
2281
- Some ( nodes[ 0 ] . sweeper . clone ( ) ) ,
2239
+ Some ( nodes[ 0 ] . sweeper . sweeper_async ( ) . clone ( ) ) ,
2282
2240
nodes[ 0 ] . logger . clone ( ) ,
2283
2241
Some ( nodes[ 0 ] . scorer . clone ( ) ) ,
2284
2242
) ;
@@ -2443,7 +2401,7 @@ mod tests {
2443
2401
nodes[ 0 ] . no_gossip_sync ( ) ,
2444
2402
nodes[ 0 ] . peer_manager . clone ( ) ,
2445
2403
Some ( Arc :: clone ( & nodes[ 0 ] . liquidity_manager ) ) ,
2446
- Some ( nodes[ 0 ] . sweeper . clone ( ) ) ,
2404
+ Some ( nodes[ 0 ] . sweeper . sweeper_async ( ) . clone ( ) ) ,
2447
2405
nodes[ 0 ] . logger . clone ( ) ,
2448
2406
Some ( nodes[ 0 ] . scorer . clone ( ) ) ,
2449
2407
) ;
@@ -2474,7 +2432,7 @@ mod tests {
2474
2432
nodes[ 0 ] . no_gossip_sync ( ) ,
2475
2433
nodes[ 0 ] . peer_manager . clone ( ) ,
2476
2434
Some ( Arc :: clone ( & nodes[ 0 ] . liquidity_manager ) ) ,
2477
- Some ( nodes[ 0 ] . sweeper . clone ( ) ) ,
2435
+ Some ( nodes[ 0 ] . sweeper . sweeper_async ( ) . clone ( ) ) ,
2478
2436
nodes[ 0 ] . logger . clone ( ) ,
2479
2437
Some ( nodes[ 0 ] . scorer . clone ( ) ) ,
2480
2438
) ;
@@ -2571,7 +2529,7 @@ mod tests {
2571
2529
nodes[ 0 ] . rapid_gossip_sync ( ) ,
2572
2530
nodes[ 0 ] . peer_manager . clone ( ) ,
2573
2531
Some ( Arc :: clone ( & nodes[ 0 ] . liquidity_manager ) ) ,
2574
- Some ( nodes[ 0 ] . sweeper . clone ( ) ) ,
2532
+ Some ( nodes[ 0 ] . sweeper . sweeper_async ( ) . clone ( ) ) ,
2575
2533
nodes[ 0 ] . logger . clone ( ) ,
2576
2534
Some ( nodes[ 0 ] . scorer . clone ( ) ) ,
2577
2535
) ;
@@ -2768,7 +2726,7 @@ mod tests {
2768
2726
nodes[ 0 ] . no_gossip_sync ( ) ,
2769
2727
nodes[ 0 ] . peer_manager . clone ( ) ,
2770
2728
Some ( Arc :: clone ( & nodes[ 0 ] . liquidity_manager ) ) ,
2771
- Some ( nodes[ 0 ] . sweeper . clone ( ) ) ,
2729
+ Some ( nodes[ 0 ] . sweeper . sweeper_async ( ) . clone ( ) ) ,
2772
2730
nodes[ 0 ] . logger . clone ( ) ,
2773
2731
Some ( nodes[ 0 ] . scorer . clone ( ) ) ,
2774
2732
) ;
0 commit comments