diff options
Diffstat (limited to 'apt-pkg/acquire-worker.cc')
-rw-r--r-- | apt-pkg/acquire-worker.cc | 15 |
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) |