@@ -212,15 +212,6 @@ impl EsploraChainSource {
212212 & self , channel_manager : Arc < ChannelManager > , chain_monitor : Arc < ChainMonitor > ,
213213 output_sweeper : Arc < Sweeper > ,
214214 ) -> 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-
224215 let receiver_res = {
225216 let mut status_lock = self . lightning_wallet_sync_status . lock ( ) . unwrap ( ) ;
226217 status_lock. register_or_subscribe_pending_sync ( )
@@ -233,58 +224,74 @@ impl EsploraChainSource {
233224 Error :: WalletOperationFailed
234225 } ) ?;
235226 }
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- ) ;
250227
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,
267271 Arc :: clone ( & self . kv_store ) ,
268272 Arc :: clone ( & self . logger ) ,
269- Arc :: clone ( & self . node_metrics ) ,
270273 ) ?;
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 ( ( ) )
277284 } ,
278285 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 ( ) )
281288 } ,
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+ }
288295 }
289296
290297 pub ( crate ) async fn update_fee_rate_estimates ( & self ) -> Result < ( ) , Error > {
0 commit comments