summaryrefslogtreecommitdiff
path: root/Database/Fsck.hs
diff options
context:
space:
mode:
authorGravatar Joey Hess <joeyh@joeyh.name>2015-07-31 16:42:15 -0400
committerGravatar Joey Hess <joeyh@joeyh.name>2015-07-31 16:42:15 -0400
commitce4c9013b9d32435765838b036ab52eb4ac6b51e (patch)
tree55642367dafb548d26c7b1e639c9c28c35dc2b13 /Database/Fsck.hs
parentdbe6b403da47172346b2536b50a379e6d9b76e31 (diff)
fsck: Commit incremental fsck database after every 1000 files fscked, or every 5 minutes, whichever comes first.
Previously, commits were made every 1000 files fscked. Also, improve docs
Diffstat (limited to 'Database/Fsck.hs')
-rw-r--r--Database/Fsck.hs10
1 files changed, 9 insertions, 1 deletions
diff --git a/Database/Fsck.hs b/Database/Fsck.hs
index d9416927b..20b4878e3 100644
--- a/Database/Fsck.hs
+++ b/Database/Fsck.hs
@@ -34,6 +34,7 @@ import Annex.LockFile
import Database.Persist.TH
import Database.Esqueleto hiding (Key)
+import Data.Time.Clock
data FsckHandle = FsckHandle H.DbHandle UUID
@@ -84,11 +85,18 @@ closeDb (FsckHandle h u) = do
unlockFile =<< fromRepo (gitAnnexFsckDbLock u)
addDb :: FsckHandle -> Key -> IO ()
-addDb (FsckHandle h _) k = H.queueDb h 1000 $
+addDb (FsckHandle h _) k = H.queueDb h checkcommit $
void $ insertUnique $ Fscked sk
where
sk = toSKey k
+ -- commit queue after 1000 files or 5 minutes, whichever comes first
+ checkcommit sz lastcommittime
+ | sz > 1000 = return True
+ | otherwise = do
+ now <- getCurrentTime
+ return $ diffUTCTime lastcommittime now > 300
+
inDb :: FsckHandle -> Key -> IO Bool
inDb (FsckHandle h _) = H.queryDb h . inDb' . toSKey