fix state overwrite bug

I have needed to excercise a lot of care in threading st through, and I
got it wrong here. Probably using a state monad would be a good idea.
This commit is contained in:
Joey Hess 2024-09-24 10:00:38 -04:00
parent 76fa43e882
commit 7cc4312695
No known key found for this signature in database
GPG key ID: DB12DB0FF05F8F38
2 changed files with 6 additions and 42 deletions

View file

@ -941,19 +941,19 @@ updateSimRepos :: SimState SimRepo -> IO (SimState SimRepo)
updateSimRepos st = updateSimRepoStates st >>= initNewSimRepos
updateSimRepoStates :: SimState SimRepo -> IO (SimState SimRepo)
updateSimRepoStates st = go st (M.toList $ simRepoState st)
updateSimRepoStates inst = go inst (M.toList $ simRepoState inst)
where
go st' [] = return st'
go st' ((u, rst):rest) = case simRepo rst of
go st [] = return st
go st ((u, rst):rest) = case simRepo rst of
Just sr -> do
sr' <- updateSimRepoState st sr
let rst' = rst { simRepo = Just sr' }
let st'' = st
let st' = st
{ simRepoState = M.insert u rst'
(simRepoState st)
}
go st'' rest
Nothing -> go st' rest
go st' rest
Nothing -> go st rest
initNewSimRepos :: SimState SimRepo -> IO (SimState SimRepo)
initNewSimRepos = \st -> go st (M.toList $ simRepoState st)

View file

@ -30,42 +30,6 @@ Planned schedule of work:
* Currently working in [[todo/proving_preferred_content_behavior]]
* sim: updateSimRepoState turns out to call preferredContentSet repeatedly
and also preferred content changes made part way through the sim
seem to not take effect. Test case is this, which should not end
by getting a file into bar that it no longer wants, and which was just
dropped.
Note that this test case does not behave this way if the final
step is run in a separate git-annex sim command. It's only when
it's run by git-annex sim start that it does.
seed 5338836154135478106
init foo
init bar
connect foo <-> bar
addmulti 10 testfile 100.0kB 10.0MB foo
wanted bar anything
wanted foo anything
step 20
present bar 8testfile
present bar 6testfile
present bar 4testfile
present bar 5testfile
present bar 7testfile
present bar 1testfile
present bar 9testfile
present bar 2testfile
present bar 10testfile
present bar 3testfile
wanted bar nothing
step 5
notpresent bar 6testfile
notpresent bar 1testfile
notpresent bar 8testfile
notpresent bar 10testfile
present bar 1testfile
* sim: Can a cluster using size balanced preferred content be simulated?
May need the sim to get the concept of a cluster gateway, since the
gateway is what picks amoung the nodes on the basis of size. On the other