wallet: recreate Synchronizer and Verifier when switching servers
not that nice but solves races
This commit is contained in:
@@ -242,9 +242,6 @@ class Network(PrintError):
|
||||
self.start_network(deserialize_server(self.default_server)[2],
|
||||
deserialize_proxy(self.config.get('proxy')))
|
||||
self.asyncio_loop = asyncio.get_event_loop()
|
||||
self.server_info_job = asyncio.Future()
|
||||
# just to not trigger a warning from switch_to_interface the first time we change default_server
|
||||
self.server_info_job.set_result(1)
|
||||
|
||||
@staticmethod
|
||||
def get_instance():
|
||||
@@ -330,7 +327,6 @@ class Network(PrintError):
|
||||
def is_connecting(self):
|
||||
return self.connection_status == 'connecting'
|
||||
|
||||
@util.aiosafe
|
||||
async def request_server_info(self, interface):
|
||||
await interface.ready
|
||||
session = interface.session
|
||||
@@ -560,7 +556,6 @@ class Network(PrintError):
|
||||
being opened, start a thread to connect. The actual switch will
|
||||
happen on receipt of the connection notification. Do nothing
|
||||
if server already is our interface.'''
|
||||
old_default_server = self.default_server
|
||||
self.default_server = server
|
||||
if server not in self.interfaces:
|
||||
self.interface = None
|
||||
@@ -570,14 +565,18 @@ class Network(PrintError):
|
||||
i = self.interfaces[server]
|
||||
if self.interface != i:
|
||||
self.print_error("switching to", server)
|
||||
# stop any current interface in order to terminate subscriptions
|
||||
# fixme: we don't want to close headers sub
|
||||
#self.close_interface(self.interface)
|
||||
if self.interface is not None:
|
||||
# Stop any current interface in order to terminate subscriptions,
|
||||
# and to cancel tasks in interface.group.
|
||||
# However, for headers sub, give preference to this interface
|
||||
# over unknown ones, i.e. start it again right away.
|
||||
self.close_interface(self.interface)
|
||||
if len(self.interfaces) <= self.num_server:
|
||||
self.start_interface(self.interface.server)
|
||||
|
||||
self.interface = i
|
||||
if not self.server_info_job.done():
|
||||
self.print_error('cancelled previous request_server_info job, was it too slow? server was:', old_default_server)
|
||||
self.server_info_job.cancel()
|
||||
self.server_info_job = asyncio.get_event_loop().create_task(self.request_server_info(i))
|
||||
asyncio.get_event_loop().create_task(
|
||||
i.group.spawn(self.request_server_info(i)))
|
||||
self.trigger_callback('default_server_changed')
|
||||
self.set_status('connected')
|
||||
self.notify('updated')
|
||||
@@ -876,12 +875,11 @@ class Network(PrintError):
|
||||
changed = True
|
||||
else:
|
||||
if self.config.is_fee_estimates_update_required():
|
||||
asyncio.get_event_loop().create_task(self.attempt_fee_estimate_update())
|
||||
await self.interface.group.spawn(self.attempt_fee_estimate_update())
|
||||
|
||||
if changed:
|
||||
self.notify('updated')
|
||||
await asyncio.sleep(1)
|
||||
|
||||
@util.aiosafe
|
||||
async def attempt_fee_estimate_update(self):
|
||||
await asyncio.wait_for(self.request_fee_estimates(self.interface), 5)
|
||||
|
||||
Reference in New Issue
Block a user