sim design

This commit is contained in:
Joey Hess 2024-09-03 14:23:48 -04:00
parent 5807e1480c
commit 3398514c38
No known key found for this signature in database
GPG key ID: DB12DB0FF05F8F38

View file

@ -80,4 +80,36 @@ Be sure to enforce invariants like numcopies the same as git-annex does.
Since users can write preferred content expressions, this should be
targeted at being used by end users.
The sim could be run in a clone of a repository, and update location
logs as it runs. This would let the user query with `whereis` and
`maxsize` etc to see what happens.
Such a repository's location tracking would no longer match reality,
so it would need to be clearly marked as a simulation result, and be
prevented from merging back into another repository. This can be done by
adding a new Difference to the repository.
The sim would need a map of repositories with connections between them.
Perhaps `git-annex map` could be used?
For each step of the sim, it would pick a repository from the map
(excluding special remotes), and simulate an operation being run in that
repository, affecting it and its remotes.
Split brain needs to be simulated, so the operations in the sim should
include pushing and fetching the git-annex branch. The ref of each
git-annex branch of each repository would be stored, with
refs/heads/git-annex being set to the git-annex branch of the repository
it is currently simulating an operation in.
The other operations would include get, drop, copy, move, sync, all
with preferred content respected.
May want to also simulate adding files to a repository, which would be
generated (without any actual content) according to simulation parameters.
Also file moves and deletions. `git-annex fuzztest` has some prior art.
The location log history could be examined at the end of the simulation
to find problems like instability.
[[!tag projects/openneuro]]