@@ -20,6 +20,7 @@ use lightning::ln::peer_handler::{CustomMessageHandler, PeerManager, SocketDescr
20
20
use lightning:: routing:: network_graph:: { NetworkGraph , NetGraphMsgHandler } ;
21
21
use lightning:: util:: events:: { Event , EventHandler , EventsProvider } ;
22
22
use lightning:: util:: logger:: Logger ;
23
+ use lightning:: util:: persist:: Persister ;
23
24
use std:: sync:: Arc ;
24
25
use std:: sync:: atomic:: { AtomicBool , Ordering } ;
25
26
use std:: thread;
@@ -80,22 +81,7 @@ const FIRST_NETWORK_PRUNE_TIMER: u64 = 60;
80
81
#[ cfg( test) ]
81
82
const FIRST_NETWORK_PRUNE_TIMER : u64 = 1 ;
82
83
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
+
99
85
100
86
/// Decorates an [`EventHandler`] with common functionality provided by standard [`EventHandler`]s.
101
87
struct DecoratingEventHandler <
@@ -133,6 +119,7 @@ impl BackgroundProcessor {
133
119
/// The thread runs indefinitely unless the object is dropped, [`stop`] is called, or
134
120
/// [`Persister::persist_manager`] returns an error. In case of an error, the error is retrieved by calling
135
121
/// either [`join`] or [`stop`].
122
+ ///
136
123
///
137
124
/// # Data Persistence
138
125
///
@@ -142,7 +129,7 @@ impl BackgroundProcessor {
142
129
/// provided implementation.
143
130
///
144
131
/// [`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 `]
146
133
/// for Rust-Lightning's provided implementation.
147
134
///
148
135
/// Typically, users should either implement [`Persister::persist_manager`] to never return an
@@ -161,8 +148,8 @@ impl BackgroundProcessor {
161
148
/// [`stop`]: Self::stop
162
149
/// [`ChannelManager`]: lightning::ln::channelmanager::ChannelManager
163
150
/// [`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
166
153
/// [`NetworkGraph`]: lightning::routing::network_graph::NetworkGraph
167
154
/// [`NetworkGraph::write`]: lightning::routing::network_graph::NetworkGraph#impl-Writeable
168
155
pub fn start <
@@ -180,7 +167,7 @@ impl BackgroundProcessor {
180
167
CMH : ' static + Deref + Send + Sync ,
181
168
RMH : ' static + Deref + Send + Sync ,
182
169
EH : ' static + EventHandler + Send ,
183
- PS : ' static + Send + Persister < Signer , CW , T , K , F , L > ,
170
+ PS : ' static + Deref + Send ,
184
171
M : ' static + Deref < Target = ChainMonitor < Signer , CF , T , F , L , P > > + Send + Sync ,
185
172
CM : ' static + Deref < Target = ChannelManager < Signer , CW , T , K , F , L > > + Send + Sync ,
186
173
NG : ' static + Deref < Target = NetGraphMsgHandler < G , CA , L > > + Send + Sync ,
@@ -202,6 +189,7 @@ impl BackgroundProcessor {
202
189
CMH :: Target : ' static + ChannelMessageHandler ,
203
190
RMH :: Target : ' static + RoutingMessageHandler ,
204
191
UMH :: Target : ' static + CustomMessageHandler ,
192
+ PS :: Target : ' static + Persister < Signer , CW , T , K , F , L >
205
193
{
206
194
let stop_thread = Arc :: new ( AtomicBool :: new ( false ) ) ;
207
195
let stop_thread_clone = stop_thread. clone ( ) ;
@@ -365,10 +353,11 @@ mod tests {
365
353
use lightning:: util:: logger:: Logger ;
366
354
use lightning:: util:: ser:: Writeable ;
367
355
use lightning:: util:: test_utils;
356
+ use lightning:: util:: persist:: KVStorePersister ;
368
357
use lightning_invoice:: payment:: { InvoicePayer , RetryAttempts } ;
369
358
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 } ;
372
361
use std:: ops:: Deref ;
373
362
use std:: path:: PathBuf ;
374
363
use std:: sync:: { Arc , Mutex } ;
@@ -414,7 +403,7 @@ mod tests {
414
403
struct Persister {
415
404
data_dir : String ,
416
405
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 ) > ,
418
407
}
419
408
420
409
impl Persister {
@@ -431,25 +420,23 @@ mod tests {
431
420
}
432
421
}
433
422
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
+ }
445
430
}
446
- }
447
431
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
+ }
452
437
}
438
+
439
+ Ok ( ( ) )
453
440
}
454
441
}
455
442
0 commit comments