From 18ffcfbc2c6edbd217dbf7557020075d786c72ef Mon Sep 17 00:00:00 2001 From: Eric Sandeen Date: May 16 2018 12:11:03 +0000 Subject: Make all scripts python3-compliant And explicitly call python3 --- diff --git a/fio-python3.patch b/fio-python3.patch new file mode 100644 index 0000000..6309e57 --- /dev/null +++ b/fio-python3.patch @@ -0,0 +1,137 @@ + + +make fio scripts python3-ready + +commit 5eac3b00238b450ac0679121a76f1e566ca8f468 +Author: Bill O'Donnell +Date: Fri May 4 14:43:40 2018 -0500 + + make fio scripts python3-ready + + Many distributions are moving to python3 by default. Here's + an attempt to make the python scripts in fio python3-ready. + + Conversion was facilitated with automated tools. A few areas + were hand fixed: remove superfluous parentheses introduced by + 2to3 converter in print function calls, shebang modifications + to use environment variable for python version, and byte-string + decode correction in steadystate_tests.py following 2to3 + conversion. + + The modified scripts pass rudimentary testing when run under + python2.7 as well as python3. + + Signed-off-by: Bill O'Donnell + Signed-off-by: Jens Axboe +--- +Index: fio-3.6/doc/conf.py +=================================================================== +--- fio-3.6.orig/doc/conf.py ++++ fio-3.6/doc/conf.py +@@ -22,6 +22,9 @@ + + # -- General configuration ------------------------------------------------ + ++from __future__ import absolute_import ++from __future__ import print_function ++ + # If your documentation needs a minimal Sphinx version, state it here. + # + # needs_sphinx = '1.0' +Index: fio-3.6/tools/fiologparser.py +=================================================================== +--- fio-3.6.orig/tools/fiologparser.py ++++ fio-3.6/tools/fiologparser.py +@@ -1,4 +1,5 @@ + #!/usr/bin/python3 ++# Note: this script is python2 and python 3 compatible. + # + # fiologparser.py + # +@@ -13,6 +14,8 @@ + # + # to see per-interval average completion latency. + ++from __future__ import absolute_import ++from __future__ import print_function + import argparse + import math + +Index: fio-3.6/unit_tests/steadystate_tests.py +=================================================================== +--- fio-3.6.orig/unit_tests/steadystate_tests.py ++++ fio-3.6/unit_tests/steadystate_tests.py +@@ -1,4 +1,5 @@ + #!/usr/bin/python3 ++# Note: this script is python2 and python 3 compatible. + # + # steadystate_tests.py + # +@@ -18,6 +19,8 @@ + # if ss attained: min runtime = ss_dur + ss_ramp + # if not attained: runtime = timeout + ++from __future__ import absolute_import ++from __future__ import print_function + import os + import sys + import json +@@ -26,11 +29,12 @@ import pprint + import argparse + import subprocess + from scipy import stats ++from six.moves import range + + def parse_args(): + parser = argparse.ArgumentParser() + parser.add_argument('fio', +- help='path to fio executable'); ++ help='path to fio executable') + parser.add_argument('--read', + help='target for read testing') + parser.add_argument('--write', +@@ -45,7 +49,7 @@ def check(data, iops, slope, pct, limit, + data = data[measurement] + mean = sum(data) / len(data) + if slope: +- x = range(len(data)) ++ x = list(range(len(data))) + m, intercept, r_value, p_value, std_err = stats.linregress(x,data) + m = abs(m) + if pct: +@@ -89,11 +93,11 @@ if __name__ == '__main__': + 'output': "set steady state BW threshold to 12" }, + ] + for test in parsing: +- output = subprocess.check_output([args.fio] + test['args']); +- if test['output'] in output: +- print "PASSED '{0}' found with arguments {1}".format(test['output'], test['args']) ++ output = subprocess.check_output([args.fio] + test['args']) ++ if test['output'] in output.decode(): ++ print("PASSED '{0}' found with arguments {1}".format(test['output'], test['args'])) + else: +- print "FAILED '{0}' NOT found with arguments {1}".format(test['output'], test['args']) ++ print("FAILED '{0}' NOT found with arguments {1}".format(test['output'], test['args'])) + + # + # test some read workloads +@@ -117,7 +121,7 @@ if __name__ == '__main__': + args.read = '/dev/zero' + extra = [ "--size=134217728" ] # 128 MiB + else: +- print "ERROR: file for read testing must be specified on non-posix systems" ++ print("ERROR: file for read testing must be specified on non-posix systems") + sys.exit(1) + else: + extra = [] +@@ -216,7 +220,7 @@ if __name__ == '__main__': + else: + result = 'FAILED ' + line = result + line + ' no ss, expected runtime {0} ~= actual runtime {1}'.format(expected, actual) +- print line ++ print(line) + if 'steadystate' in jsonjob: + pp.pprint(jsonjob['steadystate']) + jobnum += 1 + + diff --git a/fio.spec b/fio.spec index 2634519..ce15de2 100644 --- a/fio.spec +++ b/fio.spec @@ -1,6 +1,6 @@ Name: fio Version: 3.6 -Release: 1%{?dist} +Release: 2%{?dist} Summary: Multithreaded IO generation tool Group: Applications/System @@ -21,6 +21,8 @@ BuildRequires: numactl-devel BuildRequires: librdmacm-devel %endif +Patch0: fio-python3.patch + %description fio is an I/O tool that will spawn a number of threads or processes doing a particular type of io action as specified by the user. fio takes a @@ -32,6 +34,8 @@ one wants to simulate. %prep %setup -q +%patch0 -p1 + %build ./configure --disable-optimizations EXTFLAGS="$RPM_OPT_FLAGS" LDFLAGS="$RPM_LD_FLAGS" make V=1 %{?_smp_mflags} @@ -48,6 +52,9 @@ make install prefix=%{_prefix} mandir=%{_mandir} DESTDIR=$RPM_BUILD_ROOT INSTALL %{_datadir}/%{name}/* %changelog +* Wed May 16 2018 Eric Sandeen 3.6-2 +- Make all python scripts python3 compliant and explicit + * Wed Apr 18 2018 Eric Sandeen 3.6-1 - New upstream version