about summary refs log tree commit diff
diff options
context:
space:
mode:
authorDomen Kožar <domen@dev.si>2020-01-29T10·47+0100
committerEelco Dolstra <edolstra@gmail.com>2020-02-18T15·45+0100
commited25fdd66e35840e1c73f283bba0671747005572 (patch)
treea6a5aea9c30a1291896219b2221bdf61b8c89a84
parent475c2e5de7f2e97fd46c4b0f97c0a4e7145c259c (diff)
retry on HTTP status code 429
(cherry picked from commit 48ddb8e481c0ba0b59b7193df4aa914ce83a9032)
-rw-r--r--src/libstore/download.cc3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/libstore/download.cc b/src/libstore/download.cc
index cdf56e09d69a..b1a7a02822b6 100644
--- a/src/libstore/download.cc
+++ b/src/libstore/download.cc
@@ -357,9 +357,10 @@ struct CurlDownloader : public Downloader
                 } else if (httpStatus == 401 || httpStatus == 403 || httpStatus == 407) {
                     // Don't retry on authentication/authorization failures
                     err = Forbidden;
-                } else if (httpStatus >= 400 && httpStatus < 500 && httpStatus != 408) {
+                } else if (httpStatus >= 400 && httpStatus < 500 && httpStatus != 408 && httpStatus != 429) {
                     // Most 4xx errors are client errors and are probably not worth retrying:
                     //   * 408 means the server timed out waiting for us, so we try again
+                    //   * 429 means too many requests, so we retry (with a delay)
                     err = Misc;
                 } else if (httpStatus == 501 || httpStatus == 505 || httpStatus == 511) {
                     // Let's treat most 5xx (server) errors as transient, except for a handful: