mirror of
https://github.com/ElementsProject/lightning.git
synced 2025-02-22 14:42:40 +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,
|
static void try_connect_peer(struct daemon *daemon,
|
||||||
const struct node_id *id,
|
const struct node_id *id,
|
||||||
struct wireaddr *gossip_addrs,
|
struct wireaddr *gossip_addrs,
|
||||||
struct wireaddr_internal *addrhint STEALS)
|
struct wireaddr_internal *addrhint STEALS,
|
||||||
|
bool dns_fallback)
|
||||||
{
|
{
|
||||||
struct wireaddr_internal *addrs;
|
struct wireaddr_internal *addrs;
|
||||||
bool use_proxy = daemon->always_use_proxy;
|
bool use_proxy = daemon->always_use_proxy;
|
||||||
|
@ -1762,7 +1763,7 @@ static void try_connect_peer(struct daemon *daemon,
|
||||||
chainparams_get_ln_port(chainparams));
|
chainparams_get_ln_port(chainparams));
|
||||||
tal_arr_expand(&addrs, unresolved);
|
tal_arr_expand(&addrs, unresolved);
|
||||||
}
|
}
|
||||||
} else if (daemon->use_dns) {
|
} else if (daemon->use_dns && dns_fallback) {
|
||||||
add_seed_addrs(&addrs, id,
|
add_seed_addrs(&addrs, id,
|
||||||
daemon->broken_resolver_response);
|
daemon->broken_resolver_response);
|
||||||
}
|
}
|
||||||
|
@ -1804,12 +1805,14 @@ static void connect_to_peer(struct daemon *daemon, const u8 *msg)
|
||||||
struct node_id id;
|
struct node_id id;
|
||||||
struct wireaddr_internal *addrhint;
|
struct wireaddr_internal *addrhint;
|
||||||
struct wireaddr *addrs;
|
struct wireaddr *addrs;
|
||||||
|
bool dns_fallback;
|
||||||
|
|
||||||
if (!fromwire_connectd_connect_to_peer(tmpctx, msg,
|
if (!fromwire_connectd_connect_to_peer(tmpctx, msg,
|
||||||
&id, &addrs, &addrhint))
|
&id, &addrs, &addrhint,
|
||||||
|
&dns_fallback))
|
||||||
master_badmsg(WIRE_CONNECTD_CONNECT_TO_PEER, msg);
|
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. */
|
/* 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,len,u32,
|
||||||
msgdata,connectd_connect_to_peer,addrs,wireaddr,len
|
msgdata,connectd_connect_to_peer,addrs,wireaddr,len
|
||||||
msgdata,connectd_connect_to_peer,addrhint,?wireaddr_internal,
|
msgdata,connectd_connect_to_peer,addrhint,?wireaddr_internal,
|
||||||
|
msgdata,connectd_connect_to_peer,dns_fallback,bool,
|
||||||
|
|
||||||
# Connectd->master: connect failed.
|
# Connectd->master: connect failed.
|
||||||
msgtype,connectd_connect_failed,2020
|
msgtype,connectd_connect_failed,2020
|
||||||
|
|
|
|
@ -76,7 +76,8 @@ static void try_connect(const tal_t *ctx,
|
||||||
struct lightningd *ld,
|
struct lightningd *ld,
|
||||||
const struct node_id *id,
|
const struct node_id *id,
|
||||||
u32 seconds_delay,
|
u32 seconds_delay,
|
||||||
const struct wireaddr_internal *addrhint);
|
const struct wireaddr_internal *addrhint,
|
||||||
|
bool dns_fallback);
|
||||||
|
|
||||||
struct id_and_addr {
|
struct id_and_addr {
|
||||||
struct node_id id;
|
struct node_id id;
|
||||||
|
@ -226,7 +227,7 @@ static struct command_result *json_connect(struct command *cmd,
|
||||||
&peer->addr);
|
&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. */
|
/* Leave this here for peer_connected, connect_failed or peer_disconnect_done. */
|
||||||
new_connect(cmd->ld, &id_addr.id, cmd);
|
new_connect(cmd->ld, &id_addr.id, cmd);
|
||||||
|
@ -248,6 +249,7 @@ struct delayed_reconnect {
|
||||||
struct lightningd *ld;
|
struct lightningd *ld;
|
||||||
struct node_id id;
|
struct node_id id;
|
||||||
struct wireaddr_internal *addrhint;
|
struct wireaddr_internal *addrhint;
|
||||||
|
bool dns_fallback;
|
||||||
};
|
};
|
||||||
|
|
||||||
static void gossipd_got_addrs(struct subd *subd,
|
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,
|
connectmsg = towire_connectd_connect_to_peer(NULL,
|
||||||
&d->id,
|
&d->id,
|
||||||
addrs,
|
addrs,
|
||||||
d->addrhint);
|
d->addrhint,
|
||||||
|
d->dns_fallback);
|
||||||
subd_send_msg(d->ld->connectd, take(connectmsg));
|
subd_send_msg(d->ld->connectd, take(connectmsg));
|
||||||
tal_free(d);
|
tal_free(d);
|
||||||
}
|
}
|
||||||
|
@ -282,7 +285,8 @@ static void try_connect(const tal_t *ctx,
|
||||||
struct lightningd *ld,
|
struct lightningd *ld,
|
||||||
const struct node_id *id,
|
const struct node_id *id,
|
||||||
u32 seconds_delay,
|
u32 seconds_delay,
|
||||||
const struct wireaddr_internal *addrhint)
|
const struct wireaddr_internal *addrhint,
|
||||||
|
bool dns_fallback)
|
||||||
{
|
{
|
||||||
struct delayed_reconnect *d;
|
struct delayed_reconnect *d;
|
||||||
struct peer *peer;
|
struct peer *peer;
|
||||||
|
@ -291,6 +295,7 @@ static void try_connect(const tal_t *ctx,
|
||||||
d->ld = ld;
|
d->ld = ld;
|
||||||
d->id = *id;
|
d->id = *id;
|
||||||
d->addrhint = tal_dup_or_null(d, struct wireaddr_internal, addrhint);
|
d->addrhint = tal_dup_or_null(d, struct wireaddr_internal, addrhint);
|
||||||
|
d->dns_fallback = dns_fallback;
|
||||||
|
|
||||||
if (!seconds_delay) {
|
if (!seconds_delay) {
|
||||||
do_connect(d);
|
do_connect(d);
|
||||||
|
@ -347,11 +352,14 @@ void try_reconnect(const tal_t *ctx,
|
||||||
} else
|
} else
|
||||||
peer->reconnect_delay = INITIAL_WAIT_SECONDS;
|
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,
|
try_connect(ctx,
|
||||||
peer->ld,
|
peer->ld,
|
||||||
&peer->id,
|
&peer->id,
|
||||||
peer->reconnect_delay,
|
peer->reconnect_delay,
|
||||||
addrhint);
|
addrhint,
|
||||||
|
false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* We were trying to connect, but they disconnected. */
|
/* We were trying to connect, but they disconnected. */
|
||||||
|
|
Loading…
Add table
Reference in a new issue