Repository: jclouds Updated Branches: refs/heads/1.7.x 6e39ba235 -> 283937fad
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/283937fa Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/283937fa Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/283937fa Branch: refs/heads/1.7.x Commit: 283937fad099e0ed528ed90485373e99813ccfcf Parents: 6e39ba2 Author: Andrew Gaul <[email protected]> Authored: Thu Mar 13 11:01:25 2014 -0700 Committer: Andrew Gaul <[email protected]> Committed: Fri Mar 14 12:16:24 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/283937fa/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/283937fa/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); + } }
