zrepl/platformtest
Christian Schwarz a8e92971d0 zfs: rewrite SendStream, fix bug in Close() on FreeBSD, add platformtests
This commit was motivated by https://github.com/zrepl/zrepl/issues/495
where, on FreeBSD with OpenZFS 2.0, a SendStream.Close() call might wait indefinitely for `zfs send` to exit.
The reason is that, due to the refactoring done for redacted send & recv
(30af21b025),
the `dump_bytes` function, which writes to the pipe, executes in a separate thread (synctask taskq) iff not `HAVE_LARGE_STACKS`.
The `zfs send` process/thread waits for that taskq thread using an uninterruptible primitive.
So when we SIGKILL `zfs send`, that signal doesn't reach the right thread to interrupt the pipe write.

Theoretically this affects both Linux and FreeBSD, but most Linux users `HAVE_LARGE_STACKS` and since https://github.com/penzfs/zfs/pull/12350/files OpenZFS on FreeBSD `HAVE_LARGE_STACKS` as well.
However, at least until FreeBSD 13.1, possibly for the entire 13 lifecycle, we're going to have to live with that oddity.

Measures taken in this commit:
- Report the behavior as an upstream bug https://github.com/openzfs/zfs/issues/12500
- Change SendStream code so that it closes zrepl's read-end of the pipe (see comment in code)
- Clean up and make explicit SendStream's state handling
- Write extensive platformtests for SendStream
    - They pass on my Linux install and on FreeBSD 12
    - FreeBSD 13 still needs testing.

fixes https://github.com/zrepl/zrepl/issues/495
2021-09-19 20:11:31 +02:00
..
harness Reformat all files with make format. 2020-08-31 23:57:45 +02:00
logmockzfs add platformtest: infrastructure for ZFS compatiblity testing 2019-09-14 13:43:46 +02:00
tests zfs: rewrite SendStream, fix bug in Close() on FreeBSD, add platformtests 2021-09-19 20:11:31 +02:00
platformtest_exec.go platformtest: logging-related refactorings 2019-10-14 17:32:58 +02:00
platformtest_logging.go [#307] add package trace, integrate it with logging, and adopt it throughout zrepl 2020-05-19 11:30:02 +02:00
platformtest_ops.go bump golangci-lint to 1.35.2 and fix resulting lint errors 2021-01-25 00:16:01 +01:00
platformtest_parser_test.go add platformtest: infrastructure for ZFS compatiblity testing 2019-09-14 13:43:46 +02:00
platformtest_zpool.go [#321] platformtest: generate test case list + coverage tooling 2020-06-14 15:21:36 +02:00
platformtest.go platformtest: FailNow on Errorf 2020-05-15 21:04:52 +02:00