diff options
author | Joey Hess <joey@kitenet.net> | 2013-09-25 11:46:17 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2013-09-25 11:46:17 -0400 |
commit | 2590e1099ff283cc1c388f2dbdcbdd0ac6905a64 (patch) | |
tree | 85c5a0222b5d5a51dda5aed1cef2c85dd0b7e05e | |
parent | d9c5d32c34885cac67c44c633c5351461902d166 (diff) |
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.
This is motivated by a user report that the assistant was repeatedly
retrying transfers of files that had been deleted (in direct mode, so
removing the only copy).
Note that the glacier code retries failed transfers after a while to retry
downloads that have aged long enough to be available. This is ok; if we're
doing a full transfer scan we'll retry on every file that is still in the
git tree.
Also note that this makes the assistant less likely to get every file
referenced by old revs of the git tree. Not something the assistant tries
to ensure anyway, so I feel this is acceptable.
-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 |