You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by ga...@apache.org on 2015/02/26 03:31:24 UTC
jclouds git commit: JCLOUDS-795: Retry with backoff upon receiving a
500 response from S3 with error code 'InternalError'
Repository: jclouds
Updated Branches:
refs/heads/master 85637ccee -> bf00298f7
JCLOUDS-795: Retry with backoff upon receiving a 500 response from S3 with error code 'InternalError'
Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/bf00298f
Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/bf00298f
Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/bf00298f
Branch: refs/heads/master
Commit: bf00298f747a3599eeef6a4fe274682666ded4df
Parents: 85637cc
Author: Matt Hurne <mh...@commercehub.com>
Authored: Wed Feb 25 20:29:23 2015 -0500
Committer: Andrew Gaul <ga...@apache.org>
Committed: Wed Feb 25 18:30:30 2015 -0800
----------------------------------------------------------------------
.../jclouds/aws/config/AWSHttpApiModule.java | 2 +-
.../handlers/AWSServerErrorRetryHandler.java | 1 +
.../AWSServerErrorRetryHandlerTest.java | 21 +++++++++++---------
3 files changed, 14 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jclouds/blob/bf00298f/apis/sts/src/main/java/org/jclouds/aws/config/AWSHttpApiModule.java
----------------------------------------------------------------------
diff --git a/apis/sts/src/main/java/org/jclouds/aws/config/AWSHttpApiModule.java b/apis/sts/src/main/java/org/jclouds/aws/config/AWSHttpApiModule.java
index fb59dcf..4992ab6 100644
--- a/apis/sts/src/main/java/org/jclouds/aws/config/AWSHttpApiModule.java
+++ b/apis/sts/src/main/java/org/jclouds/aws/config/AWSHttpApiModule.java
@@ -57,7 +57,7 @@ public abstract class AWSHttpApiModule<A> extends HttpApiModule<A> {
@ServerError
@Singleton
protected Set<String> provideRetryableServerCodes() {
- return ImmutableSet.of("RequestLimitExceeded");
+ return ImmutableSet.of("RequestLimitExceeded", "InternalError");
}
@Override
http://git-wip-us.apache.org/repos/asf/jclouds/blob/bf00298f/apis/sts/src/main/java/org/jclouds/aws/handlers/AWSServerErrorRetryHandler.java
----------------------------------------------------------------------
diff --git a/apis/sts/src/main/java/org/jclouds/aws/handlers/AWSServerErrorRetryHandler.java b/apis/sts/src/main/java/org/jclouds/aws/handlers/AWSServerErrorRetryHandler.java
index ffbed50..dd01fd4 100644
--- a/apis/sts/src/main/java/org/jclouds/aws/handlers/AWSServerErrorRetryHandler.java
+++ b/apis/sts/src/main/java/org/jclouds/aws/handlers/AWSServerErrorRetryHandler.java
@@ -49,6 +49,7 @@ public class AWSServerErrorRetryHandler extends BackoffLimitedRetryHandler {
@Override
public boolean shouldRetryRequest(HttpCommand command, HttpResponse response) {
switch (response.getStatusCode()) {
+ case 500: // Internal Server Error
case 503: // Service Unavailable
// Content can be null in the case of HEAD requests
if (response.getPayload() != null) {
http://git-wip-us.apache.org/repos/asf/jclouds/blob/bf00298f/apis/sts/src/test/java/org/jclouds/aws/handlers/AWSServerErrorRetryHandlerTest.java
----------------------------------------------------------------------
diff --git a/apis/sts/src/test/java/org/jclouds/aws/handlers/AWSServerErrorRetryHandlerTest.java b/apis/sts/src/test/java/org/jclouds/aws/handlers/AWSServerErrorRetryHandlerTest.java
index 77e54ac..ea5cb51 100644
--- a/apis/sts/src/test/java/org/jclouds/aws/handlers/AWSServerErrorRetryHandlerTest.java
+++ b/apis/sts/src/test/java/org/jclouds/aws/handlers/AWSServerErrorRetryHandlerTest.java
@@ -46,7 +46,7 @@ import com.google.common.collect.ImmutableSet;
@Test(groups = "unit", testName = "AWSServerErrorRetryHandlerTest")
public class AWSServerErrorRetryHandlerTest {
@Test
- public void test500DoesNotRetry() {
+ public void testUnknown500DoesNotRetry() {
AWSUtils utils = createMock(AWSUtils.class);
HttpCommand command = createMock(HttpCommand.class);
@@ -64,11 +64,14 @@ public class AWSServerErrorRetryHandlerTest {
@DataProvider(name = "codes")
public Object[][] createData() {
- return new Object[][] { { "RequestLimitExceeded" } };
+ return new Object[][] {
+ { SERVICE_UNAVAILABLE.getStatusCode(), "RequestLimitExceeded" },
+ { INTERNAL_SERVER_ERROR.getStatusCode(), "InternalError" }
+ };
}
@Test(dataProvider = "codes")
- public void test503DoesBackoffAndRetryForCode(String code) {
+ public void testDoesBackoffAndRetryForHttpStatusCodeAndErrorCode(int httpStatusCode, String errorCode) {
AWSUtils utils = createMock(AWSUtils.class);
HttpCommand command = createMock(HttpCommand.class);
@@ -76,8 +79,8 @@ public class AWSServerErrorRetryHandlerTest {
HttpRequest putBucket = HttpRequest.builder().method(PUT)
.endpoint("https://adriancole-blobstore113.s3.amazonaws.com/").build();
- HttpResponse limitExceeded = HttpResponse.builder().statusCode(SERVICE_UNAVAILABLE.getStatusCode())
- .payload(Payloads.newStringPayload(String.format("<Error><Code>%s</Code></Error>", code))).build();
+ HttpResponse response = HttpResponse.builder().statusCode(httpStatusCode)
+ .payload(Payloads.newStringPayload(String.format("<Error><Code>%s</Code></Error>", errorCode))).build();
expect(command.getCurrentRequest()).andReturn(putBucket);
final AtomicInteger counter = new AtomicInteger();
@@ -96,16 +99,16 @@ public class AWSServerErrorRetryHandlerTest {
}).anyTimes();
AWSError error = new AWSError();
- error.setCode(code);
+ error.setCode(errorCode);
- expect(utils.parseAWSErrorFromContent(putBucket, limitExceeded)).andReturn(error);
+ expect(utils.parseAWSErrorFromContent(putBucket, response)).andReturn(error);
replay(utils, command);
AWSServerErrorRetryHandler retry = new AWSServerErrorRetryHandler(utils,
- ImmutableSet.<String> of("RequestLimitExceeded"));
+ ImmutableSet.of("RequestLimitExceeded", "InternalError"));
- assert retry.shouldRetryRequest(command, limitExceeded);
+ assert retry.shouldRetryRequest(command, response);
verify(utils, command);