summaryrefslogtreecommitdiff
path: root/apt-pkg/acquire-worker.cc
diff options
context:
space:
mode:
Diffstat (limited to 'apt-pkg/acquire-worker.cc')
-rw-r--r--apt-pkg/acquire-worker.cc15
1 files changed, 15 insertions, 0 deletions
diff --git a/apt-pkg/acquire-worker.cc b/apt-pkg/acquire-worker.cc
index 3fbc5c09f..1bf07e82a 100644
--- a/apt-pkg/acquire-worker.cc
+++ b/apt-pkg/acquire-worker.cc
@@ -632,6 +632,7 @@ void pkgAcquire::Worker::HandleFailure(std::vector<pkgAcquire::Item *> const &It
pkgAcquire::MethodConfig *const Config, pkgAcquireStatus *const Log,
std::string const &Message, bool const errTransient, bool const errAuthErr)
{
+ auto currentTime = clock::now();
for (auto const Owner : ItmOwners)
{
std::string NewURI;
@@ -640,6 +641,20 @@ void pkgAcquire::Worker::HandleFailure(std::vector<pkgAcquire::Item *> const &It
--Owner->Retries;
Owner->FailMessage(Message);
auto SavedDesc = Owner->GetItemDesc();
+ if (_config->FindB("Acquire::Retries::Delay", true))
+ {
+ auto Iter = _config->FindI("Acquire::Retries", 3) - Owner->Retries - 1;
+ auto const MaxDur = _config->FindI("Acquire::Retries::Delay::Maximum", 30);
+ auto Dur = std::chrono::seconds(std::min(1 << Iter, MaxDur));
+ if (_config->FindB("Debug::Acquire::Retries"))
+ std::clog << "Delaying " << SavedDesc.Description << " by " << Dur.count() << " seconds" << std::endl;
+ Owner->FetchAfter(currentTime + Dur);
+ }
+ else
+ {
+ Owner->FetchAfter(currentTime);
+ }
+
if (Log != nullptr)
Log->Fail(SavedDesc);
if (isDoomedItem(Owner) == false)