From 144c40afd073271e1fce87de254d9201ecb45344 Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Fri, 21 Oct 2016 12:04:41 +1030 Subject: [PATCH] irc: get much less chatty. We're going to wean off IRC, but as a quick fix, only announce 0-60 seconds after we see a join, or every 6 hours. Signed-off-by: Rusty Russell --- daemon/irc_announce.c | 23 +++++++++++++++++++++-- daemon/lightningd.c | 2 ++ daemon/lightningd.h | 3 +++ 3 files changed, 26 insertions(+), 2 deletions(-) diff --git a/daemon/irc_announce.c b/daemon/irc_announce.c index 4c04cffa3..c2ae6ad53 100644 --- a/daemon/irc_announce.c +++ b/daemon/irc_announce.c @@ -93,12 +93,18 @@ static void announce(struct ircstate *state) } tal_free(ctx); - new_reltimer(state->dstate, state, time_from_sec(60), announce, state); + /* By default we announce every 6 hours, otherwise when someone joins */ + log_debug(state->log, "Setting long announce time: 6 hours"); + state->dstate->announce = new_reltimer(state->dstate, state, + time_from_sec(3600 * 6), + announce, state); } /* Reconnect to IRC server upon disconnection. */ static void handle_irc_disconnect(struct ircstate *state) { + /* Stop announcing. */ + state->dstate->announce = tal_free(state->dstate->announce); new_reltimer(state->dstate, state, state->reconnect_timeout, irc_connect, state); } @@ -221,6 +227,19 @@ static void handle_irc_command(struct ircstate *istate, const struct irccommand // Add our node to the node_map for completeness add_node(istate->dstate, &dstate->id, dstate->external_ip, dstate->portnum); + } else if (streq(cmd->command, "JOIN")) { + unsigned int delay; + + /* Throw away any existing announce timer, and announce within + * 60 seconds. */ + dstate->announce = tal_free(dstate->announce); + + delay = pseudorand(60000000); + log_debug(istate->log, "Setting new announce time %u sec", + delay / 1000000); + dstate->announce = new_reltimer(dstate, istate, + time_from_usec(delay), + announce, istate); } } @@ -251,6 +270,6 @@ void setup_irc_connection(struct lightningd_state *dstate) "N%.12s", pubkey_to_hexstr(state, dstate->secpctx, &dstate->id) + 1); + /* We will see our own JOIN message, which will trigger announce */ irc_connect(state); - announce(state); } diff --git a/daemon/lightningd.c b/daemon/lightningd.c index 3240e5493..0993ca471 100644 --- a/daemon/lightningd.c +++ b/daemon/lightningd.c @@ -339,6 +339,8 @@ static struct lightningd_state *lightningd_state(void) dstate->bitcoin_req_running = false; dstate->nodes = empty_node_map(dstate); dstate->reexec = NULL; + dstate->external_ip = NULL; + dstate->announce = NULL; return dstate; } diff --git a/daemon/lightningd.h b/daemon/lightningd.h index 4123b28a3..d5a5b8780 100644 --- a/daemon/lightningd.h +++ b/daemon/lightningd.h @@ -136,5 +136,8 @@ struct lightningd_state { /* IP/hostname to be announced for incoming connections */ char *external_ip; + + /* Announce timer. */ + struct oneshot *announce; }; #endif /* LIGHTNING_DAEMON_LIGHTNING_H */