mirror of
https://github.com/ElementsProject/lightning.git
synced 2025-03-26 20:30:59 +01:00
listpeerchannels: use struct channel stats, don't fetch from db.
This avoids a db lookup on every iteration of listpeerchannels, which can be slow on large nodes (Postgres, I assume). We can now simply add the fields we want to channel load, and remove wallet_channel_stats_load entirely. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
parent
762d624810
commit
3aace10828
4 changed files with 36 additions and 68 deletions
|
@ -818,7 +818,6 @@ static void NON_NULL_ARGS(1, 2, 4, 5) json_add_channel(struct command *cmd,
|
|||
const struct peer *peer)
|
||||
{
|
||||
struct lightningd *ld = cmd->ld;
|
||||
struct channel_stats channel_stats;
|
||||
struct amount_msat funding_msat;
|
||||
struct amount_sat peer_funded_sats;
|
||||
struct state_change_entry *state_changes;
|
||||
|
@ -1191,27 +1190,26 @@ static void NON_NULL_ARGS(1, 2, 4, 5) json_add_channel(struct command *cmd,
|
|||
json_array_end(response);
|
||||
|
||||
/* Provide channel statistics */
|
||||
wallet_channel_stats_load(ld->wallet, channel->dbid, &channel_stats);
|
||||
json_add_u64(response, "in_payments_offered",
|
||||
channel_stats.in_payments_offered);
|
||||
channel->stats.in_payments_offered);
|
||||
json_add_amount_msat(response,
|
||||
"in_offered_msat",
|
||||
channel_stats.in_msatoshi_offered);
|
||||
channel->stats.in_msatoshi_offered);
|
||||
json_add_u64(response, "in_payments_fulfilled",
|
||||
channel_stats.in_payments_fulfilled);
|
||||
channel->stats.in_payments_fulfilled);
|
||||
json_add_amount_msat(response,
|
||||
"in_fulfilled_msat",
|
||||
channel_stats.in_msatoshi_fulfilled);
|
||||
channel->stats.in_msatoshi_fulfilled);
|
||||
json_add_u64(response, "out_payments_offered",
|
||||
channel_stats.out_payments_offered);
|
||||
channel->stats.out_payments_offered);
|
||||
json_add_amount_msat(response,
|
||||
"out_offered_msat",
|
||||
channel_stats.out_msatoshi_offered);
|
||||
channel->stats.out_msatoshi_offered);
|
||||
json_add_u64(response, "out_payments_fulfilled",
|
||||
channel_stats.out_payments_fulfilled);
|
||||
channel->stats.out_payments_fulfilled);
|
||||
json_add_amount_msat(response,
|
||||
"out_fulfilled_msat",
|
||||
channel_stats.out_msatoshi_fulfilled);
|
||||
channel->stats.out_msatoshi_fulfilled);
|
||||
|
||||
json_add_htlcs(ld, response, channel);
|
||||
json_object_end(response);
|
||||
|
|
|
@ -1023,9 +1023,6 @@ const char *version(void)
|
|||
/* Generated stub for wallet_channel_save */
|
||||
void wallet_channel_save(struct wallet *w UNNEEDED, struct channel *chan UNNEEDED)
|
||||
{ fprintf(stderr, "wallet_channel_save called!\n"); abort(); }
|
||||
/* Generated stub for wallet_channel_stats_load */
|
||||
void wallet_channel_stats_load(struct wallet *w UNNEEDED, u64 cdbid UNNEEDED, struct channel_stats *stats UNNEEDED)
|
||||
{ fprintf(stderr, "wallet_channel_stats_load called!\n"); abort(); }
|
||||
/* Generated stub for wallet_channeltxs_add */
|
||||
void wallet_channeltxs_add(struct wallet *w UNNEEDED, struct channel *chan UNNEEDED,
|
||||
const int type UNNEEDED, const struct bitcoin_txid *txid UNNEEDED,
|
||||
|
|
|
@ -1719,7 +1719,26 @@ static struct channel *wallet_stmt2channel(struct wallet *w, struct db_stmt *stm
|
|||
db_col_ignore(stmt, "remote_htlc_maximum_msat");
|
||||
}
|
||||
|
||||
wallet_channel_stats_load(w, db_col_u64(stmt, "id"), &stats);
|
||||
stats.in_payments_offered
|
||||
= db_col_int_or_default(stmt, "in_payments_offered", 0);
|
||||
stats.in_payments_fulfilled
|
||||
= db_col_int_or_default(stmt, "in_payments_fulfilled", 0);
|
||||
db_col_amount_msat_or_default(stmt, "in_msatoshi_offered",
|
||||
&stats.in_msatoshi_offered,
|
||||
AMOUNT_MSAT(0));
|
||||
db_col_amount_msat_or_default(stmt, "in_msatoshi_fulfilled",
|
||||
&stats.in_msatoshi_fulfilled,
|
||||
AMOUNT_MSAT(0));
|
||||
stats.out_payments_offered
|
||||
= db_col_int_or_default(stmt, "out_payments_offered", 0);
|
||||
stats.out_payments_fulfilled
|
||||
= db_col_int_or_default(stmt, "out_payments_fulfilled", 0);
|
||||
db_col_amount_msat_or_default(stmt, "out_msatoshi_offered",
|
||||
&stats.out_msatoshi_offered,
|
||||
AMOUNT_MSAT(0));
|
||||
db_col_amount_msat_or_default(stmt, "out_msatoshi_fulfilled",
|
||||
&stats.out_msatoshi_fulfilled,
|
||||
AMOUNT_MSAT(0));
|
||||
|
||||
chan = new_channel(peer, db_col_u64(stmt, "id"),
|
||||
&wshachain,
|
||||
|
@ -1977,6 +1996,14 @@ static bool wallet_channels_load_active(struct wallet *w)
|
|||
", remote_htlc_minimum_msat"
|
||||
", remote_htlc_maximum_msat"
|
||||
", last_stable_connection"
|
||||
", in_payments_offered"
|
||||
", in_payments_fulfilled"
|
||||
", in_msatoshi_offered"
|
||||
", in_msatoshi_fulfilled"
|
||||
", out_payments_offered"
|
||||
", out_payments_fulfilled"
|
||||
", out_msatoshi_offered"
|
||||
", out_msatoshi_fulfilled"
|
||||
" FROM channels"
|
||||
" WHERE state != ?;")); //? 0
|
||||
db_bind_int(stmt, CLOSED);
|
||||
|
@ -2080,51 +2107,6 @@ void wallet_channel_stats_incr_out_fulfilled(struct wallet *w, u64 id,
|
|||
wallet_channel_stats_incr_x(w, "out", "fulfilled", id, m);
|
||||
}
|
||||
|
||||
void wallet_channel_stats_load(struct wallet *w,
|
||||
u64 id,
|
||||
struct channel_stats *stats)
|
||||
{
|
||||
struct db_stmt *stmt;
|
||||
int res;
|
||||
stmt = db_prepare_v2(w->db, SQL(
|
||||
"SELECT"
|
||||
" in_payments_offered, in_payments_fulfilled"
|
||||
", in_msatoshi_offered, in_msatoshi_fulfilled"
|
||||
", out_payments_offered, out_payments_fulfilled"
|
||||
", out_msatoshi_offered, out_msatoshi_fulfilled"
|
||||
" FROM channels"
|
||||
" WHERE id = ?"));
|
||||
db_bind_u64(stmt, id);
|
||||
db_query_prepared(stmt);
|
||||
|
||||
res = db_step(stmt);
|
||||
|
||||
/* This must succeed, since we know the channel exists */
|
||||
assert(res);
|
||||
|
||||
stats->in_payments_offered
|
||||
= db_col_int_or_default(stmt, "in_payments_offered", 0);
|
||||
stats->in_payments_fulfilled
|
||||
= db_col_int_or_default(stmt, "in_payments_fulfilled", 0);
|
||||
db_col_amount_msat_or_default(stmt, "in_msatoshi_offered",
|
||||
&stats->in_msatoshi_offered,
|
||||
AMOUNT_MSAT(0));
|
||||
db_col_amount_msat_or_default(stmt, "in_msatoshi_fulfilled",
|
||||
&stats->in_msatoshi_fulfilled,
|
||||
AMOUNT_MSAT(0));
|
||||
stats->out_payments_offered
|
||||
= db_col_int_or_default(stmt, "out_payments_offered", 0);
|
||||
stats->out_payments_fulfilled
|
||||
= db_col_int_or_default(stmt, "out_payments_fulfilled", 0);
|
||||
db_col_amount_msat_or_default(stmt, "out_msatoshi_offered",
|
||||
&stats->out_msatoshi_offered,
|
||||
AMOUNT_MSAT(0));
|
||||
db_col_amount_msat_or_default(stmt, "out_msatoshi_fulfilled",
|
||||
&stats->out_msatoshi_fulfilled,
|
||||
AMOUNT_MSAT(0));
|
||||
tal_free(stmt);
|
||||
}
|
||||
|
||||
u32 wallet_blocks_maxheight(struct wallet *w)
|
||||
{
|
||||
u32 max = 0;
|
||||
|
|
|
@ -715,15 +715,6 @@ void wallet_channel_stats_incr_in_fulfilled(struct wallet *w, u64 cdbid, struct
|
|||
void wallet_channel_stats_incr_out_offered(struct wallet *w, u64 cdbid, struct amount_msat msatoshi);
|
||||
void wallet_channel_stats_incr_out_fulfilled(struct wallet *w, u64 cdbid, struct amount_msat msatoshi);
|
||||
|
||||
/**
|
||||
* wallet_channel_stats_load - Load channel statistics
|
||||
*
|
||||
* @w: wallet containing the channel
|
||||
* @cdbid: channel database id
|
||||
* @stats: location to load statistics to
|
||||
*/
|
||||
void wallet_channel_stats_load(struct wallet *w, u64 cdbid, struct channel_stats *stats);
|
||||
|
||||
/**
|
||||
* Retrieve the blockheight of the last block processed by lightningd.
|
||||
*
|
||||
|
|
Loading…
Add table
Reference in a new issue