summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Assistant/Threads/TransferScanner.hs11
-rw-r--r--Logs/Transfer.hs6
-rw-r--r--debian/changelog3
3 files changed, 16 insertions, 4 deletions
diff --git a/Assistant/Threads/TransferScanner.hs b/Assistant/Threads/TransferScanner.hs
index 5a6871fdb..631310987 100644
--- a/Assistant/Threads/TransferScanner.hs
+++ b/Assistant/Threads/TransferScanner.hs
@@ -81,8 +81,7 @@ transferScannerThread urlrenderer = namedThread "TransferScanner" $ do
{- This is a cheap scan for failed transfers involving a remote. -}
failedTransferScan :: Remote -> Assistant ()
failedTransferScan r = do
- failed <- liftAnnex $ getFailedTransfers (Remote.uuid r)
- liftAnnex $ mapM_ removeFailedTransfer $ map fst failed
+ failed <- liftAnnex $ clearFailedTransfers (Remote.uuid r)
mapM_ retry failed
where
retry (t, info)
@@ -98,7 +97,7 @@ failedTransferScan r = do
- key, so it's not redundantly checked here. -}
requeue t info
requeue t info = queueTransferWhenSmall "retrying failed transfer" (associatedFile info) t r
-
+
{- This is a expensive scan through the full git work tree, finding
- files to transfer. The scan is blocked when the transfer queue gets
- too large.
@@ -118,8 +117,12 @@ expensiveScan :: UrlRenderer -> [Remote] -> Assistant ()
expensiveScan urlrenderer rs = unless onlyweb $ batch <~> do
debug ["starting scan of", show visiblers]
+ let us = map Remote.uuid rs
+
+ mapM_ (liftAnnex . clearFailedTransfers) us
+
unwantedrs <- liftAnnex $ S.fromList
- <$> filterM inUnwantedGroup (map Remote.uuid rs)
+ <$> filterM inUnwantedGroup us
g <- liftAnnex gitRepo
(files, cleanup) <- liftIO $ LsFiles.inRepo [] g
diff --git a/Logs/Transfer.hs b/Logs/Transfer.hs
index 13f94ea20..9bde51f40 100644
--- a/Logs/Transfer.hs
+++ b/Logs/Transfer.hs
@@ -262,6 +262,12 @@ getFailedTransfers u = catMaybes <$> (liftIO . getpairs =<< concat <$> findfiles
findfiles = liftIO . mapM dirContentsRecursive
=<< mapM (fromRepo . failedTransferDir u) [Download, Upload]
+clearFailedTransfers :: UUID -> Annex [(Transfer, TransferInfo)]
+clearFailedTransfers u = do
+ failed <- getFailedTransfers u
+ mapM_ removeFailedTransfer $ map fst failed
+ return failed
+
removeFailedTransfer :: Transfer -> Annex ()
removeFailedTransfer t = do
f <- fromRepo $ failedTransferFile t
diff --git a/debian/changelog b/debian/changelog
index 3b79475a2..4b51e2c88 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -9,6 +9,9 @@ git-annex (4.20130921) UNRELEASED; urgency=low
example.
* Android build redone from scratch, many dependencies updated,
and entire build can now be done using provided scripts.
+ * assistant: Clear the list of failed transfers when doing a full transfer
+ scan. This prevents repeated retries to download files that are not
+ available, or are not referenced by the current git tree.
-- Joey Hess <joeyh@debian.org> Sun, 22 Sep 2013 19:42:29 -0400