zfs/contrib/pyzfs
Antonio Russo f8c4d63a26
ZTS: avoid piping to special devices
As described in #11445, the kernel interface kernel_{read,write} no
longer act on special devices.  In the ZTS, zfs send and receive are
tested by piping to these devices, leading to spurious failures (for
positive tests) and may mask errors (for negative tests).

Until a more permanent mechanism to address this deficiency is
developed, clean up the output from the ZTS by avoiding directly piping
to or from /dev/null and /dev/zero.

For /dev/zero input, simply use a pipe: `cat </dev/zero |` .

However, for /dev/null output, the shell semantics for pipe failures
means that zfs send error codes will be masked by the successful
`| cat >/dev/null` command execution.  In that case, use a temporary
file under $TEST_BASE_DIR for output in favor.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: Attila Fülöp <attila@fueloep.org>
Signed-off-by: Antonio Russo <aerusso@aerusso.net>
Closes #11478
2021-01-19 11:53:35 -08:00
..
docs/source Fix typos in contrib/ 2019-08-30 09:44:43 -07:00
libzfs_core ZTS: avoid piping to special devices 2021-01-19 11:53:35 -08:00
.gitignore Add contrib/pyzfs/setup.py to .gitignore 2019-01-13 10:04:38 -08:00
LICENSE Adopt pyzfs from ClusterHQ 2018-05-01 10:33:35 -07:00
Makefile.am Fix out-of-tree build failures 2019-06-24 09:32:47 -07:00
README Replace ZFS on Linux references with OpenZFS 2020-10-08 20:10:13 -07:00
setup.py.in Use ZFS version for pyzfs & drop unused reqs file 2019-01-08 15:56:42 -08:00

README

This package provides a wrapper for libzfs_core C library.

libzfs_core is intended to be a stable interface for programmatic
administration of ZFS.
This wrapper provides one-to-one wrappers for libzfs_core API functions,
but the signatures and types are more natural to Python.
nvlists are wrapped as dictionaries or lists depending on their usage.
Some parameters have default values depending on typical use for
increased convenience.
Enumerations and bit flags become strings and lists of strings in Python.
Errors are reported as exceptions rather than integer errno-style
error codes.  The wrapper takes care to provide one-to-many mapping
of the error codes to the exceptions by interpreting a context
in which the error code is produced.

Unit tests and automated test for the libzfs_core API are provided
with this package.
Please note that the API tests perform lots of ZFS dataset level
operations and ZFS tries hard to ensure that any modifications
do reach stable storage. That means that the operations are done
synchronously and that, for example, disk caches are flushed.
Thus, the tests can be very slow on real hardware.
It is recommended to place the default temporary directory or
a temporary directory specified by, for instance, TMP environment
variable on a memory backed filesystem.

Package documentation: http://pyzfs.readthedocs.org
Package development: https://github.com/openzfs/zfs