@@ -30,6 +30,7 @@ mod fwd_batch;
3030
3131use fwd_batch:: BatchDelay ;
3232
33+ use crate :: lightning:: util:: ser:: Writeable ;
3334use lightning:: chain;
3435use lightning:: chain:: chaininterface:: { BroadcasterInterface , FeeEstimator } ;
3536use lightning:: chain:: chainmonitor:: { ChainMonitor , Persist } ;
@@ -53,7 +54,13 @@ use lightning::sign::ChangeDestinationSourceSync;
5354use lightning:: sign:: EntropySource ;
5455use lightning:: sign:: OutputSpender ;
5556use lightning:: util:: logger:: Logger ;
56- use lightning:: util:: persist:: { KVStore , Persister } ;
57+ use lightning:: util:: persist:: {
58+ KVStore , CHANNEL_MANAGER_PERSISTENCE_KEY , CHANNEL_MANAGER_PERSISTENCE_PRIMARY_NAMESPACE ,
59+ CHANNEL_MANAGER_PERSISTENCE_SECONDARY_NAMESPACE , NETWORK_GRAPH_PERSISTENCE_KEY ,
60+ NETWORK_GRAPH_PERSISTENCE_PRIMARY_NAMESPACE , NETWORK_GRAPH_PERSISTENCE_SECONDARY_NAMESPACE ,
61+ SCORER_PERSISTENCE_KEY , SCORER_PERSISTENCE_PRIMARY_NAMESPACE ,
62+ SCORER_PERSISTENCE_SECONDARY_NAMESPACE ,
63+ } ;
5764use lightning:: util:: sweep:: OutputSweeper ;
5865#[ cfg( feature = "std" ) ]
5966use lightning:: util:: sweep:: OutputSweeperSync ;
@@ -326,7 +333,8 @@ fn update_scorer<'a, S: 'static + Deref<Target = SC> + Send + Sync, SC: 'a + Wri
326333
327334macro_rules! define_run_body {
328335 (
329- $persister: ident, $chain_monitor: ident, $process_chain_monitor_events: expr,
336+ $kv_store: ident,
337+ $chain_monitor: ident, $process_chain_monitor_events: expr,
330338 $channel_manager: ident, $process_channel_manager_events: expr,
331339 $onion_messenger: ident, $process_onion_message_handler_events: expr,
332340 $peer_manager: ident, $gossip_sync: ident,
@@ -404,7 +412,12 @@ macro_rules! define_run_body {
404412
405413 if $channel_manager. get_cm( ) . get_and_clear_needs_persistence( ) {
406414 log_trace!( $logger, "Persisting ChannelManager..." ) ;
407- $persister. persist_manager( & $channel_manager) ?;
415+ $kv_store. write(
416+ CHANNEL_MANAGER_PERSISTENCE_PRIMARY_NAMESPACE ,
417+ CHANNEL_MANAGER_PERSISTENCE_SECONDARY_NAMESPACE ,
418+ CHANNEL_MANAGER_PERSISTENCE_KEY ,
419+ & $channel_manager. get_cm( ) . encode( ) ,
420+ ) ?;
408421 log_trace!( $logger, "Done persisting ChannelManager." ) ;
409422 }
410423 if $timer_elapsed( & mut last_freshness_call, FRESHNESS_TIMER ) {
@@ -465,7 +478,12 @@ macro_rules! define_run_body {
465478 log_trace!( $logger, "Persisting network graph." ) ;
466479 }
467480
468- if let Err ( e) = $persister. persist_graph( network_graph) {
481+ if let Err ( e) = $kv_store. write(
482+ NETWORK_GRAPH_PERSISTENCE_PRIMARY_NAMESPACE ,
483+ NETWORK_GRAPH_PERSISTENCE_SECONDARY_NAMESPACE ,
484+ NETWORK_GRAPH_PERSISTENCE_KEY ,
485+ & network_graph. encode( ) ,
486+ ) {
469487 log_error!( $logger, "Error: Failed to persist network graph, check your disk and permissions {}" , e)
470488 }
471489
@@ -493,7 +511,12 @@ macro_rules! define_run_body {
493511 } else {
494512 log_trace!( $logger, "Persisting scorer" ) ;
495513 }
496- if let Err ( e) = $persister. persist_scorer( & scorer) {
514+ if let Err ( e) = $kv_store. write(
515+ SCORER_PERSISTENCE_PRIMARY_NAMESPACE ,
516+ SCORER_PERSISTENCE_SECONDARY_NAMESPACE ,
517+ SCORER_PERSISTENCE_KEY ,
518+ & scorer. encode( ) ,
519+ ) {
497520 log_error!( $logger, "Error: Failed to persist scorer, check your disk and permissions {}" , e)
498521 }
499522 }
@@ -516,16 +539,31 @@ macro_rules! define_run_body {
516539 // After we exit, ensure we persist the ChannelManager one final time - this avoids
517540 // some races where users quit while channel updates were in-flight, with
518541 // ChannelMonitor update(s) persisted without a corresponding ChannelManager update.
519- $persister. persist_manager( & $channel_manager) ?;
542+ $kv_store. write(
543+ CHANNEL_MANAGER_PERSISTENCE_PRIMARY_NAMESPACE ,
544+ CHANNEL_MANAGER_PERSISTENCE_SECONDARY_NAMESPACE ,
545+ CHANNEL_MANAGER_PERSISTENCE_KEY ,
546+ & $channel_manager. get_cm( ) . encode( ) ,
547+ ) ?;
520548
521549 // Persist Scorer on exit
522550 if let Some ( ref scorer) = $scorer {
523- $persister. persist_scorer( & scorer) ?;
551+ $kv_store. write(
552+ SCORER_PERSISTENCE_PRIMARY_NAMESPACE ,
553+ SCORER_PERSISTENCE_SECONDARY_NAMESPACE ,
554+ SCORER_PERSISTENCE_KEY ,
555+ & scorer. encode( ) ,
556+ ) ?;
524557 }
525558
526559 // Persist NetworkGraph on exit
527560 if let Some ( network_graph) = $gossip_sync. network_graph( ) {
528- $persister. persist_graph( network_graph) ?;
561+ $kv_store. write(
562+ NETWORK_GRAPH_PERSISTENCE_PRIMARY_NAMESPACE ,
563+ NETWORK_GRAPH_PERSISTENCE_SECONDARY_NAMESPACE ,
564+ NETWORK_GRAPH_PERSISTENCE_KEY ,
565+ & network_graph. encode( ) ,
566+ ) ?;
529567 }
530568
531569 Ok ( ( ) )
@@ -723,7 +761,6 @@ use futures_util::{dummy_waker, OptionalSelector, Selector, SelectorOutput};
723761/// # FE: lightning::chain::chaininterface::FeeEstimator + Send + Sync + 'static,
724762/// # UL: lightning::routing::utxo::UtxoLookup + Send + Sync + 'static,
725763/// # D: lightning::sign::ChangeDestinationSource + Send + Sync + 'static,
726- /// # K: lightning::util::persist::KVStore + Send + Sync + 'static,
727764/// # O: lightning::sign::OutputSpender + Send + Sync + 'static,
728765/// # > {
729766/// # peer_manager: Arc<PeerManager<B, F, FE, UL>>,
@@ -736,7 +773,7 @@ use futures_util::{dummy_waker, OptionalSelector, Selector, SelectorOutput};
736773/// # persister: Arc<Store>,
737774/// # logger: Arc<Logger>,
738775/// # scorer: Arc<Scorer>,
739- /// # sweeper: Arc<OutputSweeper<Arc<B>, Arc<D>, Arc<FE>, Arc<F>, Arc<K >, Arc<Logger>, Arc<O>>>,
776+ /// # sweeper: Arc<OutputSweeper<Arc<B>, Arc<D>, Arc<FE>, Arc<F>, Arc<Store >, Arc<Logger>, Arc<O>>>,
740777/// # }
741778/// #
742779/// # async fn setup_background_processing<
@@ -745,9 +782,8 @@ use futures_util::{dummy_waker, OptionalSelector, Selector, SelectorOutput};
745782/// # FE: lightning::chain::chaininterface::FeeEstimator + Send + Sync + 'static,
746783/// # UL: lightning::routing::utxo::UtxoLookup + Send + Sync + 'static,
747784/// # D: lightning::sign::ChangeDestinationSource + Send + Sync + 'static,
748- /// # K: lightning::util::persist::KVStore + Send + Sync + 'static,
749785/// # O: lightning::sign::OutputSpender + Send + Sync + 'static,
750- /// # >(node: Node<B, F, FE, UL, D, K, O>) {
786+ /// # >(node: Node<B, F, FE, UL, D, O>) {
751787/// let background_persister = Arc::clone(&node.persister);
752788/// let background_event_handler = Arc::clone(&node.event_handler);
753789/// let background_chain_mon = Arc::clone(&node.chain_monitor);
@@ -819,7 +855,6 @@ pub async fn process_events_async<
819855 P : ' static + Deref ,
820856 EventHandlerFuture : core:: future:: Future < Output = Result < ( ) , ReplayEvent > > ,
821857 EventHandler : Fn ( Event ) -> EventHandlerFuture ,
822- PS : ' static + Deref + Send ,
823858 ES : ' static + Deref + Send ,
824859 M : ' static
825860 + Deref < Target = ChainMonitor < <CM :: Target as AChannelManager >:: Signer , CF , T , F , L , P , ES > >
@@ -841,7 +876,7 @@ pub async fn process_events_async<
841876 Sleeper : Fn ( Duration ) -> SleepFuture ,
842877 FetchTime : Fn ( ) -> Option < Duration > ,
843878> (
844- persister : PS , event_handler : EventHandler , chain_monitor : M , channel_manager : CM ,
879+ kv_store : K , event_handler : EventHandler , chain_monitor : M , channel_manager : CM ,
845880 onion_messenger : Option < OM > , gossip_sync : GossipSync < PGS , RGS , G , UL , L > , peer_manager : PM ,
846881 liquidity_manager : Option < LM > , sweeper : Option < OS > , logger : L , scorer : Option < S > ,
847882 sleeper : Sleeper , mobile_interruptable_platform : bool , fetch_time : FetchTime ,
@@ -853,7 +888,6 @@ where
853888 F :: Target : ' static + FeeEstimator ,
854889 L :: Target : ' static + Logger ,
855890 P :: Target : ' static + Persist < <CM :: Target as AChannelManager >:: Signer > ,
856- PS :: Target : ' static + Persister < ' a , CM , L , S > ,
857891 ES :: Target : ' static + EntropySource ,
858892 CM :: Target : AChannelManager ,
859893 OM :: Target : AOnionMessenger ,
@@ -869,7 +903,7 @@ where
869903 let event_handler = & event_handler;
870904 let scorer = & scorer;
871905 let logger = & logger;
872- let persister = & persister ;
906+ let kv_store = & kv_store ;
873907 let fetch_time = & fetch_time;
874908 // We should be able to drop the Box once our MSRV is 1.68
875909 Box :: pin ( async move {
@@ -880,7 +914,12 @@ where
880914 if let Some ( duration_since_epoch) = fetch_time ( ) {
881915 if update_scorer ( scorer, & event, duration_since_epoch) {
882916 log_trace ! ( logger, "Persisting scorer after update" ) ;
883- if let Err ( e) = persister. persist_scorer ( & * scorer) {
917+ if let Err ( e) = kv_store. write (
918+ SCORER_PERSISTENCE_PRIMARY_NAMESPACE ,
919+ SCORER_PERSISTENCE_SECONDARY_NAMESPACE ,
920+ SCORER_PERSISTENCE_KEY ,
921+ & scorer. encode ( ) ,
922+ ) {
884923 log_error ! ( logger, "Error: Failed to persist scorer, check your disk and permissions {}" , e) ;
885924 // We opt not to abort early on persistence failure here as persisting
886925 // the scorer is non-critical and we still hope that it will have
@@ -895,7 +934,7 @@ where
895934 } ;
896935 let mut batch_delay = BatchDelay :: new ( ) ;
897936 define_run_body ! (
898- persister ,
937+ kv_store ,
899938 chain_monitor,
900939 chain_monitor. process_pending_events_async( async_event_handler) . await ,
901940 channel_manager,
@@ -977,21 +1016,21 @@ impl BackgroundProcessor {
9771016 /// documentation].
9781017 ///
9791018 /// The thread runs indefinitely unless the object is dropped, [`stop`] is called, or
980- /// [`Persister::persist_manager `] returns an error. In case of an error, the error is retrieved by calling
1019+ /// [`KVStore `] returns an error. In case of an error, the error is retrieved by calling
9811020 /// either [`join`] or [`stop`].
9821021 ///
9831022 /// # Data Persistence
9841023 ///
985- /// [`Persister::persist_manager `] is responsible for writing out the [`ChannelManager`] to disk, and/or
1024+ /// [`KVStore `] is responsible for writing out the [`ChannelManager`] to disk, and/or
9861025 /// uploading to one or more backup services. See [`ChannelManager::write`] for writing out a
9871026 /// [`ChannelManager`]. See the `lightning-persister` crate for LDK's
9881027 /// provided implementation.
9891028 ///
990- /// [`Persister::persist_graph `] is responsible for writing out the [`NetworkGraph`] to disk, if
1029+ /// [`KVStore `] is also responsible for writing out the [`NetworkGraph`] to disk, if
9911030 /// [`GossipSync`] is supplied. See [`NetworkGraph::write`] for writing out a [`NetworkGraph`].
9921031 /// See the `lightning-persister` crate for LDK's provided implementation.
9931032 ///
994- /// Typically, users should either implement [`Persister::persist_manager `] to never return an
1033+ /// Typically, users should either implement [`KVStore `] to never return an
9951034 /// error or call [`join`] and handle any error that may arise. For the latter case,
9961035 /// `BackgroundProcessor` must be restarted by calling `start` again after handling the error.
9971036 ///
@@ -1013,8 +1052,6 @@ impl BackgroundProcessor {
10131052 /// [`stop`]: Self::stop
10141053 /// [`ChannelManager`]: lightning::ln::channelmanager::ChannelManager
10151054 /// [`ChannelManager::write`]: lightning::ln::channelmanager::ChannelManager#impl-Writeable
1016- /// [`Persister::persist_manager`]: lightning::util::persist::Persister::persist_manager
1017- /// [`Persister::persist_graph`]: lightning::util::persist::Persister::persist_graph
10181055 /// [`NetworkGraph`]: lightning::routing::gossip::NetworkGraph
10191056 /// [`NetworkGraph::write`]: lightning::routing::gossip::NetworkGraph#impl-Writeable
10201057 pub fn start <
@@ -1027,7 +1064,6 @@ impl BackgroundProcessor {
10271064 L : ' static + Deref + Send ,
10281065 P : ' static + Deref ,
10291066 EH : ' static + EventHandler + Send ,
1030- PS : ' static + Deref + Send ,
10311067 ES : ' static + Deref + Send ,
10321068 M : ' static
10331069 + Deref <
@@ -1045,10 +1081,10 @@ impl BackgroundProcessor {
10451081 SC : for < ' b > WriteableScore < ' b > ,
10461082 D : ' static + Deref ,
10471083 O : ' static + Deref ,
1048- K : ' static + Deref ,
1084+ K : ' static + Deref + Send ,
10491085 OS : ' static + Deref < Target = OutputSweeperSync < T , D , F , CF , K , L , O > > + Send ,
10501086 > (
1051- persister : PS , event_handler : EH , chain_monitor : M , channel_manager : CM ,
1087+ kv_store : K , event_handler : EH , chain_monitor : M , channel_manager : CM ,
10521088 onion_messenger : Option < OM > , gossip_sync : GossipSync < PGS , RGS , G , UL , L > , peer_manager : PM ,
10531089 liquidity_manager : Option < LM > , sweeper : Option < OS > , logger : L , scorer : Option < S > ,
10541090 ) -> Self
@@ -1059,7 +1095,6 @@ impl BackgroundProcessor {
10591095 F :: Target : ' static + FeeEstimator ,
10601096 L :: Target : ' static + Logger ,
10611097 P :: Target : ' static + Persist < <CM :: Target as AChannelManager >:: Signer > ,
1062- PS :: Target : ' static + Persister < ' a , CM , L , S > ,
10631098 ES :: Target : ' static + EntropySource ,
10641099 CM :: Target : AChannelManager ,
10651100 OM :: Target : AOnionMessenger ,
@@ -1084,7 +1119,12 @@ impl BackgroundProcessor {
10841119 . expect ( "Time should be sometime after 1970" ) ;
10851120 if update_scorer ( scorer, & event, duration_since_epoch) {
10861121 log_trace ! ( logger, "Persisting scorer after update" ) ;
1087- if let Err ( e) = persister. persist_scorer ( & scorer) {
1122+ if let Err ( e) = kv_store. write (
1123+ SCORER_PERSISTENCE_PRIMARY_NAMESPACE ,
1124+ SCORER_PERSISTENCE_SECONDARY_NAMESPACE ,
1125+ SCORER_PERSISTENCE_KEY ,
1126+ & scorer. encode ( ) ,
1127+ ) {
10881128 log_error ! ( logger, "Error: Failed to persist scorer, check your disk and permissions {}" , e)
10891129 }
10901130 }
@@ -1093,7 +1133,7 @@ impl BackgroundProcessor {
10931133 } ;
10941134 let mut batch_delay = BatchDelay :: new ( ) ;
10951135 define_run_body ! (
1096- persister ,
1136+ kv_store ,
10971137 chain_monitor,
10981138 chain_monitor. process_pending_events( & event_handler) ,
10991139 channel_manager,
@@ -1314,7 +1354,7 @@ mod tests {
13141354 Arc < test_utils:: TestBroadcaster > ,
13151355 Arc < test_utils:: TestFeeEstimator > ,
13161356 Arc < test_utils:: TestLogger > ,
1317- Arc < FilesystemStore > ,
1357+ Arc < Persister > ,
13181358 Arc < KeysManager > ,
13191359 > ;
13201360
@@ -1372,7 +1412,7 @@ mod tests {
13721412 > ,
13731413 liquidity_manager : Arc < LM > ,
13741414 chain_monitor : Arc < ChainMonitor > ,
1375- kv_store : Arc < FilesystemStore > ,
1415+ kv_store : Arc < Persister > ,
13761416 tx_broadcaster : Arc < test_utils:: TestBroadcaster > ,
13771417 network_graph : Arc < NetworkGraph < Arc < test_utils:: TestLogger > > > ,
13781418 logger : Arc < test_utils:: TestLogger > ,
@@ -1384,7 +1424,7 @@ mod tests {
13841424 Arc < TestWallet > ,
13851425 Arc < test_utils:: TestFeeEstimator > ,
13861426 Arc < test_utils:: TestChainSource > ,
1387- Arc < FilesystemStore > ,
1427+ Arc < Persister > ,
13881428 Arc < test_utils:: TestLogger > ,
13891429 Arc < KeysManager > ,
13901430 > ,
@@ -1476,6 +1516,10 @@ mod tests {
14761516 fn with_scorer_error ( self , error : std:: io:: ErrorKind , message : & ' static str ) -> Self {
14771517 Self { scorer_error : Some ( ( error, message) ) , ..self }
14781518 }
1519+
1520+ pub fn get_data_dir ( & self ) -> PathBuf {
1521+ self . kv_store . get_data_dir ( )
1522+ }
14791523 }
14801524
14811525 impl KVStore for Persister {
@@ -1720,7 +1764,7 @@ mod tests {
17201764 ) ) ;
17211765 let chain_source = Arc :: new ( test_utils:: TestChainSource :: new ( Network :: Bitcoin ) ) ;
17221766 let kv_store =
1723- Arc :: new ( FilesystemStore :: new ( format ! ( "{}_persister_{}" , & persist_dir, i) . into ( ) ) ) ;
1767+ Arc :: new ( Persister :: new ( format ! ( "{}_persister_{}" , & persist_dir, i) . into ( ) ) ) ;
17241768 let now = Duration :: from_secs ( genesis_block. header . time as u64 ) ;
17251769 let keys_manager = Arc :: new ( KeysManager :: new ( & seed, now. as_secs ( ) , now. subsec_nanos ( ) ) ) ;
17261770 let chain_monitor = Arc :: new ( chainmonitor:: ChainMonitor :: new (
0 commit comments