diff options
author | Julian Andres Klode <julian.klode@canonical.com> | 2021-07-28 12:43:56 +0200 |
---|---|---|
committer | Julian Andres Klode <julian.klode@canonical.com> | 2021-07-28 13:08:35 +0200 |
commit | 4001af8920389e2bb2672b673b181c4e92515872 (patch) | |
tree | 67c71f916fa5f248761ae2799a941fe67e5ce5c4 | |
parent | 51ee79e385d8ccb2f32195cc01f3f9c943197603 (diff) |
Add support for a maximum delay and testing of delay
This is very basic support on the testing side, we just test
the debug output but not how long it actually took. Would be
nice to check time really.
-rw-r--r-- | apt-pkg/acquire-worker.cc | 5 | ||||
-rw-r--r-- | doc/examples/configure-index | 5 | ||||
-rwxr-xr-x | test/integration/test-bug-869859-retry-downloads | 13 |
3 files changed, 20 insertions, 3 deletions
diff --git a/apt-pkg/acquire-worker.cc b/apt-pkg/acquire-worker.cc index 7be51d114..1bf07e82a 100644 --- a/apt-pkg/acquire-worker.cc +++ b/apt-pkg/acquire-worker.cc @@ -644,7 +644,10 @@ void pkgAcquire::Worker::HandleFailure(std::vector<pkgAcquire::Item *> const &It if (_config->FindB("Acquire::Retries::Delay", true)) { auto Iter = _config->FindI("Acquire::Retries", 3) - Owner->Retries - 1; - auto Dur = std::chrono::seconds(1 << Iter); + 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 diff --git a/doc/examples/configure-index b/doc/examples/configure-index index e74ebc3d7..4eca100f5 100644 --- a/doc/examples/configure-index +++ b/doc/examples/configure-index @@ -231,7 +231,9 @@ Acquire { Queue-Mode "<STRING>"; // host or access Retries "<INT>" { - Delay "<BOOL>"; // whether to backoff between retries using the delay: method + Delay "<BOOL>" { // whether to backoff between retries using the delay: method + Maximum "<INT>"; // maximum number of seconds to delay an item per retry + }; }; Source-Symlinks "<BOOL>"; ForceHash "<STRING>"; // hashmethod used for expected hash: sha256, sha1 or md5sum @@ -557,6 +559,7 @@ Debug Acquire::cdrom "<BOOL>"; // Show cdrom debug output Acquire::Transaction "<BOOL>"; Acquire::Progress "<BOOL>"; + Acquire::Retries "<BOOL>"; // Debugging for retries, especially delays aptcdrom "<BOOL>"; // Show found package files IdentCdrom "<BOOL>"; acquire::netrc "<BOOL>"; // netrc parser diff --git a/test/integration/test-bug-869859-retry-downloads b/test/integration/test-bug-869859-retry-downloads index 86203f794..66e158a9d 100755 --- a/test/integration/test-bug-869859-retry-downloads +++ b/test/integration/test-bug-869859-retry-downloads @@ -21,7 +21,18 @@ rm -f testpkg_1_all.deb msgmsg 'Fail after too many retries' webserverconfig 'aptwebserver::failrequest' '429' webserverconfig 'aptwebserver::failrequest::pool/testpkg_1_all.deb' '99' -testfailure apt download testpkg -o acquire::retries=3 +testfailureequal "Delaying http://localhost:${APTHTTPPORT} stable/main all testpkg all 1 by 1 seconds +Ign:1 http://localhost:${APTHTTPPORT} stable/main all testpkg all 1 + 429 Unknown HTTP code +Delaying http://localhost:${APTHTTPPORT} stable/main all testpkg all 1 by 2 seconds +Ign:1 http://localhost:${APTHTTPPORT} stable/main all testpkg all 1 + 429 Unknown HTTP code +Delaying http://localhost:${APTHTTPPORT} stable/main all testpkg all 1 by 4 seconds +Ign:1 http://localhost:${APTHTTPPORT} stable/main all testpkg all 1 + 429 Unknown HTTP code +Err:1 http://localhost:${APTHTTPPORT} stable/main all testpkg all 1 + 429 Unknown HTTP code +E: Failed to fetch http://localhost:${APTHTTPPORT}/pool/testpkg_1_all.deb 429 Unknown HTTP code" apt download testpkg -o acquire::retries=3 -o debug::acquire::retries=true -q testfailure test -f testpkg_1_all.deb msgmsg 'Success in the third try' |