@@ -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 ;
@@ -991,7 +992,7 @@ impl BackgroundProcessor {
991
992
D : ' static + Deref ,
992
993
O : ' static + Deref ,
993
994
K : ' static + Deref ,
994
- OS : ' static + Deref < Target = OutputSweeperSync < T , D , F , CF , K , L , O > > + Send ,
995
+ OS : ' static + Deref < Target = OutputSweeper < T , D , F , CF , K , L , O > > + Send ,
995
996
> (
996
997
persister : PS , event_handler : EH , chain_monitor : M , channel_manager : CM ,
997
998
onion_messenger : Option < OM > , gossip_sync : GossipSync < PGS , RGS , G , UL , L > , peer_manager : PM ,
@@ -1009,79 +1010,33 @@ impl BackgroundProcessor {
1009
1010
OM :: Target : AOnionMessenger ,
1010
1011
PM :: Target : APeerManager ,
1011
1012
LM :: Target : ALiquidityManager ,
1012
- D :: Target : ChangeDestinationSourceSync ,
1013
+ D :: Target : ChangeDestinationSource ,
1013
1014
O :: Target : ' static + OutputSpender ,
1014
1015
K :: Target : ' static + KVStore ,
1015
1016
{
1016
1017
let stop_thread = Arc :: new ( AtomicBool :: new ( false ) ) ;
1017
1018
let stop_thread_clone = stop_thread. clone ( ) ;
1018
1019
let handle = thread:: spawn ( move || -> Result < ( ) , std:: io:: Error > {
1019
- let event_handler = |event| {
1020
- let network_graph = gossip_sync. network_graph ( ) ;
1021
- if let Some ( network_graph) = network_graph {
1022
- handle_network_graph_update ( network_graph, & event)
1023
- }
1024
- if let Some ( ref scorer) = scorer {
1025
- use std:: time:: SystemTime ;
1026
- let duration_since_epoch = SystemTime :: now ( )
1027
- . duration_since ( SystemTime :: UNIX_EPOCH )
1028
- . expect ( "Time should be sometime after 1970" ) ;
1029
- if update_scorer ( scorer, & event, duration_since_epoch) {
1030
- log_trace ! ( logger, "Persisting scorer after update" ) ;
1031
- if let Err ( e) = persister. persist_scorer ( & scorer) {
1032
- log_error ! ( logger, "Error: Failed to persist scorer, check your disk and permissions {}" , e)
1033
- }
1034
- }
1035
- }
1036
- event_handler. handle_event ( event)
1037
- } ;
1038
- define_run_body ! (
1020
+ let fut = process_events_async (
1039
1021
persister,
1022
+ |event| async { event_handler. handle_event ( event) } ,
1040
1023
chain_monitor,
1041
- chain_monitor. process_pending_events( & event_handler) ,
1042
1024
channel_manager,
1043
- channel_manager. get_cm( ) . process_pending_events( & event_handler) ,
1044
1025
onion_messenger,
1045
- if let Some ( om) = & onion_messenger {
1046
- om. get_om( ) . process_pending_events( & event_handler)
1047
- } ,
1048
- peer_manager,
1049
1026
gossip_sync,
1050
- {
1051
- if let Some ( ref sweeper) = sweeper {
1052
- let _ = sweeper. regenerate_and_broadcast_spend_if_necessary( ) ;
1053
- }
1054
- } ,
1027
+ peer_manager,
1028
+ liquidity_manager,
1029
+ sweeper,
1055
1030
logger,
1056
1031
scorer,
1057
- stop_thread. load( Ordering :: Acquire ) ,
1058
- {
1059
- let sleeper = match ( onion_messenger. as_ref( ) , liquidity_manager. as_ref( ) ) {
1060
- ( Some ( om) , Some ( lm) ) => Sleeper :: from_four_futures(
1061
- & channel_manager. get_cm( ) . get_event_or_persistence_needed_future( ) ,
1062
- & chain_monitor. get_update_future( ) ,
1063
- & om. get_om( ) . get_update_future( ) ,
1064
- & lm. get_lm( ) . get_pending_msgs_future( ) ,
1065
- ) ,
1066
- ( Some ( om) , None ) => Sleeper :: from_three_futures(
1067
- & channel_manager. get_cm( ) . get_event_or_persistence_needed_future( ) ,
1068
- & chain_monitor. get_update_future( ) ,
1069
- & om. get_om( ) . get_update_future( ) ,
1070
- ) ,
1071
- ( None , Some ( lm) ) => Sleeper :: from_three_futures(
1072
- & channel_manager. get_cm( ) . get_event_or_persistence_needed_future( ) ,
1073
- & chain_monitor. get_update_future( ) ,
1074
- & lm. get_lm( ) . get_pending_msgs_future( ) ,
1075
- ) ,
1076
- ( None , None ) => Sleeper :: from_two_futures(
1077
- & channel_manager. get_cm( ) . get_event_or_persistence_needed_future( ) ,
1078
- & chain_monitor. get_update_future( ) ,
1079
- ) ,
1080
- } ;
1081
- sleeper. wait_timeout( Duration :: from_millis( 100 ) ) ;
1032
+ move |dur : Duration | {
1033
+ let stop_thread_clone = stop_thread. clone ( ) ;
1034
+
1035
+ Box :: pin ( async move {
1036
+ Sleep :: new ( dur) . await ;
1037
+ stop_thread_clone. load ( Ordering :: Acquire )
1038
+ } )
1082
1039
} ,
1083
- |_| Instant :: now( ) ,
1084
- |time: & Instant , dur| time. elapsed( ) . as_secs( ) > dur,
1085
1040
false ,
1086
1041
|| {
1087
1042
use std:: time:: SystemTime ;
@@ -1091,7 +1046,10 @@ impl BackgroundProcessor {
1091
1046
. expect ( "Time should be sometime after 1970" ) ,
1092
1047
)
1093
1048
} ,
1094
- )
1049
+ ) ;
1050
+
1051
+ // TODO: Implement simple executor in utils.
1052
+ futures:: executor:: block_on ( fut) . map_err ( Into :: into)
1095
1053
} ) ;
1096
1054
Self { stop_thread : stop_thread_clone, thread_handle : Some ( handle) }
1097
1055
}
@@ -1935,7 +1893,7 @@ mod tests {
1935
1893
nodes[ 0 ] . p2p_gossip_sync ( ) ,
1936
1894
nodes[ 0 ] . peer_manager . clone ( ) ,
1937
1895
Some ( Arc :: clone ( & nodes[ 0 ] . liquidity_manager ) ) ,
1938
- Some ( nodes[ 0 ] . sweeper . clone ( ) ) ,
1896
+ Some ( nodes[ 0 ] . sweeper . sweeper_async ( ) . clone ( ) ) ,
1939
1897
nodes[ 0 ] . logger . clone ( ) ,
1940
1898
Some ( nodes[ 0 ] . scorer . clone ( ) ) ,
1941
1899
) ;
@@ -2030,7 +1988,7 @@ mod tests {
2030
1988
nodes[ 0 ] . no_gossip_sync ( ) ,
2031
1989
nodes[ 0 ] . peer_manager . clone ( ) ,
2032
1990
Some ( Arc :: clone ( & nodes[ 0 ] . liquidity_manager ) ) ,
2033
- Some ( nodes[ 0 ] . sweeper . clone ( ) ) ,
1991
+ Some ( nodes[ 0 ] . sweeper . sweeper_async ( ) . clone ( ) ) ,
2034
1992
nodes[ 0 ] . logger . clone ( ) ,
2035
1993
Some ( nodes[ 0 ] . scorer . clone ( ) ) ,
2036
1994
) ;
@@ -2074,7 +2032,7 @@ mod tests {
2074
2032
nodes[ 0 ] . no_gossip_sync ( ) ,
2075
2033
nodes[ 0 ] . peer_manager . clone ( ) ,
2076
2034
Some ( Arc :: clone ( & nodes[ 0 ] . liquidity_manager ) ) ,
2077
- Some ( nodes[ 0 ] . sweeper . clone ( ) ) ,
2035
+ Some ( nodes[ 0 ] . sweeper . sweeper_async ( ) . clone ( ) ) ,
2078
2036
nodes[ 0 ] . logger . clone ( ) ,
2079
2037
Some ( nodes[ 0 ] . scorer . clone ( ) ) ,
2080
2038
) ;
@@ -2145,7 +2103,7 @@ mod tests {
2145
2103
nodes[ 0 ] . p2p_gossip_sync ( ) ,
2146
2104
nodes[ 0 ] . peer_manager . clone ( ) ,
2147
2105
Some ( Arc :: clone ( & nodes[ 0 ] . liquidity_manager ) ) ,
2148
- Some ( nodes[ 0 ] . sweeper . clone ( ) ) ,
2106
+ Some ( nodes[ 0 ] . sweeper . sweeper_async ( ) . clone ( ) ) ,
2149
2107
nodes[ 0 ] . logger . clone ( ) ,
2150
2108
Some ( nodes[ 0 ] . scorer . clone ( ) ) ,
2151
2109
) ;
@@ -2176,7 +2134,7 @@ mod tests {
2176
2134
nodes[ 0 ] . no_gossip_sync ( ) ,
2177
2135
nodes[ 0 ] . peer_manager . clone ( ) ,
2178
2136
Some ( Arc :: clone ( & nodes[ 0 ] . liquidity_manager ) ) ,
2179
- Some ( nodes[ 0 ] . sweeper . clone ( ) ) ,
2137
+ Some ( nodes[ 0 ] . sweeper . sweeper_async ( ) . clone ( ) ) ,
2180
2138
nodes[ 0 ] . logger . clone ( ) ,
2181
2139
Some ( nodes[ 0 ] . scorer . clone ( ) ) ,
2182
2140
) ;
@@ -2224,7 +2182,7 @@ mod tests {
2224
2182
nodes[ 0 ] . no_gossip_sync ( ) ,
2225
2183
nodes[ 0 ] . peer_manager . clone ( ) ,
2226
2184
Some ( Arc :: clone ( & nodes[ 0 ] . liquidity_manager ) ) ,
2227
- Some ( nodes[ 0 ] . sweeper . clone ( ) ) ,
2185
+ Some ( nodes[ 0 ] . sweeper . sweeper_async ( ) . clone ( ) ) ,
2228
2186
nodes[ 0 ] . logger . clone ( ) ,
2229
2187
Some ( nodes[ 0 ] . scorer . clone ( ) ) ,
2230
2188
) ;
@@ -2288,7 +2246,7 @@ mod tests {
2288
2246
nodes[ 0 ] . no_gossip_sync ( ) ,
2289
2247
nodes[ 0 ] . peer_manager . clone ( ) ,
2290
2248
Some ( Arc :: clone ( & nodes[ 0 ] . liquidity_manager ) ) ,
2291
- Some ( nodes[ 0 ] . sweeper . clone ( ) ) ,
2249
+ Some ( nodes[ 0 ] . sweeper . sweeper_async ( ) . clone ( ) ) ,
2292
2250
nodes[ 0 ] . logger . clone ( ) ,
2293
2251
Some ( nodes[ 0 ] . scorer . clone ( ) ) ,
2294
2252
) ;
@@ -2453,7 +2411,7 @@ mod tests {
2453
2411
nodes[ 0 ] . no_gossip_sync ( ) ,
2454
2412
nodes[ 0 ] . peer_manager . clone ( ) ,
2455
2413
Some ( Arc :: clone ( & nodes[ 0 ] . liquidity_manager ) ) ,
2456
- Some ( nodes[ 0 ] . sweeper . clone ( ) ) ,
2414
+ Some ( nodes[ 0 ] . sweeper . sweeper_async ( ) . clone ( ) ) ,
2457
2415
nodes[ 0 ] . logger . clone ( ) ,
2458
2416
Some ( nodes[ 0 ] . scorer . clone ( ) ) ,
2459
2417
) ;
@@ -2484,7 +2442,7 @@ mod tests {
2484
2442
nodes[ 0 ] . no_gossip_sync ( ) ,
2485
2443
nodes[ 0 ] . peer_manager . clone ( ) ,
2486
2444
Some ( Arc :: clone ( & nodes[ 0 ] . liquidity_manager ) ) ,
2487
- Some ( nodes[ 0 ] . sweeper . clone ( ) ) ,
2445
+ Some ( nodes[ 0 ] . sweeper . sweeper_async ( ) . clone ( ) ) ,
2488
2446
nodes[ 0 ] . logger . clone ( ) ,
2489
2447
Some ( nodes[ 0 ] . scorer . clone ( ) ) ,
2490
2448
) ;
@@ -2581,7 +2539,7 @@ mod tests {
2581
2539
nodes[ 0 ] . rapid_gossip_sync ( ) ,
2582
2540
nodes[ 0 ] . peer_manager . clone ( ) ,
2583
2541
Some ( Arc :: clone ( & nodes[ 0 ] . liquidity_manager ) ) ,
2584
- Some ( nodes[ 0 ] . sweeper . clone ( ) ) ,
2542
+ Some ( nodes[ 0 ] . sweeper . sweeper_async ( ) . clone ( ) ) ,
2585
2543
nodes[ 0 ] . logger . clone ( ) ,
2586
2544
Some ( nodes[ 0 ] . scorer . clone ( ) ) ,
2587
2545
) ;
@@ -2778,7 +2736,7 @@ mod tests {
2778
2736
nodes[ 0 ] . no_gossip_sync ( ) ,
2779
2737
nodes[ 0 ] . peer_manager . clone ( ) ,
2780
2738
Some ( Arc :: clone ( & nodes[ 0 ] . liquidity_manager ) ) ,
2781
- Some ( nodes[ 0 ] . sweeper . clone ( ) ) ,
2739
+ Some ( nodes[ 0 ] . sweeper . sweeper_async ( ) . clone ( ) ) ,
2782
2740
nodes[ 0 ] . logger . clone ( ) ,
2783
2741
Some ( nodes[ 0 ] . scorer . clone ( ) ) ,
2784
2742
) ;
0 commit comments