@@ -39,8 +39,11 @@ use lightning::sign::ChangeDestinationSource;
39
39
use lightning:: sign:: ChangeDestinationSourceSync ;
40
40
use lightning:: sign:: EntropySource ;
41
41
use lightning:: sign:: OutputSpender ;
42
+ use lightning:: util:: async_poll:: FutureSpawner ;
42
43
use lightning:: util:: logger:: Logger ;
43
- use lightning:: util:: persist:: { KVStore , Persister } ;
44
+ use lightning:: util:: persist:: {
45
+ KVStore , KVStoreSync , KVStoreSyncWrapper , Persister , PersisterSync ,
46
+ } ;
44
47
use lightning:: util:: sweep:: OutputSweeper ;
45
48
#[ cfg( feature = "std" ) ]
46
49
use lightning:: util:: sweep:: OutputSweeperSync ;
@@ -311,6 +314,15 @@ fn update_scorer<'a, S: 'static + Deref<Target = SC> + Send + Sync, SC: 'a + Wri
311
314
true
312
315
}
313
316
317
+ macro_rules! maybe_await {
318
+ ( true , $e: expr) => {
319
+ $e. await
320
+ } ;
321
+ ( false , $e: expr) => {
322
+ $e
323
+ } ;
324
+ }
325
+
314
326
macro_rules! define_run_body {
315
327
(
316
328
$persister: ident, $chain_monitor: ident, $process_chain_monitor_events: expr,
@@ -319,7 +331,7 @@ macro_rules! define_run_body {
319
331
$peer_manager: ident, $gossip_sync: ident,
320
332
$process_sweeper: expr,
321
333
$logger: ident, $scorer: ident, $loop_exit_check: expr, $await: expr, $get_timer: expr,
322
- $timer_elapsed: expr, $check_slow_await: expr, $time_fetch: expr,
334
+ $timer_elapsed: expr, $check_slow_await: expr, $time_fetch: expr, $async : tt ,
323
335
) => { {
324
336
log_trace!( $logger, "Calling ChannelManager's timer_tick_occurred on startup" ) ;
325
337
$channel_manager. get_cm( ) . timer_tick_occurred( ) ;
@@ -375,7 +387,7 @@ macro_rules! define_run_body {
375
387
376
388
if $channel_manager. get_cm( ) . get_and_clear_needs_persistence( ) {
377
389
log_trace!( $logger, "Persisting ChannelManager..." ) ;
378
- $ persister. persist_manager( & $channel_manager) ?;
390
+ maybe_await! ( $async , $ persister. persist_manager( & $channel_manager) ) ?;
379
391
log_trace!( $logger, "Done persisting ChannelManager." ) ;
380
392
}
381
393
if $timer_elapsed( & mut last_freshness_call, FRESHNESS_TIMER ) {
@@ -436,7 +448,7 @@ macro_rules! define_run_body {
436
448
log_trace!( $logger, "Persisting network graph." ) ;
437
449
}
438
450
439
- if let Err ( e) = $ persister. persist_graph( network_graph) {
451
+ if let Err ( e) = maybe_await! ( $async , $ persister. persist_graph( network_graph) ) {
440
452
log_error!( $logger, "Error: Failed to persist network graph, check your disk and permissions {}" , e)
441
453
}
442
454
@@ -464,7 +476,7 @@ macro_rules! define_run_body {
464
476
} else {
465
477
log_trace!( $logger, "Persisting scorer" ) ;
466
478
}
467
- if let Err ( e) = $ persister. persist_scorer( & scorer) {
479
+ if let Err ( e) = maybe_await! ( $async , $ persister. persist_scorer( & scorer) ) {
468
480
log_error!( $logger, "Error: Failed to persist scorer, check your disk and permissions {}" , e)
469
481
}
470
482
}
@@ -487,16 +499,16 @@ macro_rules! define_run_body {
487
499
// After we exit, ensure we persist the ChannelManager one final time - this avoids
488
500
// some races where users quit while channel updates were in-flight, with
489
501
// ChannelMonitor update(s) persisted without a corresponding ChannelManager update.
490
- $ persister. persist_manager( & $channel_manager) ?;
502
+ maybe_await! ( $async , $ persister. persist_manager( & $channel_manager) ) ?;
491
503
492
504
// Persist Scorer on exit
493
505
if let Some ( ref scorer) = $scorer {
494
- $ persister. persist_scorer( & scorer) ?;
506
+ maybe_await! ( $async , $ persister. persist_scorer( & scorer) ) ?;
495
507
}
496
508
497
509
// Persist NetworkGraph on exit
498
510
if let Some ( network_graph) = $gossip_sync. network_graph( ) {
499
- $ persister. persist_graph( network_graph) ?;
511
+ maybe_await! ( $async , $ persister. persist_graph( network_graph) ) ?;
500
512
}
501
513
502
514
Ok ( ( ) )
@@ -782,8 +794,11 @@ pub async fn process_events_async<
782
794
EventHandler : Fn ( Event ) -> EventHandlerFuture ,
783
795
PS : ' static + Deref + Send ,
784
796
ES : ' static + Deref + Send ,
797
+ FS : FutureSpawner ,
785
798
M : ' static
786
- + Deref < Target = ChainMonitor < <CM :: Target as AChannelManager >:: Signer , CF , T , F , L , P , ES > >
799
+ + Deref <
800
+ Target = ChainMonitor < <CM :: Target as AChannelManager >:: Signer , CF , T , F , L , P , ES , FS > ,
801
+ >
787
802
+ Send
788
803
+ Sync ,
789
804
CM : ' static + Deref ,
@@ -841,7 +856,7 @@ where
841
856
if let Some ( duration_since_epoch) = fetch_time ( ) {
842
857
if update_scorer ( scorer, & event, duration_since_epoch) {
843
858
log_trace ! ( logger, "Persisting scorer after update" ) ;
844
- if let Err ( e) = persister. persist_scorer ( & * scorer) {
859
+ if let Err ( e) = persister. persist_scorer ( & * scorer) . await {
845
860
log_error ! ( logger, "Error: Failed to persist scorer, check your disk and permissions {}" , e) ;
846
861
// We opt not to abort early on persistence failure here as persisting
847
862
// the scorer is non-critical and we still hope that it will have
@@ -919,6 +934,7 @@ where
919
934
} ,
920
935
mobile_interruptable_platform,
921
936
fetch_time,
937
+ true ,
922
938
)
923
939
}
924
940
@@ -982,7 +998,16 @@ impl BackgroundProcessor {
982
998
ES : ' static + Deref + Send ,
983
999
M : ' static
984
1000
+ Deref <
985
- Target = ChainMonitor < <CM :: Target as AChannelManager >:: Signer , CF , T , F , L , P , ES > ,
1001
+ Target = ChainMonitor <
1002
+ <CM :: Target as AChannelManager >:: Signer ,
1003
+ CF ,
1004
+ T ,
1005
+ F ,
1006
+ L ,
1007
+ P ,
1008
+ ES ,
1009
+ FS ,
1010
+ > ,
986
1011
>
987
1012
+ Send
988
1013
+ Sync ,
@@ -998,6 +1023,7 @@ impl BackgroundProcessor {
998
1023
O : ' static + Deref ,
999
1024
K : ' static + Deref ,
1000
1025
OS : ' static + Deref < Target = OutputSweeperSync < T , D , F , CF , K , L , O > > + Send ,
1026
+ FS : FutureSpawner ,
1001
1027
> (
1002
1028
persister : PS , event_handler : EH , chain_monitor : M , channel_manager : CM ,
1003
1029
onion_messenger : Option < OM > , gossip_sync : GossipSync < PGS , RGS , G , UL , L > , peer_manager : PM ,
@@ -1010,15 +1036,15 @@ impl BackgroundProcessor {
1010
1036
F :: Target : ' static + FeeEstimator ,
1011
1037
L :: Target : ' static + Logger ,
1012
1038
P :: Target : ' static + Persist < <CM :: Target as AChannelManager >:: Signer > ,
1013
- PS :: Target : ' static + Persister < ' a , CM , L , S > ,
1039
+ PS :: Target : ' static + PersisterSync < ' a , CM , L , S > ,
1014
1040
ES :: Target : ' static + EntropySource ,
1015
1041
CM :: Target : AChannelManager ,
1016
1042
OM :: Target : AOnionMessenger ,
1017
1043
PM :: Target : APeerManager ,
1018
1044
LM :: Target : ALiquidityManager ,
1019
1045
D :: Target : ChangeDestinationSourceSync ,
1020
1046
O :: Target : ' static + OutputSpender ,
1021
- K :: Target : ' static + KVStore ,
1047
+ K :: Target : ' static + KVStoreSync ,
1022
1048
{
1023
1049
let stop_thread = Arc :: new ( AtomicBool :: new ( false ) ) ;
1024
1050
let stop_thread_clone = stop_thread. clone ( ) ;
@@ -1098,6 +1124,7 @@ impl BackgroundProcessor {
1098
1124
. expect( "Time should be sometime after 1970" ) ,
1099
1125
)
1100
1126
} ,
1127
+ false ,
1101
1128
)
1102
1129
} ) ;
1103
1130
Self { stop_thread : stop_thread_clone, thread_handle : Some ( handle) }
0 commit comments