fsck --from remote -J concurrency bug
fsck --from remote: Fix a concurrency bug that could make it incorrectly detect that content in the remote is corrupt, and remove it, resulting in data loss.
This commit is contained in:
parent
399319ccbc
commit
352963690a
4 changed files with 23 additions and 2 deletions
|
@ -1,5 +1,8 @@
|
||||||
git-annex (7.20200205) UNRELEASED; urgency=medium
|
git-annex (7.20200205) UNRELEASED; urgency=medium
|
||||||
|
|
||||||
|
* fsck --from remote: Fix a concurrency bug that could make it incorrectly
|
||||||
|
detect that content in the remote is corrupt, and remove it, resulting in
|
||||||
|
data loss.
|
||||||
* When git-annex is built with a ssh that does not support ssh connection
|
* When git-annex is built with a ssh that does not support ssh connection
|
||||||
caching, default annex.sshcaching to false, but let the user override it.
|
caching, default annex.sshcaching to false, but let the user override it.
|
||||||
* Improve warning messages further when ssh connection caching cannot
|
* Improve warning messages further when ssh connection caching cannot
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{- git-annex command
|
{- git-annex command
|
||||||
-
|
-
|
||||||
- Copyright 2010-2019 Joey Hess <id@joeyh.name>
|
- Copyright 2010-2020 Joey Hess <id@joeyh.name>
|
||||||
-
|
-
|
||||||
- Licensed under the GNU AGPL version 3 or higher.
|
- Licensed under the GNU AGPL version 3 or higher.
|
||||||
-}
|
-}
|
||||||
|
@ -161,6 +161,11 @@ performRemote key afile backend numcopies remote =
|
||||||
]
|
]
|
||||||
ai = mkActionItem (key, afile)
|
ai = mkActionItem (key, afile)
|
||||||
withtmp a = do
|
withtmp a = do
|
||||||
|
-- Put it in the gitAnnexTmpObjectDir since that's on a
|
||||||
|
-- filesystem where object temp files are normally
|
||||||
|
-- stored. The pid prevents multiple fsck processes
|
||||||
|
-- contending over the same file. (Multiple threads cannot,
|
||||||
|
-- because OnlyActionOn is used.)
|
||||||
pid <- liftIO getPID
|
pid <- liftIO getPID
|
||||||
t <- fromRepo gitAnnexTmpObjectDir
|
t <- fromRepo gitAnnexTmpObjectDir
|
||||||
createAnnexDirectory t
|
createAnnexDirectory t
|
||||||
|
@ -541,7 +546,7 @@ badContentRemote remote localcopy key = do
|
||||||
|
|
||||||
runFsck :: Incremental -> ActionItem -> Key -> Annex Bool -> CommandStart
|
runFsck :: Incremental -> ActionItem -> Key -> Annex Bool -> CommandStart
|
||||||
runFsck inc ai key a = stopUnless (needFsck inc key) $
|
runFsck inc ai key a = stopUnless (needFsck inc key) $
|
||||||
starting "fsck" ai $ do
|
starting "fsck" (OnlyActionOn key ai) $ do
|
||||||
ok <- a
|
ok <- a
|
||||||
when ok $
|
when ok $
|
||||||
recordFsckTime inc key
|
recordFsckTime inc key
|
||||||
|
|
|
@ -145,3 +145,5 @@ whereis file2 (1 copy)
|
||||||
5d9b0df2-000b-4273-bc4a-fb3b9d8319bd -- testrepo [here]
|
5d9b0df2-000b-4273-bc4a-fb3b9d8319bd -- testrepo [here]
|
||||||
ok
|
ok
|
||||||
"""]]
|
"""]]
|
||||||
|
|
||||||
|
> [[fixed|done]] --[[Joey]]
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
[[!comment format=mdwn
|
||||||
|
username="joey"
|
||||||
|
subject="""comment 1"""
|
||||||
|
date="2020-02-14T18:49:07Z"
|
||||||
|
content="""
|
||||||
|
Ugh, I think this could potentially result in data loss. Not when using bup,
|
||||||
|
but other special remotes.
|
||||||
|
|
||||||
|
I've fixed it in git and will think about moving the date of the next
|
||||||
|
release up.
|
||||||
|
"""]]
|
Loading…
Add table
Add a link
Reference in a new issue