forked from M-Labs/artiq
1
0
Fork 0

aqctl_corelog: enable keepalive, terminate on connection failure

This commit is contained in:
Deepskyhunter 2022-07-02 17:33:58 +08:00 committed by GitHub
parent b4f24dd326
commit 02b086c9e5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 16 additions and 7 deletions

View File

@ -10,9 +10,11 @@ from sipyco.pc_rpc import Server
from sipyco import common_args from sipyco import common_args
from sipyco.logging_tools import log_with_name from sipyco.logging_tools import log_with_name
from sipyco.asyncio_tools import SignalHandler from sipyco.asyncio_tools import SignalHandler
from sipyco.keepalive import async_open_connection
from artiq.coredevice.comm_mgmt import Request, Reply from artiq.coredevice.comm_mgmt import Request, Reply
logger = logging.getLogger(__name__)
def get_argparser(): def get_argparser():
parser = argparse.ArgumentParser( parser = argparse.ArgumentParser(
@ -38,7 +40,13 @@ async def get_logs_sim(host):
async def get_logs(host): async def get_logs(host):
reader, writer = await asyncio.open_connection(host, 1380) reader, writer = await async_open_connection(
host,
1380,
after_idle=1,
interval=1,
max_fails=3,
)
writer.write(b"ARTIQ management\n") writer.write(b"ARTIQ management\n")
endian = await reader.readexactly(1) endian = await reader.readexactly(1)
if endian == b"e": if endian == b"e":
@ -89,18 +97,19 @@ def main():
loop.run_until_complete(server.start(common_args.bind_address_from_args(args), args.port)) loop.run_until_complete(server.start(common_args.bind_address_from_args(args), args.port))
try: try:
_, pending = loop.run_until_complete(asyncio.wait( _, pending = loop.run_until_complete(asyncio.wait(
[signal_handler.wait_terminate(), server.wait_terminate()], [signal_handler.wait_terminate(),
server.wait_terminate(),
get_logs_task
],
return_when=asyncio.FIRST_COMPLETED)) return_when=asyncio.FIRST_COMPLETED))
for task in pending: for task in pending:
task.cancel() task.cancel()
finally: finally:
loop.run_until_complete(server.stop()) loop.run_until_complete(server.stop())
finally: finally:
get_logs_task.cancel() pass
try: except Exception:
loop.run_until_complete(get_logs_task) logger.error("Termination due to exception", exc_info=True)
except asyncio.CancelledError:
pass
finally: finally:
signal_handler.teardown() signal_handler.teardown()
finally: finally: