diff --git a/src/libstore/download.cc b/src/libstore/download.cc index 13c665a40..5305a4895 100644 --- a/src/libstore/download.cc +++ b/src/libstore/download.cc @@ -230,7 +230,7 @@ struct CurlDownloader : public Downloader } catch (DownloadError & e) { attempt++; if (e.error != Transient || attempt >= options.tries) throw; - auto ms = 25 * (1 << (attempt - 1)); + auto ms = options.baseRetryTimeMs * (1 << (attempt - 1)); printMsg(lvlError, format("warning: %s; retrying in %d ms") % e.what() % ms); std::this_thread::sleep_for(std::chrono::milliseconds(ms)); } diff --git a/src/libstore/download.hh b/src/libstore/download.hh index 08618ba1c..f22e68864 100644 --- a/src/libstore/download.hh +++ b/src/libstore/download.hh @@ -14,6 +14,7 @@ struct DownloadOptions enum { yes, no, automatic } showProgress = yes; bool head = false; size_t tries = 1; + unsigned int baseRetryTimeMs = 100; }; struct DownloadResult diff --git a/src/libstore/http-binary-cache-store.cc b/src/libstore/http-binary-cache-store.cc index 42e9099b8..bdcd2fd39 100644 --- a/src/libstore/http-binary-cache-store.cc +++ b/src/libstore/http-binary-cache-store.cc @@ -80,7 +80,8 @@ protected: auto downloader(downloaders.get()); DownloadOptions options; options.showProgress = DownloadOptions::no; - options.tries = 3; + options.tries = 5; + options.baseRetryTimeMs = 1000; try { return downloader->download(cacheUri + "/" + path, options).data; } catch (DownloadError & e) {