@@ -17,6 +17,7 @@ extern crate alloc;
17
17
extern crate lightning;
18
18
extern crate lightning_rapid_gossip_sync;
19
19
20
+ use crate :: lightning:: util:: ser:: Writeable ;
20
21
use lightning:: chain;
21
22
use lightning:: chain:: chaininterface:: { BroadcasterInterface , FeeEstimator } ;
22
23
use lightning:: chain:: chainmonitor:: { ChainMonitor , Persist } ;
@@ -40,7 +41,13 @@ use lightning::sign::ChangeDestinationSourceSync;
40
41
use lightning:: sign:: EntropySource ;
41
42
use lightning:: sign:: OutputSpender ;
42
43
use lightning:: util:: logger:: Logger ;
43
- use lightning:: util:: persist:: { KVStore , Persister } ;
44
+ use lightning:: util:: persist:: {
45
+ KVStore , CHANNEL_MANAGER_PERSISTENCE_KEY , CHANNEL_MANAGER_PERSISTENCE_PRIMARY_NAMESPACE ,
46
+ CHANNEL_MANAGER_PERSISTENCE_SECONDARY_NAMESPACE , NETWORK_GRAPH_PERSISTENCE_KEY ,
47
+ NETWORK_GRAPH_PERSISTENCE_PRIMARY_NAMESPACE , NETWORK_GRAPH_PERSISTENCE_SECONDARY_NAMESPACE ,
48
+ SCORER_PERSISTENCE_KEY , SCORER_PERSISTENCE_PRIMARY_NAMESPACE ,
49
+ SCORER_PERSISTENCE_SECONDARY_NAMESPACE ,
50
+ } ;
44
51
use lightning:: util:: sweep:: OutputSweeper ;
45
52
#[ cfg( feature = "std" ) ]
46
53
use lightning:: util:: sweep:: OutputSweeperSync ;
@@ -313,7 +320,8 @@ fn update_scorer<'a, S: 'static + Deref<Target = SC> + Send + Sync, SC: 'a + Wri
313
320
314
321
macro_rules! define_run_body {
315
322
(
316
- $persister: ident, $chain_monitor: ident, $process_chain_monitor_events: expr,
323
+ $kv_store: ident,
324
+ $chain_monitor: ident, $process_chain_monitor_events: expr,
317
325
$channel_manager: ident, $process_channel_manager_events: expr,
318
326
$onion_messenger: ident, $process_onion_message_handler_events: expr,
319
327
$peer_manager: ident, $gossip_sync: ident,
@@ -375,7 +383,12 @@ macro_rules! define_run_body {
375
383
376
384
if $channel_manager. get_cm( ) . get_and_clear_needs_persistence( ) {
377
385
log_trace!( $logger, "Persisting ChannelManager..." ) ;
378
- $persister. persist_manager( & $channel_manager) ?;
386
+ $kv_store. write(
387
+ CHANNEL_MANAGER_PERSISTENCE_PRIMARY_NAMESPACE ,
388
+ CHANNEL_MANAGER_PERSISTENCE_SECONDARY_NAMESPACE ,
389
+ CHANNEL_MANAGER_PERSISTENCE_KEY ,
390
+ & $channel_manager. get_cm( ) . encode( ) ,
391
+ ) ?;
379
392
log_trace!( $logger, "Done persisting ChannelManager." ) ;
380
393
}
381
394
if $timer_elapsed( & mut last_freshness_call, FRESHNESS_TIMER ) {
@@ -436,7 +449,12 @@ macro_rules! define_run_body {
436
449
log_trace!( $logger, "Persisting network graph." ) ;
437
450
}
438
451
439
- if let Err ( e) = $persister. persist_graph( network_graph) {
452
+ if let Err ( e) = $kv_store. write(
453
+ NETWORK_GRAPH_PERSISTENCE_PRIMARY_NAMESPACE ,
454
+ NETWORK_GRAPH_PERSISTENCE_SECONDARY_NAMESPACE ,
455
+ NETWORK_GRAPH_PERSISTENCE_KEY ,
456
+ & network_graph. encode( ) ,
457
+ ) {
440
458
log_error!( $logger, "Error: Failed to persist network graph, check your disk and permissions {}" , e)
441
459
}
442
460
@@ -464,7 +482,12 @@ macro_rules! define_run_body {
464
482
} else {
465
483
log_trace!( $logger, "Persisting scorer" ) ;
466
484
}
467
- if let Err ( e) = $persister. persist_scorer( & scorer) {
485
+ if let Err ( e) = $kv_store. write(
486
+ SCORER_PERSISTENCE_PRIMARY_NAMESPACE ,
487
+ SCORER_PERSISTENCE_SECONDARY_NAMESPACE ,
488
+ SCORER_PERSISTENCE_KEY ,
489
+ & scorer. encode( ) ,
490
+ ) {
468
491
log_error!( $logger, "Error: Failed to persist scorer, check your disk and permissions {}" , e)
469
492
}
470
493
}
@@ -487,16 +510,31 @@ macro_rules! define_run_body {
487
510
// After we exit, ensure we persist the ChannelManager one final time - this avoids
488
511
// some races where users quit while channel updates were in-flight, with
489
512
// ChannelMonitor update(s) persisted without a corresponding ChannelManager update.
490
- $persister. persist_manager( & $channel_manager) ?;
513
+ $kv_store. write(
514
+ CHANNEL_MANAGER_PERSISTENCE_PRIMARY_NAMESPACE ,
515
+ CHANNEL_MANAGER_PERSISTENCE_SECONDARY_NAMESPACE ,
516
+ CHANNEL_MANAGER_PERSISTENCE_KEY ,
517
+ & $channel_manager. get_cm( ) . encode( ) ,
518
+ ) ?;
491
519
492
520
// Persist Scorer on exit
493
521
if let Some ( ref scorer) = $scorer {
494
- $persister. persist_scorer( & scorer) ?;
522
+ $kv_store. write(
523
+ SCORER_PERSISTENCE_PRIMARY_NAMESPACE ,
524
+ SCORER_PERSISTENCE_SECONDARY_NAMESPACE ,
525
+ SCORER_PERSISTENCE_KEY ,
526
+ & scorer. encode( ) ,
527
+ ) ?;
495
528
}
496
529
497
530
// Persist NetworkGraph on exit
498
531
if let Some ( network_graph) = $gossip_sync. network_graph( ) {
499
- $persister. persist_graph( network_graph) ?;
532
+ $kv_store. write(
533
+ NETWORK_GRAPH_PERSISTENCE_PRIMARY_NAMESPACE ,
534
+ NETWORK_GRAPH_PERSISTENCE_SECONDARY_NAMESPACE ,
535
+ NETWORK_GRAPH_PERSISTENCE_KEY ,
536
+ & network_graph. encode( ) ,
537
+ ) ?;
500
538
}
501
539
502
540
Ok ( ( ) )
@@ -684,7 +722,6 @@ use futures_util::{dummy_waker, OptionalSelector, Selector, SelectorOutput};
684
722
/// # FE: lightning::chain::chaininterface::FeeEstimator + Send + Sync + 'static,
685
723
/// # UL: lightning::routing::utxo::UtxoLookup + Send + Sync + 'static,
686
724
/// # D: lightning::sign::ChangeDestinationSource + Send + Sync + 'static,
687
- /// # K: lightning::util::persist::KVStore + Send + Sync + 'static,
688
725
/// # O: lightning::sign::OutputSpender + Send + Sync + 'static,
689
726
/// # > {
690
727
/// # peer_manager: Arc<PeerManager<B, F, FE, UL>>,
@@ -697,7 +734,7 @@ use futures_util::{dummy_waker, OptionalSelector, Selector, SelectorOutput};
697
734
/// # persister: Arc<Store>,
698
735
/// # logger: Arc<Logger>,
699
736
/// # scorer: Arc<Scorer>,
700
- /// # sweeper: Arc<OutputSweeper<Arc<B>, Arc<D>, Arc<FE>, Arc<F>, Arc<K >, Arc<Logger>, Arc<O>>>,
737
+ /// # sweeper: Arc<OutputSweeper<Arc<B>, Arc<D>, Arc<FE>, Arc<F>, Arc<Store >, Arc<Logger>, Arc<O>>>,
701
738
/// # }
702
739
/// #
703
740
/// # async fn setup_background_processing<
@@ -706,9 +743,8 @@ use futures_util::{dummy_waker, OptionalSelector, Selector, SelectorOutput};
706
743
/// # FE: lightning::chain::chaininterface::FeeEstimator + Send + Sync + 'static,
707
744
/// # UL: lightning::routing::utxo::UtxoLookup + Send + Sync + 'static,
708
745
/// # D: lightning::sign::ChangeDestinationSource + Send + Sync + 'static,
709
- /// # K: lightning::util::persist::KVStore + Send + Sync + 'static,
710
746
/// # O: lightning::sign::OutputSpender + Send + Sync + 'static,
711
- /// # >(node: Node<B, F, FE, UL, D, K, O>) {
747
+ /// # >(node: Node<B, F, FE, UL, D, O>) {
712
748
/// let background_persister = Arc::clone(&node.persister);
713
749
/// let background_event_handler = Arc::clone(&node.event_handler);
714
750
/// let background_chain_mon = Arc::clone(&node.chain_monitor);
@@ -780,7 +816,6 @@ pub async fn process_events_async<
780
816
P : ' static + Deref ,
781
817
EventHandlerFuture : core:: future:: Future < Output = Result < ( ) , ReplayEvent > > ,
782
818
EventHandler : Fn ( Event ) -> EventHandlerFuture ,
783
- PS : ' static + Deref + Send ,
784
819
ES : ' static + Deref + Send ,
785
820
M : ' static
786
821
+ Deref < Target = ChainMonitor < <CM :: Target as AChannelManager >:: Signer , CF , T , F , L , P , ES > >
@@ -802,7 +837,7 @@ pub async fn process_events_async<
802
837
Sleeper : Fn ( Duration ) -> SleepFuture ,
803
838
FetchTime : Fn ( ) -> Option < Duration > ,
804
839
> (
805
- persister : PS , event_handler : EventHandler , chain_monitor : M , channel_manager : CM ,
840
+ kv_store : K , event_handler : EventHandler , chain_monitor : M , channel_manager : CM ,
806
841
onion_messenger : Option < OM > , gossip_sync : GossipSync < PGS , RGS , G , UL , L > , peer_manager : PM ,
807
842
liquidity_manager : Option < LM > , sweeper : Option < OS > , logger : L , scorer : Option < S > ,
808
843
sleeper : Sleeper , mobile_interruptable_platform : bool , fetch_time : FetchTime ,
@@ -814,7 +849,6 @@ where
814
849
F :: Target : ' static + FeeEstimator ,
815
850
L :: Target : ' static + Logger ,
816
851
P :: Target : ' static + Persist < <CM :: Target as AChannelManager >:: Signer > ,
817
- PS :: Target : ' static + Persister < ' a , CM , L , S > ,
818
852
ES :: Target : ' static + EntropySource ,
819
853
CM :: Target : AChannelManager ,
820
854
OM :: Target : AOnionMessenger ,
@@ -830,7 +864,7 @@ where
830
864
let event_handler = & event_handler;
831
865
let scorer = & scorer;
832
866
let logger = & logger;
833
- let persister = & persister ;
867
+ let kv_store = & kv_store ;
834
868
let fetch_time = & fetch_time;
835
869
// We should be able to drop the Box once our MSRV is 1.68
836
870
Box :: pin ( async move {
@@ -841,7 +875,12 @@ where
841
875
if let Some ( duration_since_epoch) = fetch_time ( ) {
842
876
if update_scorer ( scorer, & event, duration_since_epoch) {
843
877
log_trace ! ( logger, "Persisting scorer after update" ) ;
844
- if let Err ( e) = persister. persist_scorer ( & * scorer) {
878
+ if let Err ( e) = kv_store. write (
879
+ SCORER_PERSISTENCE_PRIMARY_NAMESPACE ,
880
+ SCORER_PERSISTENCE_SECONDARY_NAMESPACE ,
881
+ SCORER_PERSISTENCE_KEY ,
882
+ & scorer. encode ( ) ,
883
+ ) {
845
884
log_error ! ( logger, "Error: Failed to persist scorer, check your disk and permissions {}" , e) ;
846
885
// We opt not to abort early on persistence failure here as persisting
847
886
// the scorer is non-critical and we still hope that it will have
@@ -855,7 +894,7 @@ where
855
894
} )
856
895
} ;
857
896
define_run_body ! (
858
- persister ,
897
+ kv_store ,
859
898
chain_monitor,
860
899
chain_monitor. process_pending_events_async( async_event_handler) . await ,
861
900
channel_manager,
@@ -928,21 +967,21 @@ impl BackgroundProcessor {
928
967
/// documentation].
929
968
///
930
969
/// The thread runs indefinitely unless the object is dropped, [`stop`] is called, or
931
- /// [`Persister::persist_manager `] returns an error. In case of an error, the error is retrieved by calling
970
+ /// [`KVStore `] returns an error. In case of an error, the error is retrieved by calling
932
971
/// either [`join`] or [`stop`].
933
972
///
934
973
/// # Data Persistence
935
974
///
936
- /// [`Persister::persist_manager `] is responsible for writing out the [`ChannelManager`] to disk, and/or
975
+ /// [`KVStore `] is responsible for writing out the [`ChannelManager`] to disk, and/or
937
976
/// uploading to one or more backup services. See [`ChannelManager::write`] for writing out a
938
977
/// [`ChannelManager`]. See the `lightning-persister` crate for LDK's
939
978
/// provided implementation.
940
979
///
941
- /// [`Persister::persist_graph `] is responsible for writing out the [`NetworkGraph`] to disk, if
980
+ /// [`KVStore `] is also responsible for writing out the [`NetworkGraph`] to disk, if
942
981
/// [`GossipSync`] is supplied. See [`NetworkGraph::write`] for writing out a [`NetworkGraph`].
943
982
/// See the `lightning-persister` crate for LDK's provided implementation.
944
983
///
945
- /// Typically, users should either implement [`Persister::persist_manager `] to never return an
984
+ /// Typically, users should either implement [`KVStore `] to never return an
946
985
/// error or call [`join`] and handle any error that may arise. For the latter case,
947
986
/// `BackgroundProcessor` must be restarted by calling `start` again after handling the error.
948
987
///
@@ -964,8 +1003,6 @@ impl BackgroundProcessor {
964
1003
/// [`stop`]: Self::stop
965
1004
/// [`ChannelManager`]: lightning::ln::channelmanager::ChannelManager
966
1005
/// [`ChannelManager::write`]: lightning::ln::channelmanager::ChannelManager#impl-Writeable
967
- /// [`Persister::persist_manager`]: lightning::util::persist::Persister::persist_manager
968
- /// [`Persister::persist_graph`]: lightning::util::persist::Persister::persist_graph
969
1006
/// [`NetworkGraph`]: lightning::routing::gossip::NetworkGraph
970
1007
/// [`NetworkGraph::write`]: lightning::routing::gossip::NetworkGraph#impl-Writeable
971
1008
pub fn start <
@@ -978,7 +1015,6 @@ impl BackgroundProcessor {
978
1015
L : ' static + Deref + Send ,
979
1016
P : ' static + Deref ,
980
1017
EH : ' static + EventHandler + Send ,
981
- PS : ' static + Deref + Send ,
982
1018
ES : ' static + Deref + Send ,
983
1019
M : ' static
984
1020
+ Deref <
@@ -996,10 +1032,10 @@ impl BackgroundProcessor {
996
1032
SC : for < ' b > WriteableScore < ' b > ,
997
1033
D : ' static + Deref ,
998
1034
O : ' static + Deref ,
999
- K : ' static + Deref ,
1035
+ K : ' static + Deref + Send ,
1000
1036
OS : ' static + Deref < Target = OutputSweeperSync < T , D , F , CF , K , L , O > > + Send ,
1001
1037
> (
1002
- persister : PS , event_handler : EH , chain_monitor : M , channel_manager : CM ,
1038
+ kv_store : K , event_handler : EH , chain_monitor : M , channel_manager : CM ,
1003
1039
onion_messenger : Option < OM > , gossip_sync : GossipSync < PGS , RGS , G , UL , L > , peer_manager : PM ,
1004
1040
liquidity_manager : Option < LM > , sweeper : Option < OS > , logger : L , scorer : Option < S > ,
1005
1041
) -> Self
@@ -1010,7 +1046,6 @@ impl BackgroundProcessor {
1010
1046
F :: Target : ' static + FeeEstimator ,
1011
1047
L :: Target : ' static + Logger ,
1012
1048
P :: Target : ' static + Persist < <CM :: Target as AChannelManager >:: Signer > ,
1013
- PS :: Target : ' static + Persister < ' a , CM , L , S > ,
1014
1049
ES :: Target : ' static + EntropySource ,
1015
1050
CM :: Target : AChannelManager ,
1016
1051
OM :: Target : AOnionMessenger ,
@@ -1035,15 +1070,20 @@ impl BackgroundProcessor {
1035
1070
. expect ( "Time should be sometime after 1970" ) ;
1036
1071
if update_scorer ( scorer, & event, duration_since_epoch) {
1037
1072
log_trace ! ( logger, "Persisting scorer after update" ) ;
1038
- if let Err ( e) = persister. persist_scorer ( & scorer) {
1073
+ if let Err ( e) = kv_store. write (
1074
+ SCORER_PERSISTENCE_PRIMARY_NAMESPACE ,
1075
+ SCORER_PERSISTENCE_SECONDARY_NAMESPACE ,
1076
+ SCORER_PERSISTENCE_KEY ,
1077
+ & scorer. encode ( ) ,
1078
+ ) {
1039
1079
log_error ! ( logger, "Error: Failed to persist scorer, check your disk and permissions {}" , e)
1040
1080
}
1041
1081
}
1042
1082
}
1043
1083
event_handler. handle_event ( event)
1044
1084
} ;
1045
1085
define_run_body ! (
1046
- persister ,
1086
+ kv_store ,
1047
1087
chain_monitor,
1048
1088
chain_monitor. process_pending_events( & event_handler) ,
1049
1089
channel_manager,
@@ -1256,7 +1296,7 @@ mod tests {
1256
1296
Arc < test_utils:: TestBroadcaster > ,
1257
1297
Arc < test_utils:: TestFeeEstimator > ,
1258
1298
Arc < test_utils:: TestLogger > ,
1259
- Arc < FilesystemStore > ,
1299
+ Arc < Persister > ,
1260
1300
Arc < KeysManager > ,
1261
1301
> ;
1262
1302
@@ -1314,7 +1354,7 @@ mod tests {
1314
1354
> ,
1315
1355
liquidity_manager : Arc < LM > ,
1316
1356
chain_monitor : Arc < ChainMonitor > ,
1317
- kv_store : Arc < FilesystemStore > ,
1357
+ kv_store : Arc < Persister > ,
1318
1358
tx_broadcaster : Arc < test_utils:: TestBroadcaster > ,
1319
1359
network_graph : Arc < NetworkGraph < Arc < test_utils:: TestLogger > > > ,
1320
1360
logger : Arc < test_utils:: TestLogger > ,
@@ -1326,7 +1366,7 @@ mod tests {
1326
1366
Arc < TestWallet > ,
1327
1367
Arc < test_utils:: TestFeeEstimator > ,
1328
1368
Arc < test_utils:: TestChainSource > ,
1329
- Arc < FilesystemStore > ,
1369
+ Arc < Persister > ,
1330
1370
Arc < test_utils:: TestLogger > ,
1331
1371
Arc < KeysManager > ,
1332
1372
> ,
@@ -1418,6 +1458,10 @@ mod tests {
1418
1458
fn with_scorer_error ( self , error : std:: io:: ErrorKind , message : & ' static str ) -> Self {
1419
1459
Self { scorer_error : Some ( ( error, message) ) , ..self }
1420
1460
}
1461
+
1462
+ pub fn get_data_dir ( & self ) -> PathBuf {
1463
+ self . kv_store . get_data_dir ( )
1464
+ }
1421
1465
}
1422
1466
1423
1467
impl KVStore for Persister {
@@ -1662,7 +1706,7 @@ mod tests {
1662
1706
) ) ;
1663
1707
let chain_source = Arc :: new ( test_utils:: TestChainSource :: new ( Network :: Bitcoin ) ) ;
1664
1708
let kv_store =
1665
- Arc :: new ( FilesystemStore :: new ( format ! ( "{}_persister_{}" , & persist_dir, i) . into ( ) ) ) ;
1709
+ Arc :: new ( Persister :: new ( format ! ( "{}_persister_{}" , & persist_dir, i) . into ( ) ) ) ;
1666
1710
let now = Duration :: from_secs ( genesis_block. header . time as u64 ) ;
1667
1711
let keys_manager = Arc :: new ( KeysManager :: new ( & seed, now. as_secs ( ) , now. subsec_nanos ( ) ) ) ;
1668
1712
let chain_monitor = Arc :: new ( chainmonitor:: ChainMonitor :: new (
0 commit comments