commit 707c7d569d25cef2092ee67145c7582b1ef0325d
parent f3dd7ce615072b814dda4f6c4378315fc1f13646
Author: SomberNight <somber.night@protonmail.com>
Date: Fri, 5 Oct 2018 16:33:35 +0200
lnbase: Peer handles its own disconnection instead of lnworker
Diffstat:
2 files changed, 17 insertions(+), 7 deletions(-)
diff --git a/electrum/lnbase.py b/electrum/lnbase.py
@@ -267,7 +267,6 @@ def create_ephemeral_key() -> (bytes, bytes):
class Peer(PrintError):
def __init__(self, lnworker, host, port, pubkey, request_initial_sync=False):
- self.exception = None # set by aiosafe
self.host = host
self.port = port
self.pubkey = pubkey
@@ -461,9 +460,25 @@ class Peer(PrintError):
self.process_message(msg)
self.initialized.set_result(True)
+ def handle_disconnect(func):
+ async def wrapper_func(self, *args, **kwargs):
+ try:
+ return await func(self, *args, **kwargs)
+ except LightningPeerConnectionClosed as e:
+ self.print_error("disconnecting gracefully. {}".format(e))
+ finally:
+ self.close_and_cleanup()
+ self.lnworker.peers.pop(self.pubkey)
+ return wrapper_func
+
@aiosafe
+ @handle_disconnect
async def main_loop(self):
- await asyncio.wait_for(self.initialize(), 5)
+ try:
+ await asyncio.wait_for(self.initialize(), 10)
+ except (OSError, asyncio.TimeoutError, HandshakeFailed) as e:
+ self.print_error('disconnecting due to: {}'.format(repr(e)))
+ return
self.channel_db.add_recent_peer(self.peer_addr)
# loop
while True:
diff --git a/electrum/lnworker.py b/electrum/lnworker.py
@@ -403,11 +403,6 @@ class LNWorker(PrintError):
while True:
await asyncio.sleep(1)
now = time.time()
- for node_id, peer in list(self.peers.items()):
- if peer.exception:
- self.print_error("removing peer", peer.host)
- peer.close_and_cleanup()
- self.peers.pop(node_id)
self.reestablish_peers_and_channels()
if len(self.peers) >= NUM_PEERS_TARGET:
continue