Skip to content

Commit 4478cba

Browse files
committed
Only retry 500 errors within 500-504 range
1 parent 547c65b commit 4478cba

File tree

3 files changed

+24
-6
lines changed

3 files changed

+24
-6
lines changed

src/SendGrid/Reliability/RetryDelegatingHandler.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage
7878

7979
private static void ThrowHttpRequestExceptionIfResponseIsWithinTheServerErrorRange(HttpResponseMessage responseMessage)
8080
{
81-
if ((int)responseMessage.StatusCode >= 500 && (int)responseMessage.StatusCode < 600)
81+
if ((int)responseMessage.StatusCode >= 500 && (int)responseMessage.StatusCode <= 504)
8282
{
8383
throw new HttpRequestException(string.Format("Response Http Status code {0} indicates server error", responseMessage.StatusCode));
8484
}

tests/SendGrid.Tests/Reliability/RetryDelegatingHandlerTests.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,17 @@ public async Task Invoke_ShouldReturnErrorWithoutRetryWhenErrorIsNotTransient()
5858
Assert.Equal(1, innerHandler.InvocationCount);
5959
}
6060

61+
[Fact]
62+
public async Task Invoke_ShouldReturnErrorWithoutRetryWhen500ErrorStatusIsNotTransient()
63+
{
64+
innerHandler.AddBehaviour(innerHandler.HttpVersionNotSupported);
65+
66+
var response = await client.SendAsync(new HttpRequestMessage());
67+
68+
Assert.Equal((HttpStatusCode)505, response.StatusCode);
69+
Assert.Equal(1, innerHandler.InvocationCount);
70+
}
71+
6172
[Fact]
6273
public async Task Invoke_ShoulddRetryOnceWhenFailedOnFirstAttemptThenSuccessful()
6374
{

tests/SendGrid.Tests/Reliability/RetryTestBehaviourDelegatingHandler.cs

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,19 +31,26 @@ Task<HttpResponseMessage> behaviour()
3131

3232
public Task<HttpResponseMessage> OK()
3333
{
34-
var httpResponseMessage = new HttpResponseMessage(HttpStatusCode.OK) { Content = new StringContent(string.Empty) };
35-
return Task.Factory.StartNew(() => httpResponseMessage);
34+
return CreateHttpResponse(HttpStatusCode.OK);
3635
}
3736

3837
public Task<HttpResponseMessage> InternalServerError()
3938
{
40-
var httpResponseMessage = new HttpResponseMessage(HttpStatusCode.InternalServerError) { Content = new StringContent(string.Empty) };
41-
return Task.Factory.StartNew(() => httpResponseMessage);
39+
return CreateHttpResponse(HttpStatusCode.InternalServerError);
4240
}
4341

4442
public Task<HttpResponseMessage> AuthenticationError()
4543
{
46-
var httpResponseMessage = new HttpResponseMessage(HttpStatusCode.Unauthorized) { Content = new StringContent(string.Empty) };
44+
return CreateHttpResponse(HttpStatusCode.Unauthorized);
45+
}
46+
public Task<HttpResponseMessage> HttpVersionNotSupported()
47+
{
48+
return CreateHttpResponse((HttpStatusCode)505);
49+
}
50+
51+
public Task<HttpResponseMessage> CreateHttpResponse(HttpStatusCode statusCode)
52+
{
53+
var httpResponseMessage = new HttpResponseMessage(statusCode) { Content = new StringContent(string.Empty) };
4754
return Task.Factory.StartNew(() => httpResponseMessage);
4855
}
4956

0 commit comments

Comments
 (0)