@@ -53,6 +53,7 @@ const HTLC_EXPIRY_THRESHOLD_SECS: u64 = 10;
5353use crate :: utils:: async_poll:: dummy_waker;
5454use core:: task;
5555use std:: future:: Future ;
56+ use std:: time:: Instant ;
5657
5758/// Action to forward a specific HTLC through a channel
5859#[ derive( Debug ) ]
@@ -147,18 +148,21 @@ where
147148 & self , intercept_scid : u64 , intercept_id : InterceptId , expected_outbound_amount_msat : u64 ,
148149 payment_hash : PaymentHash ,
149150 ) -> Result < ( ) , APIError > {
151+ let fn_start = Instant :: now ( ) ;
150152 log_info ! (
151153 self . logger,
152- "[LSPS4] HTLC intercepted - SCID: {}, intercept_id: {:?}, amount: {} msat, payment_hash: {}" ,
154+ "TIMING: [LSPS4] htlc_intercepted START - SCID: {}, intercept_id: {:?}, amount: {} msat, payment_hash: {}" ,
153155 intercept_scid,
154156 intercept_id,
155157 expected_outbound_amount_msat,
156158 payment_hash
157159 ) ;
160+ let step_start = Instant :: now ( ) ;
158161 if let Some ( counterparty_node_id) = self . scid_store . get_peer ( intercept_scid) {
159162 log_info ! (
160163 self . logger,
161- "[LSPS4] SCID {} matched to peer {}, processing HTLC" ,
164+ "TIMING: [LSPS4] htlc_intercepted scid_store.get_peer() took {}ms - SCID {} matched to peer {}" ,
165+ step_start. elapsed( ) . as_millis( ) ,
162166 intercept_scid,
163167 counterparty_node_id
164168 ) ;
@@ -173,35 +177,43 @@ where
173177 if !self . is_peer_connected ( & counterparty_node_id) {
174178 log_debug ! (
175179 self . logger,
176- "[htlc_intercepted] Peer {} not connected, storing HTLC and sending webhook" ,
180+ "TIMING: [htlc_intercepted] Peer {} not connected, storing HTLC and sending webhook" ,
177181 counterparty_node_id
178182 ) ;
183+ let store_start = Instant :: now ( ) ;
179184 self . htlc_store . insert ( htlc) . unwrap ( ) ; // TODO: handle persistence failures
185+ log_info ! ( self . logger, "TIMING: [LSPS4] htlc_intercepted htlc_store.insert() took {}ms" , store_start. elapsed( ) . as_millis( ) ) ;
180186 let mut event_queue_notifier = self . pending_events . notifier ( ) ;
181187 event_queue_notifier. enqueue ( crate :: events:: LiquidityEvent :: LSPS4Service ( LSPS4ServiceEvent :: SendWebhook {
182188 counterparty_node_id : counterparty_node_id. clone ( ) ,
183189 } ) ) ;
184190 } else {
185191 log_debug ! (
186192 self . logger,
187- "[htlc_intercepted] Peer {} connected, processing HTLC immediately" ,
193+ "TIMING: [htlc_intercepted] Peer {} connected, processing HTLC immediately" ,
188194 counterparty_node_id
189195 ) ;
196+ let calc_start = Instant :: now ( ) ;
190197 let actions =
191198 self . calculate_htlc_actions_for_peer ( counterparty_node_id, vec ! [ htlc. clone( ) ] ) ;
199+ log_info ! ( self . logger, "TIMING: [LSPS4] htlc_intercepted calculate_htlc_actions_for_peer() took {}ms" , calc_start. elapsed( ) . as_millis( ) ) ;
192200
193201 if actions. new_channel_needed_msat . is_some ( ) {
202+ let store_start = Instant :: now ( ) ;
194203 self . htlc_store . insert ( htlc) . unwrap ( ) ; // TODO: handle persistence failures
204+ log_info ! ( self . logger, "TIMING: [LSPS4] htlc_intercepted htlc_store.insert() took {}ms" , store_start. elapsed( ) . as_millis( ) ) ;
195205 }
196206
197207 log_debug ! (
198208 self . logger,
199- "[htlc_intercepted] Calculated actions for peer {}: {:?}" ,
209+ "TIMING: [htlc_intercepted] Calculated actions for peer {}: {:?}" ,
200210 counterparty_node_id,
201211 actions
202212 ) ;
203213
214+ let exec_start = Instant :: now ( ) ;
204215 self . execute_htlc_actions ( actions, counterparty_node_id. clone ( ) ) ;
216+ log_info ! ( self . logger, "TIMING: [LSPS4] htlc_intercepted execute_htlc_actions() took {}ms" , exec_start. elapsed( ) . as_millis( ) ) ;
205217 }
206218 } else {
207219 log_error ! (
@@ -211,9 +223,10 @@ where
211223 intercept_id
212224 ) ;
213225 }
214- log_debug ! (
226+ log_info ! (
215227 self . logger,
216- "[htlc_intercepted] Finalizing htlc_intercepted for intercept_scid {}" ,
228+ "TIMING: [LSPS4] htlc_intercepted TOTAL took {}ms for intercept_scid {}" ,
229+ fn_start. elapsed( ) . as_millis( ) ,
217230 intercept_scid
218231 ) ;
219232
@@ -295,31 +308,42 @@ where
295308 fn handle_register_node_request (
296309 & self , request_id : LSPSRequestId , counterparty_node_id : & PublicKey , _params : RegisterNodeRequest ,
297310 ) -> Result < ( ) , LightningError > {
311+ let fn_start = Instant :: now ( ) ;
298312 log_info ! (
299313 self . logger,
300- "[LSPS4] Received RegisterNodeRequest from {} with request_id {:?}" ,
314+ "TIMING: [LSPS4] handle_register_node_request START from {} with request_id {:?}" ,
301315 counterparty_node_id,
302316 request_id
303317 ) ;
304318
319+ let step_start = Instant :: now ( ) ;
305320 let intercept_scid = match self . scid_store . get_scid ( counterparty_node_id) {
306321 Some ( intercept_scid) => {
307322 log_info ! (
308323 self . logger,
309- "[LSPS4] Found existing intercept SCID {} for peer {}" ,
324+ "TIMING: [LSPS4] handle_register_node_request scid_store.get_scid() took {}ms - Found existing intercept SCID {} for peer {}" ,
325+ step_start. elapsed( ) . as_millis( ) ,
310326 intercept_scid,
311327 counterparty_node_id
312328 ) ;
313329 intercept_scid
314330 } ,
315331 None => {
332+ log_info ! (
333+ self . logger,
334+ "TIMING: [LSPS4] handle_register_node_request scid_store.get_scid() took {}ms - No existing SCID" ,
335+ step_start. elapsed( ) . as_millis( )
336+ ) ;
337+ let gen_start = Instant :: now ( ) ;
316338 let intercept_scid = self . channel_manager . get_cm ( ) . get_intercept_scid ( ) ;
317339 log_info ! (
318340 self . logger,
319- "[LSPS4] Generated NEW intercept SCID {} for peer {}" ,
341+ "TIMING: [LSPS4] handle_register_node_request get_intercept_scid() took {}ms - Generated NEW intercept SCID {} for peer {}" ,
342+ gen_start. elapsed( ) . as_millis( ) ,
320343 intercept_scid,
321344 counterparty_node_id
322345 ) ;
346+ let store_start = Instant :: now ( ) ;
323347 self . scid_store . add_intercepted_scid ( intercept_scid, counterparty_node_id. clone ( ) )
324348 . map_err ( |e| {
325349 log_error ! (
@@ -336,7 +360,8 @@ where
336360 } ) ?;
337361 log_info ! (
338362 self . logger,
339- "[LSPS4] Successfully stored intercept SCID {} for peer {}" ,
363+ "TIMING: [LSPS4] handle_register_node_request scid_store.add_intercepted_scid() took {}ms - Successfully stored intercept SCID {} for peer {}" ,
364+ store_start. elapsed( ) . as_millis( ) ,
340365 intercept_scid,
341366 counterparty_node_id
342367 ) ;
@@ -360,7 +385,8 @@ where
360385
361386 log_info ! (
362387 self . logger,
363- "[LSPS4] RegisterNodeResponse enqueued successfully for peer {}" ,
388+ "TIMING: [LSPS4] handle_register_node_request TOTAL took {}ms for peer {}" ,
389+ fn_start. elapsed( ) . as_millis( ) ,
364390 counterparty_node_id
365391 ) ;
366392
@@ -474,6 +500,9 @@ where
474500 pub ( crate ) fn execute_htlc_actions (
475501 & self , actions : HtlcProcessingActions , their_node_id : PublicKey ,
476502 ) {
503+ let fn_start = Instant :: now ( ) ;
504+ log_info ! ( self . logger, "TIMING: [LSPS4] execute_htlc_actions START for peer {} with {} forwards" , their_node_id, actions. forwards. len( ) ) ;
505+
477506 // Execute forwards
478507 for forward_action in actions. forwards {
479508 log_debug ! (
@@ -485,6 +514,7 @@ where
485514 forward_action. skimmed_fee_msat
486515 ) ;
487516
517+ let fwd_start = Instant :: now ( ) ;
488518 if let Err ( e) = self . channel_manager . get_cm ( ) . forward_intercepted_htlc (
489519 forward_action. htlc . id ( ) ,
490520 & forward_action. channel_id ,
@@ -493,18 +523,21 @@ where
493523 ) {
494524 log_error ! ( self . logger, "Failed to forward intercepted HTLC: {:?}" , e) ;
495525 }
526+ log_info ! ( self . logger, "TIMING: [LSPS4] execute_htlc_actions forward_intercepted_htlc() took {}ms" , fwd_start. elapsed( ) . as_millis( ) ) ;
496527
497528 // Remove the HTLC from store after forwarding
529+ let rm_start = Instant :: now ( ) ;
498530 if let Err ( e) = self . htlc_store . remove ( & forward_action. htlc . id ( ) ) {
499531 log_error ! ( self . logger, "Failed to remove intercepted HTLC from store: {}" , e) ;
500532 }
533+ log_info ! ( self . logger, "TIMING: [LSPS4] execute_htlc_actions htlc_store.remove() took {}ms" , rm_start. elapsed( ) . as_millis( ) ) ;
501534 }
502535
503536 // Handle new channel opening
504537 if let Some ( channel_size_msat) = actions. new_channel_needed_msat {
505538 log_info ! (
506539 self . logger,
507- "Need a new channel with peer {} for {}msat to forward HTLCs" ,
540+ "TIMING: [LSPS4] execute_htlc_actions Need a new channel with peer {} for {}msat to forward HTLCs" ,
508541 their_node_id,
509542 channel_size_msat
510543 ) ;
@@ -516,18 +549,27 @@ where
516549 channel_count : actions. channel_count ,
517550 } ) ) ;
518551 }
552+
553+ log_info ! ( self . logger, "TIMING: [LSPS4] execute_htlc_actions TOTAL took {}ms" , fn_start. elapsed( ) . as_millis( ) ) ;
519554 }
520555
521556 /// Convenience function that calculates and executes HTLC actions in one call
522557 pub ( crate ) fn process_htlcs_for_peer (
523558 & self , their_node_id : PublicKey , htlcs : Vec < InterceptedHtlc > ,
524559 ) {
560+ let fn_start = Instant :: now ( ) ;
561+ let htlc_count = htlcs. len ( ) ;
562+ log_info ! ( self . logger, "TIMING: [LSPS4] process_htlcs_for_peer START for peer {} with {} HTLCs" , their_node_id, htlc_count) ;
563+
564+ let calc_start = Instant :: now ( ) ;
525565 let actions = self . calculate_htlc_actions_for_peer ( their_node_id, htlcs) ;
566+ log_info ! ( self . logger, "TIMING: [LSPS4] process_htlcs_for_peer calculate_htlc_actions_for_peer() took {}ms" , calc_start. elapsed( ) . as_millis( ) ) ;
526567
527568 log_info ! ( self . logger, "Calculated actions for peer {}: {:?}" , their_node_id, actions) ;
528569
529570 if actions. is_empty ( ) {
530571 log_debug ! ( self . logger, "No HTLCs to process for peer {}" , their_node_id) ;
572+ log_info ! ( self . logger, "TIMING: [LSPS4] process_htlcs_for_peer TOTAL took {}ms (no actions)" , fn_start. elapsed( ) . as_millis( ) ) ;
531573 return ;
532574 }
533575
@@ -542,6 +584,7 @@ where
542584 }
543585
544586 self . execute_htlc_actions ( actions, their_node_id) ;
587+ log_info ! ( self . logger, "TIMING: [LSPS4] process_htlcs_for_peer TOTAL took {}ms" , fn_start. elapsed( ) . as_millis( ) ) ;
545588 }
546589
547590 /// Persists the state of the service handler towards the given [`KVStore`] implementation.
0 commit comments