From bedea85019076999a205c421bbf593ab8ab0641b Mon Sep 17 00:00:00 2001 From: Kefu Chai Date: Mon, 20 Apr 2020 18:27:58 +0800 Subject: [PATCH] qa/tasks/vstart_runner.py: be python3 compatible differentiate `str` and `bytes` instances, and drop python2 support from vstart_runner.py, as we've moved to python3 already Signed-off-by: Kefu Chai --- qa/tasks/vstart_runner.py | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/qa/tasks/vstart_runner.py b/qa/tasks/vstart_runner.py index 94be7a94e05..603dfa02d4f 100644 --- a/qa/tasks/vstart_runner.py +++ b/qa/tasks/vstart_runner.py @@ -31,6 +31,7 @@ Alternative usage: """ from io import BytesIO +from io import StringIO from collections import defaultdict import getpass import signal @@ -151,8 +152,8 @@ else: def rm_nonascii_chars(var): - var = var.replace('\xe2\x80\x98', '\'') - var = var.replace('\xe2\x80\x99', '\'') + var = var.replace(b'\xe2\x80\x98', b'\'') + var = var.replace(b'\xe2\x80\x99', b'\'') return var class LocalRemoteProcess(object): @@ -176,8 +177,14 @@ class LocalRemoteProcess(object): out, err = self.subproc.communicate() out, err = rm_nonascii_chars(out), rm_nonascii_chars(err) - self.stdout.write(out) - self.stderr.write(err) + if isinstance(self.stdout, StringIO): + self.stdout.write(out.decode(errors='ignore')) + else: + self.stdout.write(out) + if isinstance(self.stderr, StringIO): + self.stderr.write(err.decode(errors='ignore')) + else: + self.stderr.write(err) self.exitstatus = self.returncode = self.subproc.returncode @@ -378,12 +385,12 @@ class LocalRemote(object): env=env) if stdin: - if not isinstance(stdin, six.string_types): + if not isinstance(stdin, str): raise RuntimeError("Can't handle non-string stdins on a vstart cluster") # Hack: writing to stdin is not deadlock-safe, but it "always" works # as long as the input buffer is "small" - subproc.stdin.write(stdin) + subproc.stdin.write(stdin.encode()) proc = LocalRemoteProcess( args, subproc, check_status, @@ -1327,7 +1334,8 @@ def exec_test(): # Tolerate no MDSs or clients running at start ps_txt = six.ensure_str(remote.run( - args=["ps", "-u"+str(os.getuid())] + args=["ps", "-u"+str(os.getuid())], + stdout=StringIO() ).stdout.getvalue().strip()) lines = ps_txt.split("\n")[1:] for line in lines: @@ -1387,7 +1395,7 @@ def exec_test(): "mds", "allow", "mon", "allow r"]) - open("./keyring", "a").write(p.stdout.getvalue()) + open("./keyring", "ab").write(p.stdout.getvalue()) if use_kernel_client: mount = LocalKernelMount(ctx, test_dir, client_id) -- 2.39.5