diff --git a/plugins/renepay/main.c b/plugins/renepay/main.c index 5ee7de946..8ae01d60a 100644 --- a/plugins/renepay/main.c +++ b/plugins/renepay/main.c @@ -32,7 +32,7 @@ static void memleak_mark(struct plugin *p, struct htable *memtable) memleak_scan_htable(memtable, &pay_plugin->uncertainty->chan_extra_map->raw); memleak_scan_htable(memtable, &pay_plugin->payment_map->raw); - memleak_scan_htable(memtable, &pay_plugin->route_map->raw); + memleak_scan_htable(memtable, &pay_plugin->pending_routes->raw); } static const char *init(struct plugin *p, @@ -70,8 +70,8 @@ static const char *init(struct plugin *p, pay_plugin->payment_map = tal(pay_plugin, struct payment_map); payment_map_init(pay_plugin->payment_map); - pay_plugin->route_map = tal(pay_plugin,struct route_map); - route_map_init(pay_plugin->route_map); + pay_plugin->pending_routes = tal(pay_plugin, struct route_map); + route_map_init(pay_plugin->pending_routes); pay_plugin->gossmap = gossmap_load(pay_plugin, GOSSIP_STORE_FILENAME, diff --git a/plugins/renepay/payplugin.h b/plugins/renepay/payplugin.h index d9dd35899..7c647ad56 100644 --- a/plugins/renepay/payplugin.h +++ b/plugins/renepay/payplugin.h @@ -64,7 +64,7 @@ struct pay_plugin { struct uncertainty *uncertainty; /* Pending sendpays (to match notifications to). */ - struct route_map *route_map; + struct route_map *pending_routes; bool debug_mcf; bool debug_payflow; diff --git a/plugins/renepay/routetracker.c b/plugins/renepay/routetracker.c index c60a164b0..737a9e43c 100644 --- a/plugins/renepay/routetracker.c +++ b/plugins/renepay/routetracker.c @@ -25,9 +25,6 @@ struct routetracker *new_routetracker(const tal_t *ctx, struct payment *payment) rt->sent_routes = tal(rt, struct route_map); route_map_init(rt->sent_routes); - rt->pending_routes = tal(rt, struct route_map); - route_map_init(rt->pending_routes); - rt->finalized_routes = tal_arr(rt, struct route *, 0); return rt; } @@ -46,11 +43,6 @@ void routetracker_cleanup(struct routetracker *routetracker) static void routetracker_add_to_final(struct routetracker *routetracker, struct route *route) { - if (!route_map_del(routetracker->pending_routes, route)) - plugin_err(pay_plugin->plugin, - "%s: route with key %s is not in pending_routes", - __PRETTY_FUNCTION__, - fmt_routekey(tmpctx, &route->key)); tal_arr_expand(&routetracker->finalized_routes, route); tal_steal(routetracker, route); } @@ -71,7 +63,7 @@ static void remove_route(struct route *route, struct route_map *map) } static void route_sent_register(struct routetracker *routetracker, - struct route *route) + struct route *route STEALS) { route_map_add(routetracker->sent_routes, route); tal_steal(routetracker, route); @@ -80,7 +72,7 @@ static void route_sendpay_fail(struct routetracker *routetracker, struct route *route TAKES) { if (!route_map_del(routetracker->sent_routes, route)) - plugin_log(pay_plugin->plugin, LOG_UNUSUAL, + plugin_err(pay_plugin->plugin, "%s: route (%s) is not marked as sent", __PRETTY_FUNCTION__, fmt_routekey(tmpctx, &route->key)); @@ -103,11 +95,14 @@ void route_pending_register(struct routetracker *routetracker, assert(payment->groupid == route->key.groupid); /* we already keep track of this route */ - if (route_map_get(routetracker->pending_routes, &route->key)) - return; - + if (route_map_get(pay_plugin->pending_routes, &route->key)) + plugin_err(pay_plugin->plugin, + "%s: tracking a route (%s) duplicate?", + __PRETTY_FUNCTION__, + fmt_routekey(tmpctx, &route->key)); + if (!route_map_del(routetracker->sent_routes, route)) - plugin_log(pay_plugin->plugin, LOG_DBG, + plugin_err(pay_plugin->plugin, "%s: tracking a route (%s) not computed by this " "payment call", __PRETTY_FUNCTION__, @@ -115,10 +110,10 @@ void route_pending_register(struct routetracker *routetracker, uncertainty_commit_htlcs(pay_plugin->uncertainty, route); - if (!route_map_add(routetracker->pending_routes, route) || - !tal_steal(routetracker, route) || - !route_map_add(pay_plugin->route_map, route) || - !tal_add_destructor2(route, remove_route, pay_plugin->route_map)) + if (!tal_steal(pay_plugin, route) || + !route_map_add(pay_plugin->pending_routes, route) || + !tal_add_destructor2(route, remove_route, + pay_plugin->pending_routes)) plugin_err(pay_plugin->plugin, "%s: failed to register route.", __PRETTY_FUNCTION__); @@ -133,28 +128,6 @@ void route_pending_register(struct routetracker *routetracker, } } -bool routetracker_get_amount(struct routetracker *routetracker, - struct amount_msat *amount, - struct amount_msat *amount_sent) -{ - assert(routetracker); - assert(amount); - assert(amount_sent); - - *amount = AMOUNT_MSAT(0); - *amount_sent = AMOUNT_MSAT(0); - - struct route_map *rmap = routetracker->pending_routes; - struct route_map_iter it; - for (struct route *r = route_map_first(rmap, &it); r; - r = route_map_next(rmap, &it)) { - if (!amount_msat_add(amount, *amount, route_delivers(r)) || - !amount_msat_add(amount_sent, *amount_sent, route_sends(r))) - return false; - } - return true; -} - static void route_result_collected(struct routetracker *routetracker, struct route *route TAKES) { @@ -329,7 +302,7 @@ struct command_result *notification_sendpay_failure(struct command *cmd, assert(payment->routetracker); struct route *route = - route_map_get(payment->routetracker->pending_routes, key); + route_map_get(pay_plugin->pending_routes, key); if (!route) { /* This can happen if payment is first tried with renepay and * then retried using another payment plugin. */ @@ -388,7 +361,7 @@ struct command_result *notification_sendpay_success(struct command *cmd, assert(payment->routetracker); struct route *route = - route_map_get(payment->routetracker->pending_routes, key); + route_map_get(pay_plugin->pending_routes, key); if (!route) { /* This can happen if payment is first tried with renepay and * then retried using another payment plugin. */ diff --git a/plugins/renepay/routetracker.h b/plugins/renepay/routetracker.h index b1ad6d32e..39f250fd1 100644 --- a/plugins/renepay/routetracker.h +++ b/plugins/renepay/routetracker.h @@ -10,12 +10,13 @@ struct routetracker{ /* Routes that we sendpay and are still waiting for rpc returning * success. */ struct route_map *sent_routes; - struct route_map *pending_routes; + + /* Routes that have concluded (either SENDPAY_FAILED or + * SENDPAY_COMPLETE). */ struct route **finalized_routes; }; struct routetracker *new_routetracker(const tal_t *ctx, struct payment *payment); -// bool routetracker_is_ready(const struct routetracker *routetracker); void routetracker_cleanup(struct routetracker *routetracker); bool routetracker_have_results(struct routetracker *routetracker); @@ -52,11 +53,6 @@ struct command_result *notification_sendpay_success(struct command *cmd, void route_failure_register(struct routetracker *routetracker, struct route *route); -/* How much is the amount being tracked. */ -bool routetracker_get_amount(struct routetracker *routetracker, - struct amount_msat *amount, - struct amount_msat *amount_sent); - // FIXME: double-check that we actually get one notification for each sendpay, // ie. that after some time we don't have yet pending sendpays for old failed or // successful payments that we havent processed because we haven't received the