@@ -212,15 +212,6 @@ impl EsploraChainSource {
212
212
& self , channel_manager : Arc < ChannelManager > , chain_monitor : Arc < ChainMonitor > ,
213
213
output_sweeper : Arc < Sweeper > ,
214
214
) -> Result < ( ) , Error > {
215
- let sync_cman = Arc :: clone ( & channel_manager) ;
216
- let sync_cmon = Arc :: clone ( & chain_monitor) ;
217
- let sync_sweeper = Arc :: clone ( & output_sweeper) ;
218
- let confirmables = vec ! [
219
- & * sync_cman as & ( dyn Confirm + Sync + Send ) ,
220
- & * sync_cmon as & ( dyn Confirm + Sync + Send ) ,
221
- & * sync_sweeper as & ( dyn Confirm + Sync + Send ) ,
222
- ] ;
223
-
224
215
let receiver_res = {
225
216
let mut status_lock = self . lightning_wallet_sync_status . lock ( ) . unwrap ( ) ;
226
217
status_lock. register_or_subscribe_pending_sync ( )
@@ -233,58 +224,74 @@ impl EsploraChainSource {
233
224
Error :: WalletOperationFailed
234
225
} ) ?;
235
226
}
236
- let res = {
237
- let timeout_fut = tokio:: time:: timeout (
238
- Duration :: from_secs ( LDK_WALLET_SYNC_TIMEOUT_SECS ) ,
239
- self . tx_sync . sync ( confirmables) ,
240
- ) ;
241
- let now = Instant :: now ( ) ;
242
- match timeout_fut. await {
243
- Ok ( res) => match res {
244
- Ok ( ( ) ) => {
245
- log_info ! (
246
- self . logger,
247
- "Sync of Lightning wallet finished in {}ms." ,
248
- now. elapsed( ) . as_millis( )
249
- ) ;
250
227
251
- let unix_time_secs_opt =
252
- SystemTime :: now ( ) . duration_since ( UNIX_EPOCH ) . ok ( ) . map ( |d| d. as_secs ( ) ) ;
253
- {
254
- let mut locked_node_metrics = self . node_metrics . write ( ) . unwrap ( ) ;
255
- locked_node_metrics. latest_lightning_wallet_sync_timestamp =
256
- unix_time_secs_opt;
257
- write_node_metrics (
258
- & * locked_node_metrics,
259
- Arc :: clone ( & self . kv_store ) ,
260
- Arc :: clone ( & self . logger ) ,
261
- ) ?;
262
- }
263
-
264
- periodically_archive_fully_resolved_monitors (
265
- Arc :: clone ( & channel_manager) ,
266
- Arc :: clone ( & chain_monitor) ,
228
+ let res =
229
+ self . sync_lightning_wallet_inner ( channel_manager, chain_monitor, output_sweeper) . await ;
230
+
231
+ self . lightning_wallet_sync_status . lock ( ) . unwrap ( ) . propagate_result_to_subscribers ( res) ;
232
+
233
+ res
234
+ }
235
+
236
+ async fn sync_lightning_wallet_inner (
237
+ & self , channel_manager : Arc < ChannelManager > , chain_monitor : Arc < ChainMonitor > ,
238
+ output_sweeper : Arc < Sweeper > ,
239
+ ) -> Result < ( ) , Error > {
240
+ let sync_cman = Arc :: clone ( & channel_manager) ;
241
+ let sync_cmon = Arc :: clone ( & chain_monitor) ;
242
+ let sync_sweeper = Arc :: clone ( & output_sweeper) ;
243
+ let confirmables = vec ! [
244
+ & * sync_cman as & ( dyn Confirm + Sync + Send ) ,
245
+ & * sync_cmon as & ( dyn Confirm + Sync + Send ) ,
246
+ & * sync_sweeper as & ( dyn Confirm + Sync + Send ) ,
247
+ ] ;
248
+
249
+ let timeout_fut = tokio:: time:: timeout (
250
+ Duration :: from_secs ( LDK_WALLET_SYNC_TIMEOUT_SECS ) ,
251
+ self . tx_sync . sync ( confirmables) ,
252
+ ) ;
253
+ let now = Instant :: now ( ) ;
254
+ match timeout_fut. await {
255
+ Ok ( res) => match res {
256
+ Ok ( ( ) ) => {
257
+ log_info ! (
258
+ self . logger,
259
+ "Sync of Lightning wallet finished in {}ms." ,
260
+ now. elapsed( ) . as_millis( )
261
+ ) ;
262
+
263
+ let unix_time_secs_opt =
264
+ SystemTime :: now ( ) . duration_since ( UNIX_EPOCH ) . ok ( ) . map ( |d| d. as_secs ( ) ) ;
265
+ {
266
+ let mut locked_node_metrics = self . node_metrics . write ( ) . unwrap ( ) ;
267
+ locked_node_metrics. latest_lightning_wallet_sync_timestamp =
268
+ unix_time_secs_opt;
269
+ write_node_metrics (
270
+ & * locked_node_metrics,
267
271
Arc :: clone ( & self . kv_store ) ,
268
272
Arc :: clone ( & self . logger ) ,
269
- Arc :: clone ( & self . node_metrics ) ,
270
273
) ?;
271
- Ok ( ( ) )
272
- } ,
273
- Err ( e) => {
274
- log_error ! ( self . logger, "Sync of Lightning wallet failed: {}" , e) ;
275
- Err ( e. into ( ) )
276
- } ,
274
+ }
275
+
276
+ periodically_archive_fully_resolved_monitors (
277
+ Arc :: clone ( & channel_manager) ,
278
+ Arc :: clone ( & chain_monitor) ,
279
+ Arc :: clone ( & self . kv_store ) ,
280
+ Arc :: clone ( & self . logger ) ,
281
+ Arc :: clone ( & self . node_metrics ) ,
282
+ ) ?;
283
+ Ok ( ( ) )
277
284
} ,
278
285
Err ( e) => {
279
- log_error ! ( self . logger, "Lightning wallet sync timed out : {}" , e) ;
280
- Err ( Error :: TxSyncTimeout )
286
+ log_error ! ( self . logger, "Sync of Lightning wallet failed : {}" , e) ;
287
+ Err ( e . into ( ) )
281
288
} ,
282
- }
283
- } ;
284
-
285
- self . lightning_wallet_sync_status . lock ( ) . unwrap ( ) . propagate_result_to_subscribers ( res ) ;
286
-
287
- res
289
+ } ,
290
+ Err ( e ) => {
291
+ log_error ! ( self . logger , "Lightning wallet sync timed out: {}" , e ) ;
292
+ Err ( Error :: TxSyncTimeout )
293
+ } ,
294
+ }
288
295
}
289
296
290
297
pub ( crate ) async fn update_fee_rate_estimates ( & self ) -> Result < ( ) , Error > {
0 commit comments