This commit is contained in:
Joey Hess 2024-09-17 11:19:59 -04:00
parent 2a16796a1c
commit 4c7db31c20
No known key found for this signature in database
GPG key ID: DB12DB0FF05F8F38
4 changed files with 43 additions and 3 deletions

View file

@ -199,6 +199,7 @@ data SimCommand
| CommandDisconnect Connections | CommandDisconnect Connections
| CommandAddTree RepoName PreferredContentExpression | CommandAddTree RepoName PreferredContentExpression
| CommandAdd RawFilePath ByteSize [RepoName] | CommandAdd RawFilePath ByteSize [RepoName]
| CommandAddMulti Int String ByteSize ByteSize [RepoName]
| CommandStep Int | CommandStep Int
| CommandAction SimAction | CommandAction SimAction
| CommandSeed Int | CommandSeed Int
@ -319,6 +320,16 @@ applySimCommand' (CommandAdd file sz repos) st _ =
{ simFiles = M.insert file k (simFiles st') { simFiles = M.insert file k (simFiles st')
} }
in go k st'' rest in go k st'' rest
applySimCommand' (CommandAddMulti n suffix minsz maxsz repos) st repobyname =
let (sz, st') = simRandom st (randomR (minsz, maxsz)) id
file = toRawFilePath (show n ++ suffix)
in case applySimCommand' (CommandAdd file sz repos) st' repobyname of
Left err -> Left err
Right (Right st'') ->
case pred n of
0 -> Right (Right st'')
n' -> applySimCommand' (CommandAddMulti n' suffix minsz maxsz repos) st'' repobyname
Right (Left _) -> error "applySimCommand' CommandAddMulti"
applySimCommand' (CommandStep _) _ _ = error "applySimCommand' CommandStep" applySimCommand' (CommandStep _) _ _ = error "applySimCommand' CommandStep"
applySimCommand' (CommandAction act) st _ = applySimCommand' (CommandAction act) st _ =
case getSimActionComponents act st of case getSimActionComponents act st of

View file

@ -49,6 +49,8 @@ generateSimFile = unlines . map unwords . go
["addtree", name, expr] : go rest ["addtree", name, expr] : go rest
go (CommandAdd f sz repos : rest) = go (CommandAdd f sz repos : rest) =
(["add", fromRawFilePath f, showsize sz] ++ map fromRepoName repos) : go rest (["add", fromRawFilePath f, showsize sz] ++ map fromRepoName repos) : go rest
go (CommandAddMulti n suffix minsz maxsz repos : rest) =
(["addmulti", show n, suffix, showsize minsz, showsize maxsz] ++ map fromRepoName repos) : go rest
go (CommandStep n : rest) = go (CommandStep n : rest) =
["step", show n] : go rest ["step", show n] : go rest
go (CommandAction act : rest) = formatAction act : go rest go (CommandAction act : rest) = formatAction act : go rest
@ -127,6 +129,16 @@ parseSimCommand ("add":filename:size:repos) =
sz sz
(map RepoName repos) (map RepoName repos)
Nothing -> Left $ "Unable to parse file size \"" ++ size ++ "\"" Nothing -> Left $ "Unable to parse file size \"" ++ size ++ "\""
parseSimCommand ("addmulti":num:suffix:minsize:maxsize:repos) =
case readSize dataUnits minsize of
Just minsz -> case readSize dataUnits maxsize of
Just maxsz -> case readMaybe num of
Just n -> Right $ CommandAddMulti
n suffix minsz maxsz
(map RepoName repos)
Nothing -> Left $ "Unable to parse number \"" ++ num ++ "\""
Nothing -> Left $ "Unable to parse file size \"" ++ maxsize ++ "\""
Nothing -> Left $ "Unable to parse file size \"" ++ minsize ++ "\""
parseSimCommand ("step":n:[]) = parseSimCommand ("step":n:[]) =
case readMaybe n of case readMaybe n of
Just n' -> Right $ CommandStep n' Just n' -> Right $ CommandStep n'

View file

@ -137,6 +137,9 @@ as passed to "git annex sim" while a simulation is running.
This can be used with the same files more than once, to make multiple This can be used with the same files more than once, to make multiple
repositories in the simulation contain the same files. repositories in the simulation contain the same files.
Note that adding a large number of files to the simulation can slow it
down and make it use a lot of memory.
* `add filename size repo [repo ...]` * `add filename size repo [repo ...]`
Create a simulated annexed file with the specified filename and size, Create a simulated annexed file with the specified filename and size,
@ -156,6 +159,23 @@ as passed to "git annex sim" while a simulation is running.
different repositories. The files in the simulation are the same across different repositories. The files in the simulation are the same across
all simulated repositories. all simulated repositories.
* `addmulti N suffix minsize maxsize repo [repo ...]
Add multiple simulated annexed files, with random sizes in the range
between minsize and maxsize.
The files are named by combining the number, which starts at 1 and goes
up to N, with the suffix.
For example:
addmulti 100 testfile.jpg 100kb 10mb foo
That adds files named "1testfile.jpg", 2testfile.jpg", etc.
Note that adding a large number of files to the simulation can slow it
down and make it use a lot of memory.
* `step N` * `step N`
Run the simulation forward by this many steps. Run the simulation forward by this many steps.

View file

@ -34,9 +34,6 @@ Planned schedule of work:
* sim: Test ActionDropUnwanted Nothing * sim: Test ActionDropUnwanted Nothing
* sim: Command to create a set of files with random sizes in a specified
range.
* sim: implement addtree * sim: implement addtree
* sim: implement ActionDropUnwanted * sim: implement ActionDropUnwanted