Permalink
Browse files

Merge remote-tracking branch 'upstream/master'

  • Loading branch information...
madwizard committed Jan 7, 2019
2 parents 84a2c4b + c87db59 commit 2eb0947a3027c87fc01b4e712aeca5fe70b14fe9
Showing with 1,594 additions and 1,395 deletions.
  1. +2 −0 .gitignore
  2. +13 −1 cmd/arc_summary/Makefile.am
  3. +8 −6 cmd/arc_summary/{arc_summary.py → arc_summary2}
  4. +3 −3 cmd/arc_summary/{arc_summary3.py → arc_summary3}
  5. +13 −1 cmd/arcstat/Makefile.am
  6. +8 −7 cmd/arcstat/{arcstat.py → arcstat}
  7. +13 −1 cmd/dbufstat/Makefile.am
  8. +9 −7 cmd/dbufstat/{dbufstat.py → dbufstat}
  9. +102 −0 config/always-python.m4
  10. +28 −68 config/always-pyzfs.m4
  11. +1 −1 config/deb.am
  12. +7 −3 config/zfs-build.m4
  13. +1 −1 contrib/pyzfs/Makefile.am
  14. +1 −0 contrib/pyzfs/libzfs_core/__init__.py
  15. +3 −1 contrib/pyzfs/libzfs_core/_constants.py
  16. +17 −12 contrib/pyzfs/libzfs_core/_error_translation.py
  17. +19 −17 contrib/pyzfs/libzfs_core/_libzfs_core.py
  18. +5 −4 contrib/pyzfs/libzfs_core/_nvlist.py
  19. +2 −1 contrib/pyzfs/libzfs_core/bindings/__init__.py
  20. +1 −0 contrib/pyzfs/libzfs_core/bindings/libnvpair.py
  21. +1 −0 contrib/pyzfs/libzfs_core/bindings/libzfs_core.py
  22. +3 −2 contrib/pyzfs/libzfs_core/ctypes.py
  23. +1 −0 contrib/pyzfs/libzfs_core/exceptions.py
  24. +942 −907 contrib/pyzfs/libzfs_core/test/test_libzfs_core.py
  25. +128 −127 contrib/pyzfs/libzfs_core/test/test_nvlist.py
  26. +8 −2 contrib/pyzfs/setup.py
  27. +56 −23 rpm/generic/zfs.spec.in
  28. +4 −0 scripts/zfs-tests.sh
  29. +1 −2 tests/runfiles/linux.run
  30. +11 −0 tests/test-runner/bin/Makefile.am
  31. +102 −95 tests/test-runner/bin/test-runner.py
  32. +3 −1 tests/test-runner/bin/zts-report.py
  33. +4 −4 tests/zfs-tests/include/commands.cfg
  34. +2 −2 tests/zfs-tests/tests/functional/arc/dbufstats_001_pos.ksh
  35. +6 −6 tests/zfs-tests/tests/functional/arc/dbufstats_002_pos.ksh
  36. +0 −1 tests/zfs-tests/tests/functional/cli_user/misc/Makefile.am
  37. +0 −56 tests/zfs-tests/tests/functional/cli_user/misc/arc_summary3_001_pos.ksh
  38. +24 −7 tests/zfs-tests/tests/functional/cli_user/misc/arc_summary_001_pos.ksh
  39. +4 −4 tests/zfs-tests/tests/functional/cli_user/misc/arc_summary_002_neg.ksh
  40. +3 −3 tests/zfs-tests/tests/functional/cli_user/misc/arcstat_001_pos.ksh
  41. +9 −8 tests/zfs-tests/tests/functional/cli_user/misc/cleanup.ksh
  42. +5 −5 tests/zfs-tests/tests/functional/cli_user/misc/dbufstat_001_pos.ksh
  43. +1 −0 tests/zfs-tests/tests/functional/pyzfs/.gitignore
  44. +17 −3 tests/zfs-tests/tests/functional/pyzfs/Makefile.am
  45. +3 −3 tests/zfs-tests/tests/functional/pyzfs/{pyzfs_unittest.ksh → pyzfs_unittest.ksh.in}
@@ -22,6 +22,8 @@
*.swp
*.gcno
*.gcda
*.pyc
*.pyo
.deps
.libs
.dirstamp
@@ -1 +1,13 @@
dist_bin_SCRIPTS = arc_summary.py arc_summary3.py
EXTRA_DIST = arc_summary2 arc_summary3

if USING_PYTHON_2
dist_bin_SCRIPTS = arc_summary2
install-exec-hook:
mv $(DESTDIR)$(bindir)/arc_summary2 $(DESTDIR)$(bindir)/arc_summary
endif

if USING_PYTHON_3
dist_bin_SCRIPTS = arc_summary3
install-exec-hook:
mv $(DESTDIR)$(bindir)/arc_summary3 $(DESTDIR)$(bindir)/arc_summary
endif
@@ -1,4 +1,4 @@
#!/usr/bin/python
#!/usr/bin/python2
#
# $Id: arc_summary.pl,v 388:e27800740aa2 2011-07-08 02:53:29Z jhell $
#
@@ -35,6 +35,8 @@
# Note some of this code uses older code (eg getopt instead of argparse,
# subprocess.Popen() instead of subprocess.run()) because we need to support
# some very old versions of Python.
#

"""Print statistics on the ZFS Adjustable Replacement Cache (ARC)
Provides basic information on the ARC, its efficiency, the L2ARC (if present),
@@ -1005,7 +1007,7 @@ def zfs_header():
def usage():
"""Print usage information"""

sys.stdout.write("Usage: arc_summary.py [-h] [-a] [-d] [-p PAGE]\n\n")
sys.stdout.write("Usage: arc_summary [-h] [-a] [-d] [-p PAGE]\n\n")
sys.stdout.write("\t -h, --help : "
"Print this help message and exit\n")
sys.stdout.write("\t -a, --alternate : "
@@ -1018,10 +1020,10 @@ def usage():
"should be an integer between 1 and " +
str(len(unSub)) + "\n\n")
sys.stdout.write("Examples:\n")
sys.stdout.write("\tarc_summary.py -a\n")
sys.stdout.write("\tarc_summary.py -p 4\n")
sys.stdout.write("\tarc_summary.py -ad\n")
sys.stdout.write("\tarc_summary.py --page=2\n")
sys.stdout.write("\tarc_summary -a\n")
sys.stdout.write("\tarc_summary -p 4\n")
sys.stdout.write("\tarc_summary -ad\n")
sys.stdout.write("\tarc_summary --page=2\n")


def main():
@@ -346,7 +346,7 @@ def get_version(request):
error_msg = '(ERROR: "{0}" requested)'.format(request)
return error_msg

# The original arc_summary.py called /sbin/modinfo/{spl,zfs} to get
# The original arc_summary called /sbin/modinfo/{spl,zfs} to get
# the version information. We switch to /sys/module/{spl,zfs}/version
# to make sure we get what is really loaded in the kernel
command = ["cat", "/sys/module/{0}/version".format(request)]
@@ -374,7 +374,7 @@ def print_header():
"""

# datetime is now recommended over time but we keep the exact formatting
# from the older version of arc_summary.py in case there are scripts
# from the older version of arc_summary in case there are scripts
# that expect it in this way
daydate = time.strftime(DATE_FORMAT)
spc_date = LINE_LENGTH-len(daydate)
@@ -586,7 +586,7 @@ def section_archits(kstats_dict):

# For some reason, anon_hits can turn negative, which is weird. Until we
# have figured out why this happens, we just hide the problem, following
# the behavior of the original arc_summary.py
# the behavior of the original arc_summary.
if anon_hits >= 0:
prt_i2('Anonymously used:',
f_perc(anon_hits, arc_stats['hits']), f_hits(anon_hits))
@@ -1 +1,13 @@
dist_bin_SCRIPTS = arcstat.py
dist_bin_SCRIPTS = arcstat

#
# The arcstat script is compatibile with both Python 2.6 and 3.4.
# As such the python 3 shebang can be replaced at install time when
# targeting a python 2 system. This allows us to maintain a single
# version of the source.
#
if USING_PYTHON_2
install-exec-hook:
sed --in-place 's|^#!/usr/bin/python3|#!/usr/bin/python2|' \
$(DESTDIR)$(bindir)/arcstat
endif
@@ -1,4 +1,4 @@
#!/usr/bin/python
#!/usr/bin/python3
#
# Print out ZFS ARC Statistics exported via kstat(1)
# For a definition of fields, or usage, use arctstat.pl -v
@@ -42,7 +42,8 @@
# @hdr is the array of fields that needs to be printed, so we
# just iterate over this array and print the values using our pretty printer.
#

# This script must remain compatible with Python 2.6+ and Python 3.4+.
#

import sys
import time
@@ -109,7 +110,7 @@
sep = " " # Default separator is 2 spaces
version = "0.4"
l2exist = False
cmd = ("Usage: arcstat.py [-hvx] [-f fields] [-o file] [-s string] [interval "
cmd = ("Usage: arcstat [-hvx] [-f fields] [-o file] [-s string] [interval "
"[count]]\n")
cur = {}
d = {}
@@ -138,10 +139,10 @@ def usage():
sys.stderr.write("\t -s : Override default field separator with custom "
"character or string\n")
sys.stderr.write("\nExamples:\n")
sys.stderr.write("\tarcstat.py -o /tmp/a.log 2 10\n")
sys.stderr.write("\tarcstat.py -s \",\" -o /tmp/a.log 2 10\n")
sys.stderr.write("\tarcstat.py -v\n")
sys.stderr.write("\tarcstat.py -f time,hit%,dh%,ph%,mh% 1\n")
sys.stderr.write("\tarcstat -o /tmp/a.log 2 10\n")
sys.stderr.write("\tarcstat -s \",\" -o /tmp/a.log 2 10\n")
sys.stderr.write("\tarcstat -v\n")
sys.stderr.write("\tarcstat -f time,hit%,dh%,ph%,mh% 1\n")
sys.stderr.write("\n")

sys.exit(1)
@@ -1 +1,13 @@
dist_bin_SCRIPTS = dbufstat.py
dist_bin_SCRIPTS = dbufstat

#
# The dbufstat script is compatibile with both Python 2.6 and 3.4.
# As such the python 3 shebang can be replaced at install time when
# targeting a python 2 system. This allows us to maintain a single
# version of the source.
#
if USING_PYTHON_2
install-exec-hook:
sed --in-place 's|^#!/usr/bin/python3|#!/usr/bin/python2|' \
$(DESTDIR)$(bindir)/dbufstat
endif
@@ -1,4 +1,4 @@
#!/usr/bin/python
#!/usr/bin/python3
#
# Print out statistics for all cached dmu buffers. This information
# is available through the dbufs kstat and may be post-processed as
@@ -27,6 +27,8 @@
# Copyright (C) 2013 Lawrence Livermore National Security, LLC.
# Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
#
# This script must remain compatible with Python 2.6+ and Python 3.4+.
#

import sys
import getopt
@@ -106,7 +108,7 @@
hdr = None
xhdr = None
sep = " " # Default separator is 2 spaces
cmd = ("Usage: dbufstat.py [-bdhnrtvx] [-i file] [-f fields] [-o file] "
cmd = ("Usage: dbufstat [-bdhnrtvx] [-i file] [-f fields] [-o file] "
"[-s string] [-F filter]\n")
raw = 0

@@ -167,11 +169,11 @@ def usage():
"character or string\n")
sys.stderr.write("\t -F : Filter output by value or regex\n")
sys.stderr.write("\nExamples:\n")
sys.stderr.write("\tdbufstat.py -d -o /tmp/d.log\n")
sys.stderr.write("\tdbufstat.py -t -s \",\" -o /tmp/t.log\n")
sys.stderr.write("\tdbufstat.py -v\n")
sys.stderr.write("\tdbufstat.py -d -f pool,object,objset,dsize,cached\n")
sys.stderr.write("\tdbufstat.py -bx -F dbc=1,objset=54,pool=testpool\n")
sys.stderr.write("\tdbufstat -d -o /tmp/d.log\n")
sys.stderr.write("\tdbufstat -t -s \",\" -o /tmp/t.log\n")
sys.stderr.write("\tdbufstat -v\n")
sys.stderr.write("\tdbufstat -d -f pool,object,objset,dsize,cached\n")
sys.stderr.write("\tdbufstat -bx -F dbc=1,objset=54,pool=testpool\n")
sys.stderr.write("\n")

sys.exit(1)
@@ -0,0 +1,102 @@
dnl #
dnl # ZFS_AC_PYTHON_VERSION(version, [action-if-true], [action-if-false])
dnl #
dnl # Verify Python version
dnl #
AC_DEFUN([ZFS_AC_PYTHON_VERSION], [
ver_check=`$PYTHON -c "import sys; print (sys.version.split()[[0]] $1)"`
AS_IF([test "$ver_check" = "True"], [
m4_ifvaln([$2], [$2])
], [
m4_ifvaln([$3], [$3])
])
])

dnl #
dnl # ZFS_AC_PYTHON_MODULE(module_name, [action-if-true], [action-if-false])
dnl #
dnl # Checks for Python module. Freely inspired by AX_PYTHON_MODULE
dnl # https://www.gnu.org/software/autoconf-archive/ax_python_module.html
dnl # Required by ZFS_AC_CONFIG_ALWAYS_PYZFS.
dnl #
AC_DEFUN([ZFS_AC_PYTHON_MODULE], [
PYTHON_NAME=`basename $PYTHON`
AC_MSG_CHECKING([for $PYTHON_NAME module: $1])
AS_IF([$PYTHON -c "import $1" 2>/dev/null], [
AC_MSG_RESULT(yes)
m4_ifvaln([$2], [$2])
], [
AC_MSG_RESULT(no)
m4_ifvaln([$3], [$3])
])
])

dnl #
dnl # The majority of the python scripts are written to be compatible
dnl # with Python 2.6 and Python 3.4. Therefore, they may be installed
dnl # and used with either interpreter. This option is intended to
dnl # to provide a method to specify the default system version, and
dnl # set the PYTHON environment variable accordingly.
dnl #
AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_PYTHON], [
AC_ARG_WITH([python],
AC_HELP_STRING([--with-python[=VERSION]],
[default system python version @<:@default=check@:>@]),
[with_python=$withval],
[with_python=check])

AS_CASE([$with_python],
[check],
[AS_IF([test -x /usr/bin/python3],
[PYTHON="python3"],
[AS_IF([test -x /usr/bin/python2],
[PYTHON="python2"],
[PYTHON=""]
)]
)],
[2*], [PYTHON="python${with_python}"],
[*python2*], [PYTHON="${with_python}"],
[3*], [PYTHON="python${with_python}"],
[*python3*], [PYTHON="${with_python}"],
[no], [PYTHON=""],
[AC_MSG_ERROR([Unknown --with-python value '$with_python'])]
)

AS_IF([$PYTHON --version >/dev/null 2>&1], [ /bin/true ], [
AC_MSG_ERROR([Cannot find $PYTHON in your system path])
])

AM_PATH_PYTHON([2.6], [], [:])
AM_CONDITIONAL([USING_PYTHON], [test "$PYTHON" != :])
AM_CONDITIONAL([USING_PYTHON_2], [test "${PYTHON_VERSION:0:2}" = "2."])
AM_CONDITIONAL([USING_PYTHON_3], [test "${PYTHON_VERSION:0:2}" = "3."])

dnl #
dnl # Minimum supported Python versions for utilities:
dnl # Python 2.6.x, or Python 3.4.x
dnl #
AS_IF([test "${PYTHON_VERSION:0:2}" = "2."], [
ZFS_AC_PYTHON_VERSION([>= '2.6'], [ /bin/true ],
[AC_MSG_ERROR("Python >= 2.6.x is not available")])
])

AS_IF([test "${PYTHON_VERSION:0:2}" = "3."], [
ZFS_AC_PYTHON_VERSION([>= '3.4'], [ /bin/true ],
[AC_MSG_ERROR("Python >= 3.4.x is not available")])
])

dnl #
dnl # Request that packages be built for a specific Python version.
dnl #
AS_IF([test $with_python != check], [
PYTHON_PKG_VERSION=`echo ${PYTHON} | tr -d 'a-zA-Z.'`
DEFINE_PYTHON_PKG_VERSION='--define "__use_python_pkg_version '${PYTHON_PKG_VERSION}'"'
DEFINE_PYTHON_VERSION='--define "__use_python '${PYTHON}'"'
], [
DEFINE_PYTHON_VERSION=''
DEFINE_PYTHON_PKG_VERSION=''
])

AC_SUBST(DEFINE_PYTHON_VERSION)
AC_SUBST(DEFINE_PYTHON_PKG_VERSION)
])
Oops, something went wrong.

0 comments on commit 2eb0947

Please sign in to comment.