Skip to content

Commit 2afbdf5

Browse files
committed
Persist scorer upon update based on event handling
Now that we persist the scorer upon events, we extend timer persistence from 30 seconds to 1 hour, similar to network graph persistence.
1 parent ad8ab4d commit 2afbdf5

File tree

1 file changed

+28
-5
lines changed
  • lightning-background-processor/src

1 file changed

+28
-5
lines changed

lightning-background-processor/src/lib.rs

+28-5
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ const PING_TIMER: u64 = 1;
107107
const NETWORK_PRUNE_TIMER: u64 = 60 * 60;
108108

109109
#[cfg(not(test))]
110-
const SCORER_PERSIST_TIMER: u64 = 30;
110+
const SCORER_PERSIST_TIMER: u64 = 60 * 60;
111111
#[cfg(test)]
112112
const SCORER_PERSIST_TIMER: u64 = 1;
113113

@@ -235,9 +235,11 @@ fn handle_network_graph_update<L: Deref>(
235235
}
236236
}
237237

238+
/// Updates scorer based on event and returns whether an update occurred so we can decide whether
239+
/// to persist.
238240
fn update_scorer<'a, S: 'static + Deref<Target = SC> + Send + Sync, SC: 'a + WriteableScore<'a>>(
239241
scorer: &'a S, event: &Event
240-
) {
242+
) -> bool {
241243
let mut score = scorer.lock();
242244
match event {
243245
Event::PaymentPathFailed { ref path, short_channel_id: Some(scid), .. } => {
@@ -257,8 +259,9 @@ fn update_scorer<'a, S: 'static + Deref<Target = SC> + Send + Sync, SC: 'a + Wri
257259
Event::ProbeFailed { path, short_channel_id: Some(scid), .. } => {
258260
score.probe_failed(path, *scid);
259261
},
260-
_ => {},
262+
_ => return false,
261263
}
264+
true
262265
}
263266

264267
macro_rules! define_run_body {
@@ -629,12 +632,19 @@ where
629632
let network_graph = gossip_sync.network_graph();
630633
let event_handler = &event_handler;
631634
let scorer = &scorer;
635+
let logger = &logger;
636+
let persister = &persister;
632637
async move {
633638
if let Some(network_graph) = network_graph {
634639
handle_network_graph_update(network_graph, &event)
635640
}
636641
if let Some(ref scorer) = scorer {
637-
update_scorer(scorer, &event);
642+
if update_scorer(scorer, &event) {
643+
log_trace!(logger, "Persisting scorer after update");
644+
if let Err(e) = persister.persist_scorer(&scorer) {
645+
log_error!(logger, "Error: Failed to persist scorer, check your disk and permissions {}", e)
646+
}
647+
}
638648
}
639649
event_handler(event).await;
640650
}
@@ -772,7 +782,12 @@ impl BackgroundProcessor {
772782
handle_network_graph_update(network_graph, &event)
773783
}
774784
if let Some(ref scorer) = scorer {
775-
update_scorer(scorer, &event);
785+
if update_scorer(scorer, &event) {
786+
log_trace!(logger, "Persisting scorer after update");
787+
if let Err(e) = persister.persist_scorer(&scorer) {
788+
log_error!(logger, "Error: Failed to persist scorer, check your disk and permissions {}", e)
789+
}
790+
}
776791
}
777792
event_handler.handle_event(event);
778793
};
@@ -1724,6 +1739,10 @@ mod tests {
17241739
if !std::thread::panicking() {
17251740
bg_processor.stop().unwrap();
17261741
}
1742+
1743+
let log_entries = nodes[0].logger.lines.lock().unwrap();
1744+
let expected_log = "Persisting scorer after update".to_string();
1745+
assert_eq!(*log_entries.get(&("lightning_background_processor".to_string(), expected_log)).unwrap(), 5);
17271746
}
17281747

17291748
#[tokio::test]
@@ -1766,6 +1785,10 @@ mod tests {
17661785
let t2 = tokio::spawn(async move {
17671786
do_test_payment_path_scoring!(nodes, receiver.recv().await);
17681787
exit_sender.send(()).unwrap();
1788+
1789+
let log_entries = nodes[0].logger.lines.lock().unwrap();
1790+
let expected_log = "Persisting scorer after update".to_string();
1791+
assert_eq!(*log_entries.get(&("lightning_background_processor".to_string(), expected_log)).unwrap(), 5);
17691792
});
17701793

17711794
let (r1, r2) = tokio::join!(t1, t2);

0 commit comments

Comments
 (0)