remove servers_lock

This commit is contained in:
ThomasV 2018-03-09 11:11:06 +01:00
parent 0879b98c60
commit 99a9f1a3cf

View File

@ -169,7 +169,6 @@ class Network(util.DaemonThread):
def __init__(self, config=None): def __init__(self, config=None):
self.disconnected_servers = {} self.disconnected_servers = {}
self.connecting = set() self.connecting = set()
self.servers_lock = asyncio.Lock()
self.stopped = True self.stopped = True
asyncio.set_event_loop(None) asyncio.set_event_loop(None)
if config is None: if config is None:
@ -386,16 +385,12 @@ class Network(util.DaemonThread):
return out return out
async def start_interface(self, server): async def start_interface(self, server):
assert server not in self.connecting if server not in self.interfaces and server not in self.connecting:
async with self.servers_lock: self.connecting.add(server)
if (not server in self.interfaces): if server == self.default_server:
if server == self.default_server: self.print_error("connecting to %s as new interface" % server)
self.print_error("connecting to %s as new interface" % server) self.set_status('connecting')
self.set_status('connecting') return self.new_interface(server)
self.connecting.add(server)
i = await self.new_interface(server)
self.connecting.remove(server)
return i
async def start_random_interface(self): async def start_random_interface(self):
exclude_set = set(self.disconnected_servers.keys()).union(set(self.interfaces.keys())) exclude_set = set(self.disconnected_servers.keys()).union(set(self.interfaces.keys()))
@ -472,8 +467,7 @@ class Network(util.DaemonThread):
await self.stop_network() await self.stop_network()
self.print_error("STOOOOOOOOOOOOOOOOOOOOOOOOOOPPED") self.print_error("STOOOOOOOOOOOOOOOOOOOOOOOOOOPPED")
self.default_server = server self.default_server = server
async with self.servers_lock: self.disconnected_servers = {}
self.disconnected_servers = {}
await self.start_network(protocol, proxy) await self.start_network(protocol, proxy)
except BaseException as e: except BaseException as e:
traceback.print_exc() traceback.print_exc()
@ -739,26 +733,25 @@ class Network(util.DaemonThread):
async def connection_down(self, server, reason=None): async def connection_down(self, server, reason=None):
'''A connection to server either went down, or was never made. '''A connection to server either went down, or was never made.
We distinguish by whether it is in self.interfaces.''' We distinguish by whether it is in self.interfaces.'''
async with self.servers_lock: if server in self.disconnected_servers:
if server in self.disconnected_servers: try:
try: raise Exception("already disconnected " + server + " because " + repr(self.disconnected_servers[server]) + ". new reason: " + repr(reason))
raise Exception("already disconnected " + server + " because " + repr(self.disconnected_servers[server]) + ". new reason: " + repr(reason)) except:
except: traceback.print_exc()
traceback.print_exc() sys.exit(1)
sys.exit(1) return
return self.print_error("connection down", server)
self.print_error("connection down", server) self.disconnected_servers[server] = reason
self.disconnected_servers[server] = reason if server == self.default_server:
if server == self.default_server: self.set_status('disconnected')
self.set_status('disconnected') if server in self.interfaces:
if server in self.interfaces: await self.close_interface(self.interfaces[server])
await self.close_interface(self.interfaces[server]) self.notify('interfaces')
self.notify('interfaces') for b in self.blockchains.values():
for b in self.blockchains.values(): if b.catch_up == server:
if b.catch_up == server: b.catch_up = None
b.catch_up = None
async def new_interface(self, server): def new_interface(self, server):
# todo: get tip first, then decide which checkpoint to use. # todo: get tip first, then decide which checkpoint to use.
self.add_recent_server(server) self.add_recent_server(server)
interface = Interface(server, self.config.path, self.proxy, lambda: not self.stopped and server in self.interfaces) interface = Interface(server, self.config.path, self.proxy, lambda: not self.stopped and server in self.interfaces)
@ -1048,6 +1041,8 @@ class Network(util.DaemonThread):
traceback.print_exc() traceback.print_exc()
self.print_error("FATAL ERROR in boot_interface") self.print_error("FATAL ERROR in boot_interface")
raise e raise e
finally:
self.connecting.remove(interface.server)
interface.boot_job = asyncio.ensure_future(job()) interface.boot_job = asyncio.ensure_future(job())
interface.boot_job.server = interface.server interface.boot_job.server = interface.server
def boot_job_cb(fut): def boot_job_cb(fut):
@ -1089,8 +1084,7 @@ class Network(util.DaemonThread):
await self.start_random_interface() await self.start_random_interface()
if now - self.nodes_retry_time > NODES_RETRY_INTERVAL: if now - self.nodes_retry_time > NODES_RETRY_INTERVAL:
self.print_error('network: retrying connections') self.print_error('network: retrying connections')
async with self.servers_lock: self.disconnected_servers = {}
self.disconnected_servers = {}
self.nodes_retry_time = now self.nodes_retry_time = now
# main interface # main interface
@ -1101,9 +1095,8 @@ class Network(util.DaemonThread):
else: else:
if self.default_server in self.disconnected_servers: if self.default_server in self.disconnected_servers:
if now - self.server_retry_time > SERVER_RETRY_INTERVAL: if now - self.server_retry_time > SERVER_RETRY_INTERVAL:
async with self.servers_locks: del self.disconnected_servers[self.default_server]
del self.disconnected_servers[self.default_server] self.server_retry_time = now
self.server_retry_time = now
else: else:
await self.switch_to_interface(self.default_server) await self.switch_to_interface(self.default_server)
else: else: