avoid crash when starting fsck --incremental when one is already running
Turns out sqlite does not like having its database deleted out from underneath it. It might suffice to empty the table, but I would rather start each fsck over with a new database, so I added a lock file, and running incremental fscks use a shared lock. This leaves one concurrency bug left; running two concurrent fsck --more will lead to: "SQLite3 returned ErrorBusy while attempting to perform step." and one or both will fail. This is a concurrent writers problem.
This commit is contained in:
parent
ea76d04e15
commit
afb3e3e472
4 changed files with 50 additions and 8 deletions
|
@ -58,6 +58,7 @@ module Locations (
|
|||
gitAnnexRemotesDir,
|
||||
gitAnnexAssistantDefaultDir,
|
||||
gitAnnexFsckDb,
|
||||
gitAnnexFsckDbLock,
|
||||
isLinkToAnnex,
|
||||
HashLevels(..),
|
||||
hashDirMixed,
|
||||
|
@ -345,6 +346,10 @@ gitAnnexAssistantDefaultDir = "annex"
|
|||
gitAnnexFsckDb :: Git.Repo -> FilePath
|
||||
gitAnnexFsckDb r = gitAnnexDir r </> "fsck.db"
|
||||
|
||||
{- Lock file for the fsck database. -}
|
||||
gitAnnexFsckDbLock :: Git.Repo -> FilePath
|
||||
gitAnnexFsckDbLock r = gitAnnexDir r </> "fsck.dbl"
|
||||
|
||||
{- Checks a symlink target to see if it appears to point to annexed content.
|
||||
-
|
||||
- We only look at paths inside the .git directory, and not at the .git
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue