zrepl/platformtest/tests
Christian Schwarz 5615f4929a
fix: replication of placeholder filesystems (#744)
fixes https://github.com/zrepl/zrepl/issues/742

Before this PR, when chaining replication from
A => B => C, if B had placeholders and the `filesystems`
included these placeholders, we'd incorrectly
fail the planning phase with error
`sender does not have any versions`.

The non-placeholder child filesystems of these placeholders
would then fail to replicate because of the
initial-replication-dependency-tracking that we do, i.e.,
their parent failed to initially replication, hence
they fail to replicate as well
(`parent(s) failed during initial replication`).

We can do better than that because we have the information
whether a sender-side filesystem is a placeholder.
This PR makes the planner act on that information.
The outcome is that placeholders are replicated as
placeholders (albeit the receiver remains in control
of how these placeholders are created, i.e., `recv.placeholders`)
The mechanism to do it is:
1. Don't plan any replication steps for filesystems that
   are placeholders on the sender.
2. Ensure that, if a receiving-side filesystem exists, it
   is indeed a placeholder.

Check (2) may seem overly restrictive, but, the goal here
is not just to mirror all non-placeholder filesystems, but
also to mirror the hierarchy.

Testing performed:
- [x] confirm with issue reporter that this PR fixes their issue
- [x] add a regression test that fails without the changes in this PR
2024-09-05 23:26:42 +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 fix: replication of placeholder filesystems (#744) 2024-09-05 23:26:42 +02:00
getNonexistent.go zfs: use exec.CommandContext everywhere 2020-03-27 13:08:43 +01:00
helpers.go fix encrypt-on-receive with placeholders 2021-12-18 15:12:47 +01: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-09-19 20:03:01 +02:00
replication.go fix: replication of placeholder filesystems (#744) 2024-09-05 23:26:42 +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 rework resume token validation to allow resuming from raw sends of unencrypted datasets 2022-09-25 17:32:02 +02:00
sendStream.go zfs: rewrite SendStream, fix bug in Close() on FreeBSD, add platformtests 2021-09-19 20:11:31 +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