Skip to content

Commit de336ea

Browse files
author
Nakul Sabharwal
committed
edited retry after calculation, check for requestid is not empty
1 parent 51fa9b7 commit de336ea

File tree

3 files changed

+47
-5
lines changed

3 files changed

+47
-5
lines changed

src/main/java/com/microsoft/graph/content/MSBatchRequestStep.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ public class MSBatchRequestStep {
1212
public MSBatchRequestStep(String requestId, Request request, List<String> arrayOfDependsOnIds) {
1313
if(requestId == null)
1414
throw new IllegalArgumentException("Request Id cannot be null.");
15+
if(requestId.length() == 0)
16+
throw new IllegalArgumentException("Request Id cannot be empty.");
1517
if(request == null)
1618
new IllegalArgumentException("Request cannot be null.");
1719

src/main/java/com/microsoft/graph/httpcore/RetryHandler.java

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -81,17 +81,24 @@ && checkStatus(statusCode) && isBuffered(response, request)
8181
return shouldRetry;
8282
}
8383

84+
/**
85+
* Get retry after in milliseconds
86+
* @param response Response
87+
* @param delay Delay in seconds
88+
* @param executionCount Execution count of retries
89+
* @return Retry interval in milliseconds
90+
*/
8491
long getRetryAfter(Response response, long delay, int executionCount) {
8592
String retryAfterHeader = response.header(RETRY_AFTER);
86-
long retryDelay = RetryOptions.DEFAULT_DELAY;
93+
double retryDelay = RetryOptions.DEFAULT_DELAY * DELAY_MILLISECONDS;
8794
if(retryAfterHeader != null) {
88-
retryDelay = Long.parseLong(retryAfterHeader);
95+
retryDelay = Long.parseLong(retryAfterHeader) * DELAY_MILLISECONDS;
8996
} else {
90-
retryDelay = (long)((Math.pow(2.0, (double)executionCount)-1)*0.5);
91-
retryDelay = executionCount < 2 ? retryDelay : retryDelay + delay + (long)Math.random();
97+
retryDelay = (double)((Math.pow(2.0, (double)executionCount)-1)*0.5);
98+
retryDelay = (executionCount < 2 ? delay : retryDelay + delay) + (double)Math.random();
9299
retryDelay *= DELAY_MILLISECONDS;
93100
}
94-
return Math.min(retryDelay, RetryOptions.MAX_DELAY);
101+
return (long)Math.min(retryDelay, RetryOptions.MAX_DELAY * DELAY_MILLISECONDS);
95102
}
96103

97104
boolean checkStatus(int statusCode) {

src/test/java/com/microsoft/graph/httpcore/RetryHandlerTest.java

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,4 +122,37 @@ public void testRetryRequestWithExponentialBackOff() {
122122

123123
assertTrue(retryhandler.retryRequest(response, 1, httppost, new RetryOptions()));
124124
}
125+
126+
@Test
127+
public void testGetRetryAfterWithHeader() {
128+
RetryHandler retryHandler = new RetryHandler();
129+
long delay = retryHandler.getRetryAfter(TestResponse().newBuilder().addHeader("Retry-After", "60").build(), 1, 1);
130+
assertTrue(delay == 60000);
131+
delay = retryHandler.getRetryAfter(TestResponse().newBuilder().addHeader("Retry-After", "1").build(), 2, 3);
132+
assertTrue(delay == 1000);
133+
}
134+
135+
@Test
136+
public void testGetRetryAfterOnFirstExecution() {
137+
RetryHandler retryHandler = new RetryHandler();
138+
long delay = retryHandler.getRetryAfter(TestResponse(), 3, 1);
139+
assertTrue(delay > 3000);
140+
delay = retryHandler.getRetryAfter(TestResponse(), 3, 2);
141+
assertTrue(delay > 3100);
142+
}
143+
144+
@Test
145+
public void testGetRetryAfterMaxExceed() {
146+
RetryHandler retryHandler = new RetryHandler();
147+
long delay = retryHandler.getRetryAfter(TestResponse(), 190, 1);
148+
assertTrue(delay == 180000);
149+
}
150+
151+
Response TestResponse() {
152+
return new Response.Builder()
153+
.code(429)
154+
.message("message")
155+
.request(new Request.Builder().url("https://localhost").build())
156+
.protocol(Protocol.HTTP_1_0).build();
157+
}
125158
}

0 commit comments

Comments
 (0)