mirror of
https://github.com/aljazceru/lightning.git
synced 2026-01-06 07:34:21 +01:00
lightingd: do a local short_channel_id lookup for forwarding.
Even without optimization, it's faster to walk all the channels than ping another daemon and wait for the response. Changelog-Changed: Forwarding messages is now much faster (less inter-daemon traffic) Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
@@ -73,15 +73,6 @@ msgdata,gossip_ping_reply,totlen,u16,
|
||||
msgtype,gossip_dev_set_max_scids_encode_size,3030
|
||||
msgdata,gossip_dev_set_max_scids_encode_size,max,u32,
|
||||
|
||||
# Given a short_channel_id, return the other endpoint (or none if DNE)
|
||||
msgtype,gossip_get_channel_peer,3009
|
||||
msgdata,gossip_get_channel_peer,channel_id,short_channel_id,
|
||||
|
||||
msgtype,gossip_get_channel_peer_reply,3109
|
||||
msgdata,gossip_get_channel_peer_reply,peer_id,?node_id,
|
||||
msgdata,gossip_get_channel_peer_reply,stripped_update_len,u16,
|
||||
msgdata,gossip_get_channel_peer_reply,stripped_update,u8,stripped_update_len
|
||||
|
||||
# Given a short_channel_id, return the latest (stripped) update for error msg.
|
||||
msgtype,gossip_get_stripped_cupdate,3010
|
||||
msgdata,gossip_get_stripped_cupdate,channel_id,short_channel_id,
|
||||
|
||||
|
Can't render this file because it has a wrong number of fields in line 6.
|
@@ -1335,48 +1335,6 @@ static struct io_plan *dev_gossip_set_time(struct io_conn *conn,
|
||||
}
|
||||
#endif /* DEVELOPER */
|
||||
|
||||
/*~ lightningd: so, tell me about this channel, so we can forward to it. */
|
||||
static struct io_plan *get_channel_peer(struct io_conn *conn,
|
||||
struct daemon *daemon, const u8 *msg)
|
||||
{
|
||||
struct short_channel_id scid;
|
||||
struct local_chan *local_chan;
|
||||
const struct node_id *key;
|
||||
const u8 *stripped_update;
|
||||
|
||||
if (!fromwire_gossip_get_channel_peer(msg, &scid))
|
||||
master_badmsg(WIRE_GOSSIP_GET_CHANNEL_PEER, msg);
|
||||
|
||||
local_chan = local_chan_map_get(&daemon->rstate->local_chan_map, &scid);
|
||||
if (!local_chan) {
|
||||
status_debug("Failed to resolve local channel %s",
|
||||
type_to_string(tmpctx, struct short_channel_id, &scid));
|
||||
key = NULL;
|
||||
stripped_update = NULL;
|
||||
} else {
|
||||
const struct half_chan *hc;
|
||||
|
||||
key = &local_chan->chan->nodes[!local_chan->direction]->id;
|
||||
/* Since we're going to use it, make sure it's up-to-date. */
|
||||
refresh_local_channel(daemon, local_chan, false);
|
||||
|
||||
hc = &local_chan->chan->half[local_chan->direction];
|
||||
if (is_halfchan_defined(hc)) {
|
||||
const u8 *update;
|
||||
|
||||
update = gossip_store_get(tmpctx, daemon->rstate->gs,
|
||||
hc->bcast.index);
|
||||
stripped_update = tal_dup_arr(tmpctx, u8, update + 2,
|
||||
tal_count(update) - 2, 0);
|
||||
} else
|
||||
stripped_update = NULL;
|
||||
}
|
||||
daemon_conn_send(daemon->master,
|
||||
take(towire_gossip_get_channel_peer_reply(NULL, key,
|
||||
stripped_update)));
|
||||
return daemon_conn_read_next(conn, daemon->master);
|
||||
}
|
||||
|
||||
/*~ lightningd: so, get me the latest update for this local channel,
|
||||
* so I can include it in an error message. */
|
||||
static struct io_plan *get_stripped_cupdate(struct io_conn *conn,
|
||||
@@ -1611,9 +1569,6 @@ static struct io_plan *recv_req(struct io_conn *conn,
|
||||
case WIRE_GOSSIP_GETCHANNELS_REQUEST:
|
||||
return getchannels_req(conn, daemon, msg);
|
||||
|
||||
case WIRE_GOSSIP_GET_CHANNEL_PEER:
|
||||
return get_channel_peer(conn, daemon, msg);
|
||||
|
||||
case WIRE_GOSSIP_GET_STRIPPED_CUPDATE:
|
||||
return get_stripped_cupdate(conn, daemon, msg);
|
||||
|
||||
@@ -1663,7 +1618,6 @@ static struct io_plan *recv_req(struct io_conn *conn,
|
||||
case WIRE_GOSSIP_GETROUTE_REPLY:
|
||||
case WIRE_GOSSIP_GETCHANNELS_REPLY:
|
||||
case WIRE_GOSSIP_PING_REPLY:
|
||||
case WIRE_GOSSIP_GET_CHANNEL_PEER_REPLY:
|
||||
case WIRE_GOSSIP_GET_STRIPPED_CUPDATE_REPLY:
|
||||
case WIRE_GOSSIP_GET_INCOMING_CHANNELS_REPLY:
|
||||
case WIRE_GOSSIP_GET_TXOUT:
|
||||
|
||||
Reference in New Issue
Block a user