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);