From 068a3c425bb12bb37a74fff1fe174954cb6da6c6 Mon Sep 17 00:00:00 2001 From: Eitan Raviv Date: Mon, 12 Sep 2022 11:07:32 +0300 Subject: [PATCH] ost_utils: async abort of hanging connection Use python's signal to abort a vmconsole connection that is hanging forever. Change-Id: I631f206b3f2fbf61dd0cd1f5337c4e58830fc18a Signed-off-by: Eitan Raviv --- ost_utils/vmconsole.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/ost_utils/vmconsole.py b/ost_utils/vmconsole.py index 32ce6e6d..f739c55e 100644 --- a/ost_utils/vmconsole.py +++ b/ost_utils/vmconsole.py @@ -57,6 +57,9 @@ def connect(self, vm_id): @contextlib.contextmanager def _connect(self, vm_id): try: + alarm = BlockingIOAlarm('timed out waiting to connect', 180) + signal.signal(signal.SIGALRM, alarm.handle) + signal.alarm(alarm.seconds) master, slave = pty.openpty() LOGGER.debug('vmconsole: opened pty') args = [ @@ -80,6 +83,7 @@ def _connect(self, vm_id): stdout=subprocess.PIPE, bufsize=0, ) + signal.alarm(0) # cancel LOGGER.debug(f'vmconsole: opened reader with args {args}') self._writer = os.fdopen(master, 'w') LOGGER.debug('vmconsole: opened writer') @@ -87,6 +91,7 @@ def _connect(self, vm_id): yield finally: self._disconnect() + signal.signal(signal.SIGALRM, signal.SIG_DFL) def _disconnect(self): LOGGER.debug('vmconsole: disconnecting...')