diff options
-rw-r--r-- | Assistant/Threads/TransferScanner.hs | 11 | ||||
-rw-r--r-- | Logs/Transfer.hs | 6 | ||||
-rw-r--r-- | debian/changelog | 3 |
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 |