detect timeout in interface main job
This commit is contained in:
parent
99a9f1a3cf
commit
fc03ed1e2b
@ -930,12 +930,6 @@ class Network(util.DaemonThread):
|
|||||||
# refresh network dialog
|
# refresh network dialog
|
||||||
self.notify('interfaces')
|
self.notify('interfaces')
|
||||||
|
|
||||||
async def maintain_requests(self):
|
|
||||||
for interface in list(self.interfaces.values()):
|
|
||||||
if interface.request and time.time() - interface.request_time > 20:
|
|
||||||
interface.print_error("blockchain request timed out")
|
|
||||||
await self.connection_down(interface.server, "blockchain request timed out")
|
|
||||||
|
|
||||||
def make_send_requests_job(self, interface):
|
def make_send_requests_job(self, interface):
|
||||||
async def job():
|
async def job():
|
||||||
try:
|
try:
|
||||||
@ -1023,13 +1017,19 @@ class Network(util.DaemonThread):
|
|||||||
await self.queue_request('blockchain.headers.subscribe', [], interface)
|
await self.queue_request('blockchain.headers.subscribe', [], interface)
|
||||||
if interface.server == self.default_server:
|
if interface.server == self.default_server:
|
||||||
await asyncio.wait_for(self.switch_to_interface(interface.server), 1)
|
await asyncio.wait_for(self.switch_to_interface(interface.server), 1)
|
||||||
interface.jobs = [asyncio.ensure_future(x) for x in [self.make_ping_job(interface), self.make_send_requests_job(interface), self.make_process_responses_job(interface)]]
|
interface.jobs = [asyncio.ensure_future(x) for x in [self.make_send_requests_job(interface), self.make_process_responses_job(interface)]]
|
||||||
gathered = asyncio.gather(*interface.jobs)
|
gathered = asyncio.gather(*interface.jobs)
|
||||||
while interface.is_running():
|
while interface.is_running():
|
||||||
try:
|
try:
|
||||||
await asyncio.wait_for(asyncio.shield(gathered), 1)
|
await asyncio.wait_for(asyncio.shield(gathered), 1)
|
||||||
except TimeoutError:
|
except TimeoutError:
|
||||||
pass
|
pass
|
||||||
|
if interface.has_timed_out():
|
||||||
|
self.print_error(interface.server, "timed out")
|
||||||
|
await self.connection_down(interface.server, "time out in ping_job")
|
||||||
|
elif interface.ping_required():
|
||||||
|
params = [ELECTRUM_VERSION, PROTOCOL_VERSION]
|
||||||
|
await self.queue_request('server.version', params, interface)
|
||||||
interface.future.set_result("finished")
|
interface.future.set_result("finished")
|
||||||
return
|
return
|
||||||
#self.notify('interfaces')
|
#self.notify('interfaces')
|
||||||
@ -1053,27 +1053,6 @@ class Network(util.DaemonThread):
|
|||||||
self.print_error("Previous exception in boot_job")
|
self.print_error("Previous exception in boot_job")
|
||||||
interface.boot_job.add_done_callback(boot_job_cb)
|
interface.boot_job.add_done_callback(boot_job_cb)
|
||||||
|
|
||||||
def make_ping_job(self, interface):
|
|
||||||
async def job():
|
|
||||||
try:
|
|
||||||
while interface.is_running():
|
|
||||||
await asyncio.sleep(1)
|
|
||||||
# Send pings and shut down stale interfaces
|
|
||||||
# must use copy of values
|
|
||||||
if interface.has_timed_out():
|
|
||||||
self.print_error(interface.server, "timed out")
|
|
||||||
await self.connection_down(interface.server, "time out in ping_job")
|
|
||||||
return
|
|
||||||
elif interface.ping_required():
|
|
||||||
params = [ELECTRUM_VERSION, PROTOCOL_VERSION]
|
|
||||||
await self.queue_request('server.version', params, interface)
|
|
||||||
except GeneratorExit:
|
|
||||||
pass
|
|
||||||
except:
|
|
||||||
if interface.is_running():
|
|
||||||
traceback.print_exc()
|
|
||||||
self.print_error("FATAL ERROR in ping_job")
|
|
||||||
return asyncio.ensure_future(job())
|
|
||||||
|
|
||||||
async def maintain_interfaces(self):
|
async def maintain_interfaces(self):
|
||||||
if self.stopped: return
|
if self.stopped: return
|
||||||
@ -1137,7 +1116,6 @@ class Network(util.DaemonThread):
|
|||||||
while self.is_running():
|
while self.is_running():
|
||||||
#self.print_error(len(asyncio.Task.all_tasks()))
|
#self.print_error(len(asyncio.Task.all_tasks()))
|
||||||
await asyncio.sleep(1)
|
await asyncio.sleep(1)
|
||||||
await self.maintain_requests()
|
|
||||||
await self.maintain_interfaces()
|
await self.maintain_interfaces()
|
||||||
self.run_jobs()
|
self.run_jobs()
|
||||||
await self.stop_network()
|
await self.stop_network()
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user