Skip to content

Update BP NetworkGraph and Scorer persist frequency #2226

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Conversation

alecchendev
Copy link
Contributor

@alecchendev alecchendev commented Apr 25, 2023

Closes #2117.

For NetworkGraph, we normally wait an initial 60 seconds for an initial prune, but since that's likely too long for RGS, we allow pruning before the 60s timer when the RGS initial sync completes. For P2P it still waits the 60s, otherwise both prune/persist hourly as it currently does.

For Scorer, instead of persisting every 30 seconds, this persists each time the scorer is updated from an event, and once every hour similar to the network graph.

@@ -371,8 +372,7 @@ macro_rules! define_run_body {

have_pruned = true;
}
let prune_timer = if have_pruned { NETWORK_PRUNE_TIMER } else { FIRST_NETWORK_PRUNE_TIMER };
last_prune_call = $get_timer(prune_timer);
last_prune_call = $get_timer(NETWORK_PRUNE_TIMER);
}

if $timer_elapsed(&mut last_scorer_persist_call, SCORER_PERSIST_TIMER) {
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wondering is it still necessary to keep this regular 30s persist if we're persisting on every update to the scorer?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not too familiar with the scorer, but I don't think it does anything in the background to warrant persisting on a timer, as it mostly relies on datapoints received from events (cc @TheBlueMatt).

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It doesn't, indeed, though I also don't think there's any harm in persisting it once an hour with the graph, so would prefer to just leave it.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The timer for the scorer was set to persist every 30s, so I just changed it to an hour to be similar with the graph.

@codecov-commenter
Copy link

codecov-commenter commented Apr 25, 2023

Codecov Report

Patch coverage: 100.00% and project coverage change: +1.06 🎉

Comparison is base (ec3aa49) 91.56% compared to head (2afbdf5) 92.63%.

❗ Your organization is not using the GitHub App Integration. As a result you may experience degraded service beginning May 15th. Please install the Github App Integration for your organization. Read more.

Additional details and impacted files
@@            Coverage Diff             @@
##             main    #2226      +/-   ##
==========================================
+ Coverage   91.56%   92.63%   +1.06%     
==========================================
  Files         104      105       +1     
  Lines       51749    70952   +19203     
  Branches    51749    70952   +19203     
==========================================
+ Hits        47386    65725   +18339     
- Misses       4363     5227     +864     
Impacted Files Coverage Δ
lightning-background-processor/src/lib.rs 87.62% <100.00%> (+4.41%) ⬆️

... and 43 files with indirect coverage changes

☔ View full report in Codecov by Sentry.
📢 Do you have feedback about the report comment? Let us know in this issue.

@wpaulino wpaulino added this to the 0.0.116 milestone Apr 28, 2023
@@ -352,8 +347,7 @@ macro_rules! define_run_body {
// falling back to our usual hourly prunes. This avoids short-lived clients never
// pruning their network graph. We run once 60 seconds after startup before
// continuing our normal cadence.
let prune_timer = if have_pruned { NETWORK_PRUNE_TIMER } else { FIRST_NETWORK_PRUNE_TIMER };
if $timer_elapsed(&mut last_prune_call, prune_timer) {
if !have_pruned || $timer_elapsed(&mut last_prune_call, NETWORK_PRUNE_TIMER) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure if we want to prune immediately when syncing via P2P. Previously, we'd wait 60 seconds, which gave us some time to sync with peers any updates that happened while offline. If we happened to be offline for a while, we may end up pruning a large portion of our graph before we sync with any peers, just to add them back once syncing completes. Maybe we should also expose a notion of "initial sync" when syncing via P2P that checks whether we've done a sufficient amount of syncs?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yea, indeed, probably we should not.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I couldn't find a great way to expose when an "initial sync" would be considered over for P2P, since IIUC we basically do an "unofficial" sync of just getting either a full dump (no-std) or latest 2 weeks (std) through the gossip timestamp filter for our first 5 peers we connect to? For now I just left the 60s initial prune timer for P2P but allowed pruning before this once RGS initial sync has completed.

@@ -371,8 +372,7 @@ macro_rules! define_run_body {

have_pruned = true;
}
let prune_timer = if have_pruned { NETWORK_PRUNE_TIMER } else { FIRST_NETWORK_PRUNE_TIMER };
last_prune_call = $get_timer(prune_timer);
last_prune_call = $get_timer(NETWORK_PRUNE_TIMER);
}

if $timer_elapsed(&mut last_scorer_persist_call, SCORER_PERSIST_TIMER) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not too familiar with the scorer, but I don't think it does anything in the background to warrant persisting on a timer, as it mostly relies on datapoints received from events (cc @TheBlueMatt).

Previously we would wait 60 seconds after startup, however for RGS we
prune/persist after its initial sync since 60 seconds is likely too
long.
Now that we persist the scorer upon events, we extend timer persistence
from 30 seconds to 1 hour, similar to network graph persistence.
@alecchendev alecchendev force-pushed the 2023-04-persist-network-graph-on-rgs branch from 8ac39c9 to 2afbdf5 Compare May 15, 2023 23:56
@TheBlueMatt TheBlueMatt merged commit 6aca7e1 into lightningdevkit:main May 20, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Persist NetworkGraph in BP upon RGS updates
4 participants