connectd: hold peer until we're interested.

Either because lightningd tells us it wants to talk, or because the peer
says something about a channel.

We also introduce a behavior change: we disconnect after a failed open.
We might want to modify this later, but we it's a side-effect of openingd
not holding onto idle connections.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
Rusty Russell
2022-03-23 06:57:29 +10:30
parent 77b1087cdf
commit 2424b7dea8
24 changed files with 429 additions and 148 deletions

View File

@@ -409,7 +409,7 @@ def test_remote_disconnect(node_factory):
l1, l2 = node_factory.get_nodes(2)
l1.rpc.connect(l2.info['id'], 'localhost', l2.port)
assert l2.rpc.listpeers()['peers'] != []
wait_for(lambda: l2.rpc.listpeers()['peers'] != [])
l2.rpc.disconnect(l1.info['id'])
# l1 should notice!
@@ -2576,9 +2576,9 @@ def test_disconnectpeer(node_factory, bitcoind):
wait_for(lambda: l2.rpc.getpeer(l1.info['id']) is None)
# Make sure you cannot disconnect after disconnecting
with pytest.raises(RpcError, match=r'Peer not connected'):
with pytest.raises(RpcError, match=r'Unknown peer'):
l1.rpc.disconnect(l2.info['id'])
with pytest.raises(RpcError, match=r'Peer not connected'):
with pytest.raises(RpcError, match=r'Unknown peer'):
l2.rpc.disconnect(l1.info['id'])
# Fund channel l1 -> l3