mirror of
https://github.com/ElementsProject/lightning.git
synced 2025-03-26 20:30:59 +01:00
delforward: tally up deleted forwards so that getinfo's fees_collected_msat
doesn't change.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> Fixes: #5627
This commit is contained in:
parent
cafa1a8c65
commit
6eac8dfe3c
2 changed files with 38 additions and 1 deletions
|
@ -3089,6 +3089,8 @@ def test_autoclean(node_factory):
|
||||||
assert l2.rpc.autoclean_status()['autoclean']['failedforwards']['cleaned'] == 1
|
assert l2.rpc.autoclean_status()['autoclean']['failedforwards']['cleaned'] == 1
|
||||||
assert l2.rpc.autoclean_status()['autoclean']['succeededforwards']['cleaned'] == 0
|
assert l2.rpc.autoclean_status()['autoclean']['succeededforwards']['cleaned'] == 0
|
||||||
|
|
||||||
|
amt_before = l2.rpc.getinfo()['fees_collected_msat']
|
||||||
|
|
||||||
# Clean succeeded ones
|
# Clean succeeded ones
|
||||||
l2.stop()
|
l2.stop()
|
||||||
l2.daemon.opts['autoclean-succeededforwards-age'] = 2
|
l2.daemon.opts['autoclean-succeededforwards-age'] = 2
|
||||||
|
@ -3098,6 +3100,9 @@ def test_autoclean(node_factory):
|
||||||
assert l2.rpc.autoclean_status()['autoclean']['failedforwards']['cleaned'] == 1
|
assert l2.rpc.autoclean_status()['autoclean']['failedforwards']['cleaned'] == 1
|
||||||
assert l2.rpc.autoclean_status()['autoclean']['succeededforwards']['cleaned'] == 1
|
assert l2.rpc.autoclean_status()['autoclean']['succeededforwards']['cleaned'] == 1
|
||||||
|
|
||||||
|
# We still see correct total in getinfo!
|
||||||
|
assert l2.rpc.getinfo()['fees_collected_msat'] == amt_before
|
||||||
|
|
||||||
|
|
||||||
def test_autoclean_once(node_factory):
|
def test_autoclean_once(node_factory):
|
||||||
l1, l2, l3 = node_factory.line_graph(3, opts={'may_reconnect': True},
|
l1, l2, l3 = node_factory.line_graph(3, opts={'may_reconnect': True},
|
||||||
|
|
|
@ -4506,7 +4506,7 @@ notify:
|
||||||
struct amount_msat wallet_total_forward_fees(struct wallet *w)
|
struct amount_msat wallet_total_forward_fees(struct wallet *w)
|
||||||
{
|
{
|
||||||
struct db_stmt *stmt;
|
struct db_stmt *stmt;
|
||||||
struct amount_msat total;
|
struct amount_msat total, deleted;
|
||||||
bool res;
|
bool res;
|
||||||
|
|
||||||
stmt = db_prepare_v2(w->db, SQL("SELECT"
|
stmt = db_prepare_v2(w->db, SQL("SELECT"
|
||||||
|
@ -4522,6 +4522,12 @@ struct amount_msat wallet_total_forward_fees(struct wallet *w)
|
||||||
db_col_amount_msat(stmt, "CAST(COALESCE(SUM(in_msatoshi - out_msatoshi), 0) AS BIGINT)", &total);
|
db_col_amount_msat(stmt, "CAST(COALESCE(SUM(in_msatoshi - out_msatoshi), 0) AS BIGINT)", &total);
|
||||||
tal_free(stmt);
|
tal_free(stmt);
|
||||||
|
|
||||||
|
deleted = amount_msat(db_get_intvar(w->db, "deleted_forward_fees", 0));
|
||||||
|
if (!amount_msat_add(&total, total, deleted))
|
||||||
|
db_fatal("Adding forward fees %s + %s overflowed",
|
||||||
|
type_to_string(tmpctx, struct amount_msat, &total),
|
||||||
|
type_to_string(tmpctx, struct amount_msat, &deleted));
|
||||||
|
|
||||||
return total;
|
return total;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4694,6 +4700,32 @@ bool wallet_forward_delete(struct wallet *w,
|
||||||
struct db_stmt *stmt;
|
struct db_stmt *stmt;
|
||||||
bool changed;
|
bool changed;
|
||||||
|
|
||||||
|
/* When deleting settled ones, we have to add to deleted_forward_fees! */
|
||||||
|
if (state == FORWARD_SETTLED) {
|
||||||
|
/* Of course, it might not be settled: don't add if they're wrong! */
|
||||||
|
stmt = db_prepare_v2(w->db, SQL("SELECT"
|
||||||
|
" in_msatoshi - out_msatoshi"
|
||||||
|
" FROM forwards "
|
||||||
|
" WHERE in_channel_scid = ?"
|
||||||
|
" AND in_htlc_id = ?"
|
||||||
|
" AND state = ?;"));
|
||||||
|
db_bind_scid(stmt, 0, chan_in);
|
||||||
|
db_bind_u64(stmt, 1, htlc_id);
|
||||||
|
db_bind_int(stmt, 2, wallet_forward_status_in_db(FORWARD_SETTLED));
|
||||||
|
db_query_prepared(stmt);
|
||||||
|
|
||||||
|
if (db_step(stmt)) {
|
||||||
|
struct amount_msat deleted;
|
||||||
|
|
||||||
|
db_col_amount_msat(stmt, "in_msatoshi - out_msatoshi", &deleted);
|
||||||
|
deleted.millisatoshis += /* Raw: db access */
|
||||||
|
db_get_intvar(w->db, "deleted_forward_fees", 0);
|
||||||
|
db_set_intvar(w->db, "deleted_forward_fees",
|
||||||
|
deleted.millisatoshis); /* Raw: db access */
|
||||||
|
}
|
||||||
|
tal_free(stmt);
|
||||||
|
}
|
||||||
|
|
||||||
stmt = db_prepare_v2(w->db,
|
stmt = db_prepare_v2(w->db,
|
||||||
SQL("DELETE FROM forwards"
|
SQL("DELETE FROM forwards"
|
||||||
" WHERE in_channel_scid = ?"
|
" WHERE in_channel_scid = ?"
|
||||||
|
|
Loading…
Add table
Reference in a new issue