]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
qa: use stdin-killer to timeout run_shell_payload
authorPatrick Donnelly <pdonnell@redhat.com>
Wed, 24 Jan 2024 02:25:35 +0000 (21:25 -0500)
committerPatrick Donnelly <pdonnell@redhat.com>
Wed, 20 Mar 2024 14:56:56 +0000 (10:56 -0400)
- simplify argument processing / forwarding
- use stdin-killer to kill all sub-processes of the shell
- do not needlessly use run_shell to execute the command as it adds a timeout
  to the stdout/stderr processing
- provide a stdin (PIPE) by default otherwise teuthology's code closes stdin
  and triggers stdin-killer to timeout the shell.
- use a 15 minute timeout by default

Signed-off-by: Patrick Donnelly <pdonnell@redhat.com>
qa/tasks/cephfs/mount.py

index 007be38e223f7b855147dfff2537356bdc7aaeb6..32f81551f99c834901a86f5729a6381f3b03a311 100644 (file)
@@ -785,12 +785,25 @@ class CephFSMount(object):
 
         return self.client_remote.run(args=args, **kwargs)
 
-    def run_shell_payload(self, payload, **kwargs):
-        kwargs['args'] = ["bash", "-c", Raw(f"'{payload}'")]
+    def run_shell_payload(self, payload, wait=True, timeout=900, **kwargs):
+        kwargs.setdefault('cwd', self.mountpoint)
+        kwargs.setdefault('omit_sudo', False)
+        kwargs.setdefault('stdout', StringIO())
+        kwargs.setdefault('stderr', StringIO())
+        kwargs.setdefault('stdin', run.PIPE)
+        args = []
         if kwargs.pop('sudo', False):
-            kwargs['args'].insert(0, 'sudo')
+            args.append('sudo')
             kwargs['omit_sudo'] = False
-        return self.run_shell(**kwargs)
+        args.append("stdin-killer")
+        if timeout is not None:
+            args.append(f"--timeout={timeout}")
+        args += ("--", "bash", "-c", Raw(f"'{payload}'"))
+        p = self.client_remote.run(args=args, wait=False, **kwargs)
+        if wait:
+            p.stdin.close()
+            p.wait()
+        return p
 
     def run_as_user(self, **kwargs):
         """