fix restaging of transferred files after stalldetection kicks in

Sponsored-by: Dartmouth College's DANDI project
This commit is contained in:
Joey Hess 2022-09-23 15:55:40 -04:00
parent 6a3bd283b8
commit f7146c153b
No known key found for this signature in database
GPG key ID: DB12DB0FF05F8F38
2 changed files with 13 additions and 4 deletions

View file

@ -217,6 +217,8 @@ restagePointerFiles r = unlessM (Annex.getState Annex.insmudgecleanfilter) $ do
liftIO . Database.Keys.Handle.closeDbHandle liftIO . Database.Keys.Handle.closeDbHandle
=<< Annex.getRead Annex.keysdbhandle =<< Annex.getRead Annex.keysdbhandle
realindex <- liftIO $ Git.Index.currentIndexFile r realindex <- liftIO $ Git.Index.currentIndexFile r
numsz@(numfiles, _) <- calcRestageLog (0, 0) $ \(_f, ic) (numfiles, sizefiles) ->
(numfiles+1, sizefiles + inodeCacheFileSize ic)
let lock = fromRawFilePath (Git.Index.indexFileLock realindex) let lock = fromRawFilePath (Git.Index.indexFileLock realindex)
lockindex = liftIO $ catchMaybeIO $ Git.LockFile.openLock' lock lockindex = liftIO $ catchMaybeIO $ Git.LockFile.openLock' lock
unlockindex = liftIO . maybe noop Git.LockFile.closeLock unlockindex = liftIO . maybe noop Git.LockFile.closeLock
@ -235,8 +237,6 @@ restagePointerFiles r = unlessM (Annex.getState Annex.insmudgecleanfilter) $ do
[ Param "-c" [ Param "-c"
, Param $ "core.safecrlf=" ++ boolConfig False , Param $ "core.safecrlf=" ++ boolConfig False
] } ] }
numsz <- calcRestageLog (0, 0) $ \(_f, ic) (numfiles, sizefiles) ->
(numfiles+1, sizefiles + inodeCacheFileSize ic)
configfilterprocess numsz $ runsGitAnnexChildProcessViaGit' r'' $ \r''' -> configfilterprocess numsz $ runsGitAnnexChildProcessViaGit' r'' $ \r''' ->
Git.UpdateIndex.refreshIndex r''' $ \feeder -> do Git.UpdateIndex.refreshIndex r''' $ \feeder -> do
let atend = do let atend = do
@ -251,7 +251,8 @@ restagePointerFiles r = unlessM (Annex.getState Annex.insmudgecleanfilter) $ do
ok <- liftIO (createLinkOrCopy realindex tmpindex) ok <- liftIO (createLinkOrCopy realindex tmpindex)
<&&> catchBoolIO updatetmpindex <&&> catchBoolIO updatetmpindex
unless ok showwarning unless ok showwarning
bracket lockindex unlockindex go when (numfiles > 0) $
bracket lockindex unlockindex go
where where
isunmodified tsd f orig = isunmodified tsd f orig =
genInodeCache f tsd >>= return . \case genInodeCache f tsd >>= return . \case

View file

@ -1,6 +1,6 @@
{- A pool of "git-annex transferrer" processes {- A pool of "git-annex transferrer" processes
- -
- Copyright 2013-2021 Joey Hess <id@joeyh.name> - Copyright 2013-2022 Joey Hess <id@joeyh.name>
- -
- Licensed under the GNU AGPL version 3 or higher. - Licensed under the GNU AGPL version 3 or higher.
-} -}
@ -22,6 +22,7 @@ import Types.CleanupActions
import Messages.Serialized import Messages.Serialized
import Annex.Path import Annex.Path
import Annex.StallDetection import Annex.StallDetection
import Annex.Link
import Utility.Batch import Utility.Batch
import Utility.Metered import Utility.Metered
import qualified Utility.SimpleProtocol as Proto import qualified Utility.SimpleProtocol as Proto
@ -286,3 +287,10 @@ emptyTransferrerPool = do
liftIO $ forM_ pool $ \case liftIO $ forM_ pool $ \case
TransferrerPoolItem (Just t) _ -> transferrerShutdown t TransferrerPoolItem (Just t) _ -> transferrerShutdown t
TransferrerPoolItem Nothing _ -> noop TransferrerPoolItem Nothing _ -> noop
-- Transferrers usually restage pointer files themselves,
-- but when killTransferrer is used, a transferrer may have
-- pointer files it has not gotten around to restaging yet.
-- So, restage pointer files here in clean up from such killed
-- transferrers.
unless (null pool) $
restagePointerFiles =<< Annex.gitRepo