HTTPCLIENT-2020: DefaultBackoffStrategy should include TOO_MANY_REQUESTS (429) too
diff --git a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/classic/DefaultBackoffStrategy.java b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/classic/DefaultBackoffStrategy.java
index b77ea20..86c7af3 100644
--- a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/classic/DefaultBackoffStrategy.java
+++ b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/classic/DefaultBackoffStrategy.java
@@ -37,7 +37,7 @@
/**
* This {@link ConnectionBackoffStrategy} backs off either for a raw
* network socket or connection timeout or if the server explicitly
- * sends a 503 (Service Unavailable) response.
+ * sends a 429 (Too Many Requests) or a 503 (Service Unavailable) response.
*
* @since 4.2
*/
@@ -51,7 +51,8 @@
@Override
public boolean shouldBackoff(final HttpResponse resp) {
- return resp.getCode() == HttpStatus.SC_SERVICE_UNAVAILABLE;
+ return resp.getCode() == HttpStatus.SC_TOO_MANY_REQUESTS ||
+ resp.getCode() == HttpStatus.SC_SERVICE_UNAVAILABLE;
}
}
diff --git a/httpclient5/src/test/java/org/apache/hc/client5/http/impl/classic/TestDefaultBackoffStrategy.java b/httpclient5/src/test/java/org/apache/hc/client5/http/impl/classic/TestDefaultBackoffStrategy.java
index f8614de..f46f67c 100644
--- a/httpclient5/src/test/java/org/apache/hc/client5/http/impl/classic/TestDefaultBackoffStrategy.java
+++ b/httpclient5/src/test/java/org/apache/hc/client5/http/impl/classic/TestDefaultBackoffStrategy.java
@@ -71,9 +71,15 @@
}
@Test
- public void doesNotBackOffForNon503StatusCodes() {
+ public void backsOffForTooManyRequests() {
+ final HttpResponse resp = new BasicHttpResponse(HttpStatus.SC_TOO_MANY_REQUESTS, "Too Many Requests");
+ assertTrue(impl.shouldBackoff(resp));
+ }
+
+ @Test
+ public void doesNotBackOffForNon429And503StatusCodes() {
for(int i = 100; i <= 599; i++) {
- if (i == HttpStatus.SC_SERVICE_UNAVAILABLE) {
+ if (i== HttpStatus.SC_TOO_MANY_REQUESTS || i == HttpStatus.SC_SERVICE_UNAVAILABLE) {
continue;
}
final HttpResponse resp = new BasicHttpResponse(i, "Foo");