Replicate all dependencies of a dataset first #572
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Assuming we want to replicate the following pool:
Note the clone dependencies:
A -> B -> C
.Currently, syncoid notices that
A
andB
are clones and defers syncing them.There are two problems:
A/D
fails because we have deferredA
.A -> B
will not be recreated since the list of deferred datasets does not take into account clone relations between them.This PR solves both of these problems by collecting all dependencies of a dataset and syncing them before the dataset itself.
One problematic case remains: if a dataset depends (transitively) on one of its own children, e.g.:
Here, the first run of syncoid will fail to sync
E/D
.I've chosen to ignore this case for now because
E/D
too (although the clone relationE -> E/D
is lost).