Skip to content

Commit

Permalink
pay: Cleanup the route applicability checks for channel hints
Browse files Browse the repository at this point in the history
I previously mistyped the rather lengthy conditions for failures, so
let's dissect it into its smaller components and add rationale behind
the individual parts of the decision.
  • Loading branch information
cdecker authored and rustyrussell committed Nov 17, 2020
1 parent 4d6b4a0 commit 313976e
Showing 1 changed file with 12 additions and 6 deletions.
18 changes: 12 additions & 6 deletions plugins/libplugin-pay.c
Original file line number Diff line number Diff line change
Expand Up @@ -470,6 +470,7 @@ static struct channel_hint *payment_chanhints_get(struct payment *p,
* prior application (`remove=true`). */
static bool payment_chanhints_apply_route(struct payment *p, bool remove)
{
bool apply;
struct route_hop *curhop;
struct channel_hint *curhint;
struct payment *root = payment_root(p);
Expand All @@ -489,12 +490,17 @@ static bool payment_chanhints_apply_route(struct payment *p, bool remove)
if (!curhint)
continue;

/* A failure can happen if we add an HTLC, and either
* the local htlc_budget is exhausted, or the capacity
* is exceeded. */
if ((curhint->local && curhint->htlc_budget <= 0) ||
amount_msat_greater(curhop->amount,
curhint->estimated_capacity)) {
/* For local channels we check that we don't overwhelm
* them with too many HTLCs. */
apply = (!curhint->local) || curhint->htlc_budget > 0;

/* For all channels we check that they have a
* sufficiently large estimated capacity to have some
* chance of succeeding. */
apply &= amount_msat_greater(curhint->estimated_capacity,
curhop->amount);

if (!apply) {
/* This can happen in case of multiple
* concurrent getroute calls using the
* same channel_hints, no biggy, it's
Expand Down

0 comments on commit 313976e

Please sign in to comment.