remove servers_lock
This commit is contained in:
parent
0879b98c60
commit
99a9f1a3cf
@ -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:
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user