zrepl/platformtest/tests
Christian Schwarz 226962b4fb 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-08-23 00:21:34 +02:00
..
gen [#321] platformtest: generate test case list + coverage tooling 2020-06-14 15:21:36 +02:00
batchDestroy.go [#307] add package trace, integrate it with logging, and adopt it throughout zrepl 2020-05-19 11:30:02 +02:00
generated_cases.go zfs: rewrite SendStream, fix bug in Close() on FreeBSD, add platformtests 2021-08-23 00:21:34 +02:00
getNonexistent.go zfs: use exec.CommandContext everywhere 2020-03-27 13:08:43 +01:00
helpers.go [#277] rpc + zfs: drop zfs.StreamCopier, use io.ReadCloser instead 2020-05-18 19:46:24 +02:00
holds.go Reformat all files with make format. 2020-08-31 23:57:45 +02:00
idempotentBookmark.go Reformat all files with make format. 2020-08-31 23:57:45 +02:00
idempotentDestroy.go [#316] endpoint / replication protocol: more robust step-holds and replication cursor management 2020-06-14 15:21:36 +02:00
idempotentHold.go endpoint: refactor, fix stale holds on initial replication failure, zfs-abstractions subcmd, more efficient ZFS queries 2020-04-18 12:26:03 +02:00
listFilesystems.go endpoint: refactor, fix stale holds on initial replication failure, zfs-abstractions subcmd, more efficient ZFS queries 2020-04-18 12:26:03 +02:00
listFilesystemVersions.go [#321] platformtest: fix test ListFilesystemVersionsZeroExistIsNotAnError 2020-06-14 15:21:36 +02:00
recvForceIntoEncryptedErr.go [#285] support setting zfs send / recv flags in the config (send: -wLcepbS, recv: -ox) 2021-02-20 17:20:45 +01:00
recvRollback.go platformtest: fix 'active child tasks' panic for ReceiveForceRollbackWorksUnencrypted 2021-08-23 00:21:34 +02:00
replication.go platformtest: fix replication tests (SizeEstimationConcurrency field in PlannerPolicy was not set) 2021-08-23 00:21:34 +02:00
replicationCursor.go replication + endpoint: replication guarantees: guarantee_{resumability,incremental,nothing} 2020-07-26 20:32:35 +02:00
resumableRecvAndTokenHandling.go [#285] support setting zfs send / recv flags in the config (send: -wLcepbS, recv: -ox) 2021-02-20 17:20:45 +01:00
resumeTokenParsing.go zfs: use exec.CommandContext everywhere 2020-03-27 13:08:43 +01:00
resumeTokensGenerate.bash new features: {resumable,encrypted,hold-protected} send-recv, last-received-hold 2020-02-14 22:00:13 +01:00
sendArgsValidation.go [#285] support setting zfs send / recv flags in the config (send: -wLcepbS, recv: -ox) 2021-02-20 17:20:45 +01:00
sendStream.go zfs: rewrite SendStream, fix bug in Close() on FreeBSD, add platformtests 2021-08-23 00:21:34 +02:00
tests.go [#321] platformtest: generate test case list + coverage tooling 2020-06-14 15:21:36 +02:00
undestroyableSnapshotParsing.go zfs: use exec.CommandContext everywhere 2020-03-27 13:08:43 +01:00