mirror of
https://github.com/ElementsProject/lightning.git
synced 2025-02-21 14:24:09 +01:00
connectd: don't ask DNS seeds for addresses on every reconnect.
We were stressing the servers if node cannot be found. Only do lookup on manual connect commands. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> Changelog-Protocol: lightningd: Only use DNS server address lookup on manual `connect` commands, not normal reconnection attempts.
This commit is contained in:
parent
5a4c8402a7
commit
22eac96750
3 changed files with 21 additions and 9 deletions
|
@ -1716,7 +1716,8 @@ static void add_gossip_addrs(struct wireaddr_internal **addrs,
|
|||
static void try_connect_peer(struct daemon *daemon,
|
||||
const struct node_id *id,
|
||||
struct wireaddr *gossip_addrs,
|
||||
struct wireaddr_internal *addrhint STEALS)
|
||||
struct wireaddr_internal *addrhint STEALS,
|
||||
bool dns_fallback)
|
||||
{
|
||||
struct wireaddr_internal *addrs;
|
||||
bool use_proxy = daemon->always_use_proxy;
|
||||
|
@ -1762,7 +1763,7 @@ static void try_connect_peer(struct daemon *daemon,
|
|||
chainparams_get_ln_port(chainparams));
|
||||
tal_arr_expand(&addrs, unresolved);
|
||||
}
|
||||
} else if (daemon->use_dns) {
|
||||
} else if (daemon->use_dns && dns_fallback) {
|
||||
add_seed_addrs(&addrs, id,
|
||||
daemon->broken_resolver_response);
|
||||
}
|
||||
|
@ -1804,12 +1805,14 @@ static void connect_to_peer(struct daemon *daemon, const u8 *msg)
|
|||
struct node_id id;
|
||||
struct wireaddr_internal *addrhint;
|
||||
struct wireaddr *addrs;
|
||||
bool dns_fallback;
|
||||
|
||||
if (!fromwire_connectd_connect_to_peer(tmpctx, msg,
|
||||
&id, &addrs, &addrhint))
|
||||
&id, &addrs, &addrhint,
|
||||
&dns_fallback))
|
||||
master_badmsg(WIRE_CONNECTD_CONNECT_TO_PEER, msg);
|
||||
|
||||
try_connect_peer(daemon, &id, addrs, addrhint);
|
||||
try_connect_peer(daemon, &id, addrs, addrhint, dns_fallback);
|
||||
}
|
||||
|
||||
/* lightningd tells us a peer should be disconnected. */
|
||||
|
|
|
@ -50,6 +50,7 @@ msgdata,connectd_connect_to_peer,id,node_id,
|
|||
msgdata,connectd_connect_to_peer,len,u32,
|
||||
msgdata,connectd_connect_to_peer,addrs,wireaddr,len
|
||||
msgdata,connectd_connect_to_peer,addrhint,?wireaddr_internal,
|
||||
msgdata,connectd_connect_to_peer,dns_fallback,bool,
|
||||
|
||||
# Connectd->master: connect failed.
|
||||
msgtype,connectd_connect_failed,2020
|
||||
|
|
|
|
@ -76,7 +76,8 @@ static void try_connect(const tal_t *ctx,
|
|||
struct lightningd *ld,
|
||||
const struct node_id *id,
|
||||
u32 seconds_delay,
|
||||
const struct wireaddr_internal *addrhint);
|
||||
const struct wireaddr_internal *addrhint,
|
||||
bool dns_fallback);
|
||||
|
||||
struct id_and_addr {
|
||||
struct node_id id;
|
||||
|
@ -226,7 +227,7 @@ static struct command_result *json_connect(struct command *cmd,
|
|||
&peer->addr);
|
||||
}
|
||||
|
||||
try_connect(cmd, cmd->ld, &id_addr.id, 0, addr);
|
||||
try_connect(cmd, cmd->ld, &id_addr.id, 0, addr, true);
|
||||
|
||||
/* Leave this here for peer_connected, connect_failed or peer_disconnect_done. */
|
||||
new_connect(cmd->ld, &id_addr.id, cmd);
|
||||
|
@ -248,6 +249,7 @@ struct delayed_reconnect {
|
|||
struct lightningd *ld;
|
||||
struct node_id id;
|
||||
struct wireaddr_internal *addrhint;
|
||||
bool dns_fallback;
|
||||
};
|
||||
|
||||
static void gossipd_got_addrs(struct subd *subd,
|
||||
|
@ -265,7 +267,8 @@ static void gossipd_got_addrs(struct subd *subd,
|
|||
connectmsg = towire_connectd_connect_to_peer(NULL,
|
||||
&d->id,
|
||||
addrs,
|
||||
d->addrhint);
|
||||
d->addrhint,
|
||||
d->dns_fallback);
|
||||
subd_send_msg(d->ld->connectd, take(connectmsg));
|
||||
tal_free(d);
|
||||
}
|
||||
|
@ -282,7 +285,8 @@ static void try_connect(const tal_t *ctx,
|
|||
struct lightningd *ld,
|
||||
const struct node_id *id,
|
||||
u32 seconds_delay,
|
||||
const struct wireaddr_internal *addrhint)
|
||||
const struct wireaddr_internal *addrhint,
|
||||
bool dns_fallback)
|
||||
{
|
||||
struct delayed_reconnect *d;
|
||||
struct peer *peer;
|
||||
|
@ -291,6 +295,7 @@ static void try_connect(const tal_t *ctx,
|
|||
d->ld = ld;
|
||||
d->id = *id;
|
||||
d->addrhint = tal_dup_or_null(d, struct wireaddr_internal, addrhint);
|
||||
d->dns_fallback = dns_fallback;
|
||||
|
||||
if (!seconds_delay) {
|
||||
do_connect(d);
|
||||
|
@ -347,11 +352,14 @@ void try_reconnect(const tal_t *ctx,
|
|||
} else
|
||||
peer->reconnect_delay = INITIAL_WAIT_SECONDS;
|
||||
|
||||
/* We only do DNS fallback lookups for manual connections, to
|
||||
* avoid stressing DNS servers for private nodes (sorry!) */
|
||||
try_connect(ctx,
|
||||
peer->ld,
|
||||
&peer->id,
|
||||
peer->reconnect_delay,
|
||||
addrhint);
|
||||
addrhint,
|
||||
false);
|
||||
}
|
||||
|
||||
/* We were trying to connect, but they disconnected. */
|
||||
|
|
Loading…
Add table
Reference in a new issue