@@ -20,6 +20,7 @@ use lightning::ln::peer_handler::{CustomMessageHandler, PeerManager, SocketDescr
2020use lightning:: routing:: network_graph:: { NetworkGraph , NetGraphMsgHandler } ;
2121use lightning:: util:: events:: { Event , EventHandler , EventsProvider } ;
2222use lightning:: util:: logger:: Logger ;
23+ use lightning:: util:: persist:: Persister ;
2324use std:: sync:: Arc ;
2425use std:: sync:: atomic:: { AtomicBool , Ordering } ;
2526use std:: thread;
@@ -80,22 +81,7 @@ const FIRST_NETWORK_PRUNE_TIMER: u64 = 60;
8081#[ cfg( test) ]
8182const FIRST_NETWORK_PRUNE_TIMER : u64 = 1 ;
8283
83- /// Trait that handles persisting a [`ChannelManager`] and [`NetworkGraph`] to disk.
84- pub trait Persister < Signer : Sign , M : Deref , T : Deref , K : Deref , F : Deref , L : Deref >
85- where
86- M :: Target : ' static + chain:: Watch < Signer > ,
87- T :: Target : ' static + BroadcasterInterface ,
88- K :: Target : ' static + KeysInterface < Signer = Signer > ,
89- F :: Target : ' static + FeeEstimator ,
90- L :: Target : ' static + Logger ,
91- {
92- /// Persist the given [`ChannelManager`] to disk, returning an error if persistence failed
93- /// (which will cause the [`BackgroundProcessor`] which called this method to exit).
94- fn persist_manager ( & self , channel_manager : & ChannelManager < Signer , M , T , K , F , L > ) -> Result < ( ) , std:: io:: Error > ;
95-
96- /// Persist the given [`NetworkGraph`] to disk, returning an error if persistence failed.
97- fn persist_graph ( & self , network_graph : & NetworkGraph ) -> Result < ( ) , std:: io:: Error > ;
98- }
84+
9985
10086/// Decorates an [`EventHandler`] with common functionality provided by standard [`EventHandler`]s.
10187struct DecoratingEventHandler <
@@ -133,6 +119,7 @@ impl BackgroundProcessor {
133119 /// The thread runs indefinitely unless the object is dropped, [`stop`] is called, or
134120 /// [`Persister::persist_manager`] returns an error. In case of an error, the error is retrieved by calling
135121 /// either [`join`] or [`stop`].
122+ ///
136123 ///
137124 /// # Data Persistence
138125 ///
@@ -142,7 +129,7 @@ impl BackgroundProcessor {
142129 /// provided implementation.
143130 ///
144131 /// [`Persister::persist_graph`] is responsible for writing out the [`NetworkGraph`] to disk. See
145- /// [`NetworkGraph::write`] for writing out a [`NetworkGraph`]. See [`FilesystemPersister::persist_network_graph `]
132+ /// [`NetworkGraph::write`] for writing out a [`NetworkGraph`]. See [`FilesystemPersister::persist_graph `]
146133 /// for Rust-Lightning's provided implementation.
147134 ///
148135 /// Typically, users should either implement [`Persister::persist_manager`] to never return an
@@ -161,8 +148,8 @@ impl BackgroundProcessor {
161148 /// [`stop`]: Self::stop
162149 /// [`ChannelManager`]: lightning::ln::channelmanager::ChannelManager
163150 /// [`ChannelManager::write`]: lightning::ln::channelmanager::ChannelManager#impl-Writeable
164- /// [`FilesystemPersister::persist_manager`]: lightning_persister::FilesystemPersister::persist_manager
165- /// [`FilesystemPersister::persist_network_graph `]: lightning_persister::FilesystemPersister::persist_network_graph
151+ /// [`FilesystemPersister::persist_manager`]: lightning_persister::FilesystemPersister#impl-Persister
152+ /// [`FilesystemPersister::persist_graph `]: lightning_persister::FilesystemPersister#impl-Persister
166153 /// [`NetworkGraph`]: lightning::routing::network_graph::NetworkGraph
167154 /// [`NetworkGraph::write`]: lightning::routing::network_graph::NetworkGraph#impl-Writeable
168155 pub fn start <
@@ -180,7 +167,7 @@ impl BackgroundProcessor {
180167 CMH : ' static + Deref + Send + Sync ,
181168 RMH : ' static + Deref + Send + Sync ,
182169 EH : ' static + EventHandler + Send ,
183- PS : ' static + Send + Persister < Signer , CW , T , K , F , L > ,
170+ PS : ' static + Deref + Send ,
184171 M : ' static + Deref < Target = ChainMonitor < Signer , CF , T , F , L , P > > + Send + Sync ,
185172 CM : ' static + Deref < Target = ChannelManager < Signer , CW , T , K , F , L > > + Send + Sync ,
186173 NG : ' static + Deref < Target = NetGraphMsgHandler < G , CA , L > > + Send + Sync ,
@@ -202,6 +189,7 @@ impl BackgroundProcessor {
202189 CMH :: Target : ' static + ChannelMessageHandler ,
203190 RMH :: Target : ' static + RoutingMessageHandler ,
204191 UMH :: Target : ' static + CustomMessageHandler ,
192+ PS :: Target : ' static + Persister < Signer , CW , T , K , F , L >
205193 {
206194 let stop_thread = Arc :: new ( AtomicBool :: new ( false ) ) ;
207195 let stop_thread_clone = stop_thread. clone ( ) ;
@@ -365,10 +353,11 @@ mod tests {
365353 use lightning:: util:: logger:: Logger ;
366354 use lightning:: util:: ser:: Writeable ;
367355 use lightning:: util:: test_utils;
356+ use lightning:: util:: persist:: KVStorePersister ;
368357 use lightning_invoice:: payment:: { InvoicePayer , RetryAttempts } ;
369358 use lightning_invoice:: utils:: DefaultRouter ;
370- use lightning_persister:: FilesystemPersister ;
371- use std:: fs;
359+ use lightning_persister:: { FilesystemPersister } ;
360+ use std:: fs:: { self , File } ;
372361 use std:: ops:: Deref ;
373362 use std:: path:: PathBuf ;
374363 use std:: sync:: { Arc , Mutex } ;
@@ -414,7 +403,7 @@ mod tests {
414403 struct Persister {
415404 data_dir : String ,
416405 graph_error : Option < ( std:: io:: ErrorKind , & ' static str ) > ,
417- manager_error : Option < ( std:: io:: ErrorKind , & ' static str ) >
406+ manager_error : Option < ( std:: io:: ErrorKind , & ' static str ) > ,
418407 }
419408
420409 impl Persister {
@@ -431,25 +420,23 @@ mod tests {
431420 }
432421 }
433422
434- impl < Signer : Sign , M : Deref , T : Deref , K : Deref , F : Deref , L : Deref > super :: Persister < Signer , M , T , K , F , L > for Persister where
435- M :: Target : ' static + chain:: Watch < Signer > ,
436- T :: Target : ' static + BroadcasterInterface ,
437- K :: Target : ' static + KeysInterface < Signer = Signer > ,
438- F :: Target : ' static + FeeEstimator ,
439- L :: Target : ' static + Logger ,
440- {
441- fn persist_manager ( & self , channel_manager : & ChannelManager < Signer , M , T , K , F , L > ) -> Result < ( ) , std:: io:: Error > {
442- match self . manager_error {
443- None => FilesystemPersister :: persist_manager ( self . data_dir . clone ( ) , channel_manager) ,
444- Some ( ( error, message) ) => Err ( std:: io:: Error :: new ( error, message) ) ,
423+ impl KVStorePersister for Persister {
424+ fn persist < W : Writeable > ( & self , key : String , object : & W ) -> std:: io:: Result < ( ) > {
425+ if key == self . get_channel_manager_key ( ) {
426+ return match self . manager_error {
427+ None => Ok ( ( ) ) ,
428+ Some ( ( error, message) ) => Err ( std:: io:: Error :: new ( error, message) )
429+ }
445430 }
446- }
447431
448- fn persist_graph ( & self , network_graph : & NetworkGraph ) -> Result < ( ) , std:: io:: Error > {
449- match self . graph_error {
450- None => FilesystemPersister :: persist_network_graph ( self . data_dir . clone ( ) , network_graph) ,
451- Some ( ( error, message) ) => Err ( std:: io:: Error :: new ( error, message) ) ,
432+ if key == self . get_network_graph_key ( ) {
433+ return match self . graph_error {
434+ None => Ok ( ( ) ) ,
435+ Some ( ( error, message) ) => Err ( std:: io:: Error :: new ( error, message) )
436+ }
452437 }
438+
439+ Ok ( ( ) )
453440 }
454441 }
455442
0 commit comments