connectd: remove the redundant "already connected" logic.

It should now be reliable, so we don't need this.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
Rusty Russell 2022-07-16 14:19:30 +09:30 committed by neil saitug
parent 9b6c97437e
commit 40145e619b
3 changed files with 16 additions and 38 deletions

View file

@ -1743,18 +1743,10 @@ static void try_connect_peer(struct daemon *daemon,
struct wireaddr_internal *addrs;
bool use_proxy = daemon->always_use_proxy;
struct connecting *connect;
struct peer *existing;
/* Already existing? */
existing = peer_htable_get(&daemon->peers, id);
if (existing) {
/* FIXME: Tell it it's already connected so it doesn't
* wait forever. */
daemon_conn_send(daemon->master,
take(towire_connectd_peer_already_connected
(NULL, id)));
/* Already existing? Must have crossed over, it'll know soon. */
if (peer_htable_get(&daemon->peers, id))
return;
}
/* If we're trying to connect it right now, that's OK. */
if ((connect = find_connecting(daemon, id))) {
@ -1826,8 +1818,7 @@ static void try_connect_peer(struct daemon *daemon,
tal_add_destructor(connect, destroy_connecting);
/* Now we kick it off by recursively trying connect->addrs[connect->addrnum] */
if (!existing)
try_connect_one_addr(connect);
try_connect_one_addr(connect);
}
/* lightningd tells us to connect to a peer by id, with optional addr hint. */
@ -1967,7 +1958,6 @@ static struct io_plan *recv_req(struct io_conn *conn,
case WIRE_CONNECTD_INIT_REPLY:
case WIRE_CONNECTD_ACTIVATE_REPLY:
case WIRE_CONNECTD_PEER_CONNECTED:
case WIRE_CONNECTD_PEER_ALREADY_CONNECTED:
case WIRE_CONNECTD_PEER_ACTIVE:
case WIRE_CONNECTD_CONNECT_FAILED:
case WIRE_CONNECTD_DEV_MEMLEAK_REPLY:

View file

@ -95,10 +95,6 @@ msgdata,connectd_peer_final_msg,id,node_id,
msgdata,connectd_peer_final_msg,len,u16,
msgdata,connectd_peer_final_msg,msg,u8,len
# connectd->master: You said to connect, but we already were.
msgtype,connectd_peer_already_connected,2007
msgdata,connectd_peer_already_connected,id,node_id,
# master -> connectd: do you have a memleak?
msgtype,connectd_dev_memleak,2033

1 #include <bitcoin/block.h>
95 msgdata,connectd_ping,num_pong_bytes,u16, # False if we there was already a ping in progress.
96 msgdata,connectd_ping,len,u16, msgdata,connectd_ping_reply,sent,bool,
97 msgtype,connectd_ping_reply,2130 # 0 == no pong expected, otherwise length of pong.
# False if we there was already a ping in progress.
msgdata,connectd_ping_reply,sent,bool,
# 0 == no pong expected, otherwise length of pong.
msgdata,connectd_ping_reply,totlen,u16,
98 # We tell lightningd we got an onionmsg msgdata,connectd_ping_reply,totlen,u16,
99 msgtype,connectd_got_onionmsg_to_us,2145 # We tell lightningd we got an onionmsg
100 msgdata,connectd_got_onionmsg_to_us,obs2,bool, msgtype,connectd_got_onionmsg_to_us,2145

View file

@ -183,6 +183,7 @@ static struct command_result *json_connect(struct command *cmd,
struct wireaddr_internal *addr;
const char *err_msg;
struct id_and_addr id_addr;
struct peer *peer;
id_addr.host = NULL;
id_addr.port = NULL;
@ -214,7 +215,18 @@ static struct command_result *json_connect(struct command *cmd,
"Can't specify port without host");
}
try_connect(cmd, cmd->ld, &id_addr.id, 0, addr);
/* If we know about peer, see if it's already connected. */
peer = peer_by_id(cmd->ld, &id_addr.id);
if (peer && peer->is_connected) {
log_debug(cmd->ld->log, "Already connected via %s",
type_to_string(tmpctx, struct wireaddr_internal,
&peer->addr));
return connect_cmd_succeed(cmd, peer,
peer->connected_incoming,
&peer->addr);
}
try_connect(cmd, cmd->ld, &id_addr.id, 0, addr);
/* Leave this here for peer_connected or connect_failed. */
new_connect(cmd->ld, &id_addr.id, cmd);
@ -371,21 +383,6 @@ void connect_succeeded(struct lightningd *ld, const struct peer *peer,
}
}
static void peer_already_connected(struct lightningd *ld, const u8 *msg)
{
struct node_id id;
struct peer *peer;
if (!fromwire_connectd_peer_already_connected(msg, &id))
fatal("Bad msg %s from connectd", tal_hex(tmpctx, msg));
peer = peer_by_id(ld, &id);
if (peer)
connect_succeeded(ld, peer,
peer->connected_incoming,
&peer->addr);
}
struct custommsg_payload {
struct node_id peer_id;
u8 *msg;
@ -481,10 +478,6 @@ static unsigned connectd_msg(struct subd *connectd, const u8 *msg, const int *fd
peer_disconnect_done(connectd->ld, msg);
break;
case WIRE_CONNECTD_PEER_ALREADY_CONNECTED:
peer_already_connected(connectd->ld, msg);
break;
case WIRE_CONNECTD_CONNECT_FAILED:
connect_failed(connectd->ld, msg);
break;
@ -508,7 +501,6 @@ static void connect_init_done(struct subd *connectd,
struct lightningd *ld = connectd->ld;
char *errmsg;
log_debug(connectd->log, "connectd_init_done");
if (!fromwire_connectd_init_reply(ld, reply,
&ld->binding,
&ld->announceable,