connectd: don't run more than one reconnect timer at once.
From grubles' logs: ``` 2025-01-06T15:30:31.449Z DEBUG lightningd: attempting connection to 035ca2fe4793a5e789ce846062eb4834f573c060d9200ce77544a29b48a0aa5923 for additional gossip 2025-01-06T15:30:31.449Z DEBUG 035ca2fe4793a5e789ce846062eb4834f573c060d9200ce77544a29b48a0aa5923-connectd: Adding 0 addresses to important peer 2025-01-06T15:30:31.449Z DEBUG 035ca2fe4793a5e789ce846062eb4834f573c060d9200ce77544a29b48a0aa5923-connectd: Failed connected out: Unable to connect, no address known for peer 2025-01-06T15:30:31.449Z DEBUG 035ca2fe4793a5e789ce846062eb4834f573c060d9200ce77544a29b48a0aa5923-connectd: Will try reconnect in 300 seconds 2025-01-06T15:30:32.037Z DEBUG 035ca2fe4793a5e789ce846062eb4834f573c060d9200ce77544a29b48a0aa5923-connectd: Failed connected out: Unable to connect, no address known for peer 2025-01-06T15:30:32.037Z DEBUG 035ca2fe4793a5e789ce846062eb4834f573c060d9200ce77544a29b48a0aa5923-connectd: Will try reconnect in 300 seconds 2025-01-06T15:30:32.428Z DEBUG 035ca2fe4793a5e789ce846062eb4834f573c060d9200ce77544a29b48a0aa5923-connectd: Failed connected out: Unable to connect, no address known for peer 2025-01-06T15:30:32.428Z DEBUG 035ca2fe4793a5e789ce846062eb4834f573c060d9200ce77544a29b48a0aa5923-connectd: Will try reconnect in 300 seconds 2025-01-06T15:30:32.680Z DEBUG 035ca2fe4793a5e789ce846062eb4834f573c060d9200ce77544a29b48a0aa5923-connectd: Failed connected out: Unable to connect, no address known for peer 2025-01-06T15:30:32.681Z DEBUG 035ca2fe4793a5e789ce846062eb4834f573c060d9200ce77544a29b48a0aa5923-connectd: Will try reconnect in 300 seconds 2025-01-06T15:30:33.468Z DEBUG 035ca2fe4793a5e789ce846062eb4834f573c060d9200ce77544a29b48a0aa5923-connectd: Failed connected out: Unable to connect, no address known for peer 2025-01-06T15:30:33.469Z DEBUG 035ca2fe4793a5e789ce846062eb4834f573c060d9200ce77544a29b48a0aa5923-connectd: Will try reconnect in 300 seconds 2025-01-06T15:30:33.471Z DEBUG 035ca2fe4793a5e789ce846062eb4834f573c060d9200ce77544a29b48a0aa5923-connectd: Failed connected out: Unable to connect, no address known for peer 2025-01-06T15:30:33.471Z DEBUG 035ca2fe4793a5e789ce846062eb4834f573c060d9200ce77544a29b48a0aa5923-connectd: Will try reconnect in 300 seconds 2025-01-06T15:30:33.935Z DEBUG 035ca2fe4793a5e789ce846062eb4834f573c060d9200ce77544a29b48a0aa5923-connectd: Failed connected out: Unable to connect, no address known for peer 2025-01-06T15:30:33.935Z DEBUG 035ca2fe4793a5e789ce846062eb4834f573c060d9200ce77544a29b48a0aa5923-connectd: Will try reconnect in 300 seconds 2025-01-06T15:30:34.125Z DEBUG 035ca2fe4793a5e789ce846062eb4834f573c060d9200ce77544a29b48a0aa5923-connectd: Failed connected out: Unable to connect, no address known for peer 2025-01-06T15:30:34.125Z DEBUG 035ca2fe4793a5e789ce846062eb4834f573c060d9200ce77544a29b48a0aa5923-connectd: Will try reconnect in 300 seconds 2025-01-06T15:30:35.496Z DEBUG 035ca2fe4793a5e789ce846062eb4834f573c060d9200ce77544a29b48a0aa5923-connectd: Failed connected out: Unable to connect, no address known for peer 2025-01-06T15:30:35.497Z DEBUG 035ca2fe4793a5e789ce846062eb4834f573c060d9200ce77544a29b48a0aa5923-connectd: Will try reconnect in 300 seconds 2025-01-06T15:30:35.623Z DEBUG 035ca2fe4793a5e789ce846062eb4834f573c060d9200ce77544a29b48a0aa5923-connectd: Failed connected out: Unable to connect, no address known for peer 2025-01-06T15:30:35.623Z DEBUG 035ca2fe4793a5e789ce846062eb4834f573c060d9200ce77544a29b48a0aa5923-connectd: Will try reconnect in 300 seconds 2025-01-06T15:30:35.751Z DEBUG 035ca2fe4793a5e789ce846062eb4834f573c060d9200ce77544a29b48a0aa5923-connectd: Failed connected out: Unable to connect, no address known for peer 2025-01-06T15:30:35.751Z DEBUG 035ca2fe4793a5e789ce846062eb4834f573c060d9200ce77544a29b48a0aa5923-connectd: Will try reconnect in 300 seconds 2025-01-06T15:30:35.892Z DEBUG 035ca2fe4793a5e789ce846062eb4834f573c060d9200ce77544a29b48a0aa5923-connectd: Failed connected out: Unable to connect, no address known for peer 2025-01-06T15:30:35.892Z DEBUG 035ca2fe4793a5e789ce846062eb4834f573c060d9200ce77544a29b48a0aa5923-connectd: Will try reconnect in 300 seconds ``` We promised to wait 300 seconds! Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
@@ -796,6 +796,7 @@ static void reconnect(struct important_id *imp)
|
||||
/* Do gossmap lookup to find any addresses from there, and append. */
|
||||
append_gossmap_addresses(&addrs, imp->daemon, &imp->id);
|
||||
|
||||
imp->reconnect_timer = NULL;
|
||||
try_connect_peer(imp->daemon, &imp->id, take(addrs), false);
|
||||
}
|
||||
|
||||
@@ -811,7 +812,7 @@ static void schedule_reconnect_if_important(struct daemon *daemon,
|
||||
return;
|
||||
|
||||
/* Already on it? */
|
||||
if (find_connecting(daemon, id))
|
||||
if (find_connecting(daemon, id) || imp->reconnect_timer)
|
||||
return;
|
||||
|
||||
/* --dev-no-reconnect? Don't reconnect. */
|
||||
@@ -822,10 +823,10 @@ static void schedule_reconnect_if_important(struct daemon *daemon,
|
||||
imp->reconnect_secs);
|
||||
/* We fuzz the timer by up to 1 second, to avoid getting into
|
||||
* simultanous-reconnect deadlocks with peer. */
|
||||
notleak(new_reltimer(&daemon->timers, imp,
|
||||
timerel_add(time_from_sec(imp->reconnect_secs),
|
||||
time_from_usec(pseudorand(1000000))),
|
||||
reconnect, imp));
|
||||
imp->reconnect_timer = new_reltimer(&daemon->timers, imp,
|
||||
timerel_add(time_from_sec(imp->reconnect_secs),
|
||||
time_from_usec(pseudorand(1000000))),
|
||||
reconnect, imp);
|
||||
|
||||
/* Back off next time if that fails */
|
||||
imp->reconnect_secs *= 2;
|
||||
@@ -1972,6 +1973,7 @@ static void connect_to_peer(struct daemon *daemon, const u8 *msg)
|
||||
struct wireaddr_internal,
|
||||
addrs);
|
||||
imp->reconnect_secs = INITIAL_WAIT_SECONDS;
|
||||
imp->reconnect_timer = NULL;
|
||||
tal_add_destructor(imp, destroy_important_id);
|
||||
important_id_htable_add(daemon->important_ids, imp);
|
||||
} else
|
||||
|
||||
@@ -149,7 +149,10 @@ struct important_id {
|
||||
|
||||
struct node_id id;
|
||||
struct wireaddr_internal *addrs;
|
||||
|
||||
/* Backoff timer (increases by 2 each time) */
|
||||
size_t reconnect_secs;
|
||||
struct oneshot *reconnect_timer;
|
||||
};
|
||||
|
||||
static const struct node_id *important_id_keyof(const struct important_id *imp)
|
||||
|
||||
Reference in New Issue
Block a user