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 2014/03/14 20:16:09 UTC

git commit: Retry on S3 HTTP 504 Gateway Timeout status codes

Repository: jclouds
Updated Branches:
  refs/heads/master 33f244dba -> a7fa3b9c6


Retry on S3 HTTP 504 Gateway Timeout status codes

RiakCS using the S3 interface occasionally surfaces these status
codes.


Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/a7fa3b9c
Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/a7fa3b9c
Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/a7fa3b9c

Branch: refs/heads/master
Commit: a7fa3b9c620fe80eae1741078905a1d5416b88ad
Parents: 33f244d
Author: Andrew Gaul <ga...@apache.org>
Authored: Thu Mar 13 11:01:25 2014 -0700
Committer: Andrew Gaul <ga...@apache.org>
Committed: Fri Mar 14 12:15:55 2014 -0700

----------------------------------------------------------------------
 .../aws/handlers/AWSServerErrorRetryHandler.java  |  6 +++++-
 .../handlers/AWSServerErrorRetryHandlerTest.java  | 18 ++++++++++++++++++
 2 files changed, 23 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/a7fa3b9c/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 22c316e..9918303 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
@@ -50,7 +50,8 @@ public class AWSServerErrorRetryHandler extends BackoffLimitedRetryHandler {
 
    @Override
    public boolean shouldRetryRequest(HttpCommand command, HttpResponse response) {
-      if (response.getStatusCode() == 503) {
+      switch (response.getStatusCode()) {
+      case 503:  // Service Unavailable
          // Content can be null in the case of HEAD requests
          if (response.getPayload() != null) {
             closeClientButKeepContentStream(response);
@@ -59,6 +60,9 @@ public class AWSServerErrorRetryHandler extends BackoffLimitedRetryHandler {
                return shouldRetryRequestOnError(command, response, error);
             }
          }
+         break;
+      case 504:  // Gateway Timeout
+         return super.shouldRetryRequest(command, response);
       }
       return false;
    }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/a7fa3b9c/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 218cde6..e164c6b 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
@@ -23,6 +23,7 @@ import static org.easymock.EasyMock.expect;
 import static org.easymock.EasyMock.replay;
 import static org.easymock.EasyMock.verify;
 import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.assertTrue;
 
 import java.util.concurrent.atomic.AtomicInteger;
 
@@ -112,4 +113,21 @@ public class AWSServerErrorRetryHandlerTest {
 
    }
 
+   @Test
+   public void test504DoesRetry() {
+      AWSUtils utils = createMock(AWSUtils.class);
+      HttpCommand command = createMock(HttpCommand.class);
+      expect(command.getFailureCount()).andReturn(1).anyTimes();
+      expect(command.incrementFailureCount()).andReturn(1);
+      expect(command.isReplayable()).andReturn(true);
+
+      replay(utils, command);
+
+      AWSServerErrorRetryHandler retry = new AWSServerErrorRetryHandler(utils,
+            ImmutableSet.<String> of());
+
+      assertTrue(retry.shouldRetryRequest(command, HttpResponse.builder().statusCode(504).build()));
+
+      verify(utils, command);
+   }
 }