disconnect from servers on exception

This commit is contained in:
SomberNight 2018-08-31 16:46:03 +02:00
parent 3f0d79f07d
commit 14a032a0b1
No known key found for this signature in database
GPG key ID: B33B5F232C6271E9
2 changed files with 12 additions and 8 deletions

View file

@ -244,6 +244,8 @@ class BlockHeaderInterface(PrintError):
could_connect, num_headers = await self.conn.request_chunk(self.height, next_height) could_connect, num_headers = await self.conn.request_chunk(self.height, next_height)
self.tip = max(self.height + num_headers, self.tip) self.tip = max(self.height + num_headers, self.tip)
if not could_connect: if not could_connect:
if self.height <= self.iface.network.max_checkpoint():
raise Exception('server chain conflicts with checkpoints or genesis')
last = await self.step() last = await self.step()
self.tip = max(self.height, self.tip) self.tip = max(self.height, self.tip)
continue continue

View file

@ -809,14 +809,16 @@ class Network(PrintError):
asyncio.get_event_loop().create_task(self.new_interface(server)) asyncio.get_event_loop().create_task(self.new_interface(server))
remove = [] remove = []
for k, i in self.interfaces.items(): for k, i in self.interfaces.items():
if i.fut.done(): if i.fut.done() and not i.exception:
if i.exception: assert False, "interface future should not finish without exception"
try: if i.exception:
raise i.exception if not i.fut.done():
except BaseException as e: try: i.fut.cancel()
self.print_error(i.server, "errored because", str(e), str(type(e))) except Exception as e: self.print_error('exception while cancelling fut', e)
else: try:
assert False, "interface future should not finish without exception" raise i.exception
except BaseException as e:
self.print_error(i.server, "errored because", str(e), str(type(e)))
remove.append(k) remove.append(k)
changed = False changed = False
for k in remove: for k in remove: