Revert "lock journal before reading journal files"

This reverts commit 47358a6f95.

This added overhead, and will not be needed, because appends are going
to have to be made atomic for other reasons than avoiding incomplete
reads of data being appended.

In particular, when git-annex is interrupted in the middle of an append,
it must not leave the file with a partially written line. So appending
has to somehow be made fully atomic.
This commit is contained in:
Joey Hess 2022-07-18 13:38:12 -04:00
parent ce455223df
commit 2e6e9876e3
No known key found for this signature in database
GPG key ID: DB12DB0FF05F8F38

View file

@ -236,7 +236,7 @@ updateTo' pairs = do
else return $ "merging " ++
unwords (map Git.Ref.describe branches) ++
" into " ++ fromRef name
localtransitions <- getLocalTransitions jl
localtransitions <- getLocalTransitions
unless (null tomerge) $ do
showSideAction merge_desc
mapM_ checkBranchDifferences refs
@ -265,7 +265,7 @@ updateTo' pairs = do
-- Gather any transitions that are new to either the
-- local branch or a remote ref, which will need to be
-- applied on the fly.
localts <- lockJournal getLocalTransitions
localts <- getLocalTransitions
remotets <- mapM getRefTransitions refs
ts <- if all (localts ==) remotets
then return []
@ -307,14 +307,13 @@ get file = do
content <- if journalIgnorable st
then getRef fullname file
else if null (unmergedRefs st)
then lockJournal $
\jl -> getLocal jl file
then getLocal file
else unmergedbranchfallback st
setCache file content
return content
where
unmergedbranchfallback st = do
l <- lockJournal $ \jl -> getLocal jl file
l <- getLocal file
bs <- forM (unmergedRefs st) $ \ref -> getRef ref file
let content = l <> mconcat bs
return $ applytransitions (unhandledTransitions st) content
@ -344,7 +343,7 @@ precache file branchcontent = do
st <- getState
content <- if journalIgnorable st
then pure branchcontent
else lockJournal $ \jl -> getJournalFile jl (GetPrivate True) file >>= return . \case
else getJournalFileStale (GetPrivate True) file >>= return . \case
NoJournalledContent -> branchcontent
JournalledContent journalcontent -> journalcontent
PossiblyStaleJournalledContent journalcontent ->
@ -355,13 +354,13 @@ precache file branchcontent = do
- reflect changes in remotes.
- (Changing the value this returns, and then merging is always the
- same as using get, and then changing its value.) -}
getLocal :: JournalLocked -> RawFilePath -> Annex L.ByteString
getLocal jl = getLocal' jl (GetPrivate True)
getLocal :: RawFilePath -> Annex L.ByteString
getLocal = getLocal' (GetPrivate True)
getLocal' :: JournalLocked -> GetPrivate -> RawFilePath -> Annex L.ByteString
getLocal' jl getprivate file = do
getLocal' :: GetPrivate -> RawFilePath -> Annex L.ByteString
getLocal' getprivate file = do
fastDebug "Annex.Branch" ("read " ++ fromRawFilePath file)
go =<< getJournalFile jl getprivate file
go =<< getJournalFileStale getprivate file
where
go NoJournalledContent = getRef fullname file
go (JournalledContent journalcontent) = return journalcontent
@ -395,12 +394,12 @@ getRef ref file = withIndex $ catFile ref file
- modifes the current content of the file on the branch.
-}
change :: Journalable content => RegardingUUID -> RawFilePath -> (L.ByteString -> content) -> Annex ()
change ru file f = lockJournal $ \jl -> f <$> getToChange jl ru file >>= set jl ru file
change ru file f = lockJournal $ \jl -> f <$> getToChange ru file >>= set jl ru file
{- Applies a function which can modify the content of a file, or not. -}
maybeChange :: Journalable content => RegardingUUID -> RawFilePath -> (L.ByteString -> Maybe content) -> Annex ()
maybeChange ru file f = lockJournal $ \jl -> do
v <- getToChange jl ru file
v <- getToChange ru file
case f v of
Just jv ->
let b = journalableByteString jv
@ -421,8 +420,8 @@ changeOrAppend ru file f = lockJournal $ \jl -> do
Append toappend -> append jl ru file oldc toappend
{- Only get private information when the RegardingUUID is itself private. -}
getToChange :: JournalLocked -> RegardingUUID -> RawFilePath -> Annex L.ByteString
getToChange jl ru f = flip (getLocal' jl) f . GetPrivate =<< regardingPrivateUUID ru
getToChange :: RegardingUUID -> RawFilePath -> Annex L.ByteString
getToChange ru f = flip getLocal' f . GetPrivate =<< regardingPrivateUUID ru
{- Records new content of a file into the journal.
-
@ -708,10 +707,10 @@ stageJournal jl commitindex = withIndex $ withOtherTmp $ \tmpdir -> do
removeWhenExistsWith (R.removeLink) (toRawFilePath jlogf)
openjlog tmpdir = liftIO $ openTmpFileIn tmpdir "jlog"
getLocalTransitions :: JournalLocked -> Annex Transitions
getLocalTransitions jl =
getLocalTransitions :: Annex Transitions
getLocalTransitions =
parseTransitionsStrictly "local"
<$> getLocal jl transitionsLog
<$> getLocal transitionsLog
{- This is run after the refs have been merged into the index,
- but before the result is committed to the branch.
@ -960,7 +959,7 @@ overBranchFileContents' select go st = do
-- Check the journal, in case it did not get committed to the branch
checkjournal f branchcontent
| journalIgnorable st = return branchcontent
| otherwise = lockJournal $ \jl -> getJournalFile jl (GetPrivate True) f >>= return . \case
| otherwise = getJournalFileStale (GetPrivate True) f >>= return . \case
NoJournalledContent -> branchcontent
JournalledContent journalledcontent ->
Just journalledcontent
@ -970,7 +969,7 @@ overBranchFileContents' select go st = do
drain buf fs = case getnext fs of
Just (v, f, fs') -> do
liftIO $ putMVar buf fs'
content <- lockJournal $ \jl -> getJournalFile jl (GetPrivate True) f >>= \case
content <- getJournalFileStale (GetPrivate True) f >>= \case
NoJournalledContent -> return Nothing
JournalledContent journalledcontent ->
return (Just journalledcontent)