Skip to content

Commit 7ad5442

Browse files
committed
Implement scorer event handling in DefaultRouter
1 parent 8ca1acc commit 7ad5442

File tree

3 files changed

+36
-23
lines changed

3 files changed

+36
-23
lines changed

lightning-background-processor/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1037,7 +1037,7 @@ mod tests {
10371037
// Initiate the background processors to watch each node.
10381038
let data_dir = nodes[0].persister.get_data_dir();
10391039
let persister = Arc::new(Persister::new(data_dir));
1040-
let router = DefaultRouter::new(Arc::clone(&nodes[0].network_graph), Arc::clone(&nodes[0].logger), random_seed_bytes);
1040+
let router = DefaultRouter::new(Arc::clone(&nodes[0].network_graph), Arc::clone(&nodes[0].logger), random_seed_bytes, Arc::clone(&nodes[0].scorer));
10411041
let invoice_payer = Arc::new(InvoicePayer::new(Arc::clone(&nodes[0].node), router, Arc::clone(&nodes[0].scorer), Arc::clone(&nodes[0].logger), |_: &_| {}, Retry::Attempts(2)));
10421042
let event_handler = Arc::clone(&invoice_payer);
10431043
let bg_processor = BackgroundProcessor::start(persister, event_handler, nodes[0].chain_monitor.clone(), nodes[0].node.clone(), nodes[0].no_gossip_sync(), nodes[0].peer_manager.clone(), nodes[0].logger.clone(), Some(nodes[0].scorer.clone()));

lightning-invoice/src/payment.rs

Lines changed: 1 addition & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -674,13 +674,8 @@ where
674674

675675
match event {
676676
Event::PaymentPathFailed {
677-
payment_id, payment_hash, rejected_by_dest, path, short_channel_id, retry, ..
677+
payment_id, payment_hash, rejected_by_dest, retry, ..
678678
} => {
679-
if let Some(short_channel_id) = short_channel_id {
680-
let path = path.iter().collect::<Vec<_>>();
681-
self.scorer.lock().payment_path_failed(&path, *short_channel_id);
682-
}
683-
684679
if payment_id.is_none() {
685680
log_trace!(self.logger, "Payment {} has no id; not retrying", log_bytes!(payment_hash.0));
686681
} else if *rejected_by_dest {
@@ -699,29 +694,13 @@ where
699694
Event::PaymentFailed { payment_hash, .. } => {
700695
self.remove_cached_payment(&payment_hash);
701696
},
702-
Event::PaymentPathSuccessful { path, .. } => {
703-
let path = path.iter().collect::<Vec<_>>();
704-
self.scorer.lock().payment_path_successful(&path);
705-
},
706697
Event::PaymentSent { payment_hash, .. } => {
707698
let mut payment_cache = self.payment_cache.lock().unwrap();
708699
let attempts = payment_cache
709700
.remove(payment_hash)
710701
.map_or(1, |payment_info| payment_info.attempts.count + 1);
711702
log_trace!(self.logger, "Payment {} succeeded (attempts: {})", log_bytes!(payment_hash.0), attempts);
712703
},
713-
Event::ProbeSuccessful { payment_hash, path, .. } => {
714-
log_trace!(self.logger, "Probe payment {} of {}msat was successful", log_bytes!(payment_hash.0), path.last().unwrap().fee_msat);
715-
let path = path.iter().collect::<Vec<_>>();
716-
self.scorer.lock().probe_successful(&path);
717-
},
718-
Event::ProbeFailed { payment_hash, path, short_channel_id, .. } => {
719-
if let Some(short_channel_id) = short_channel_id {
720-
log_trace!(self.logger, "Probe payment {} of {}msat failed at channel {}", log_bytes!(payment_hash.0), path.last().unwrap().fee_msat, *short_channel_id);
721-
let path = path.iter().collect::<Vec<_>>();
722-
self.scorer.lock().probe_failed(&path, *short_channel_id);
723-
}
724-
},
725704
_ => {},
726705
}
727706

lightning-invoice/src/utils.rs

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ use lightning::util::logger::Logger;
2222
use secp256k1::PublicKey;
2323
use core::ops::Deref;
2424
use core::time::Duration;
25+
use lightning::util::events::{Event, EventHandler};
2526
use sync::Mutex;
2627

2728
#[cfg(feature = "std")]
@@ -484,6 +485,39 @@ impl<G: Deref<Target = NetworkGraph<L>>, L: Deref, S: Deref> Router for DefaultR
484485
}
485486
}
486487

488+
impl<G: Deref<Target = NetworkGraph<L>>, L: Deref, S: Deref> EventHandler for DefaultRouter<G, L, S> where
489+
L::Target: Logger,
490+
S::Target: for <'a> LockableScore<'a>,
491+
{
492+
fn handle_event(&self, event: &Event) {
493+
match event {
494+
Event::PaymentPathFailed { short_channel_id, path, .. } => {
495+
if let Some(short_channel_id) = short_channel_id {
496+
let path = path.iter().collect::<Vec<_>>();
497+
self.scorer.lock().payment_path_failed(&path, *short_channel_id);
498+
}
499+
},
500+
Event::PaymentPathSuccessful { path, ..} => {
501+
let path = path.iter().collect::<Vec<_>>();
502+
self.scorer.lock().payment_path_successful(&path);
503+
},
504+
Event::ProbeSuccessful { payment_hash, path, .. } => {
505+
log_trace!(self.logger, "Probe payment {} of {}msat was successful", log_bytes!(payment_hash.0), path.last().unwrap().fee_msat);
506+
let path = path.iter().collect::<Vec<_>>();
507+
self.scorer.lock().probe_successful(&path);
508+
},
509+
Event::ProbeFailed { payment_hash, path, short_channel_id, .. } => {
510+
if let Some(short_channel_id) = short_channel_id {
511+
log_trace!(self.logger, "Probe payment {} of {}msat failed at channel {}", log_bytes!(payment_hash.0), path.last().unwrap().fee_msat, *short_channel_id);
512+
let path = path.iter().collect::<Vec<_>>();
513+
self.scorer.lock().probe_failed(&path, *short_channel_id);
514+
}
515+
},
516+
_ => {},
517+
}
518+
}
519+
}
520+
487521
impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> Payer for ChannelManager<Signer, M, T, K, F, L>
488522
where
489523
M::Target: chain::Watch<Signer>,

0 commit comments

Comments
 (0)