electrum

Electrum Bitcoin wallet
git clone https://git.parazyd.org/electrum
Log | Files | Refs | Submodules

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:
Melectrum/lnbase.py | 19+++++++++++++++++--
Melectrum/lnworker.py | 5-----
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