Skip to content

Commit a8edc68

Browse files
authored
Merge pull request #473 from microsoftgraph/bugfix/retry-connection-errors
enables retry on connection drop
2 parents cd97702 + de17b61 commit a8edc68

File tree

3 files changed

+41
-11
lines changed

3 files changed

+41
-11
lines changed

src/main/java/com/microsoft/graph/http/CoreHttpProvider.java

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import java.io.UnsupportedEncodingException;
3232
import java.net.URL;
3333
import java.util.ArrayList;
34+
import java.util.Arrays;
3435
import java.util.HashMap;
3536
import java.util.List;
3637
import java.util.Map;
@@ -58,6 +59,7 @@
5859
import okhttp3.Headers;
5960
import okhttp3.MediaType;
6061
import okhttp3.OkHttpClient;
62+
import okhttp3.Protocol;
6163
import okhttp3.Request;
6264
import okhttp3.RequestBody;
6365
import okhttp3.Response;
@@ -356,21 +358,24 @@ private <Result, Body, DeserializeType> Result sendRequestInternal(final IHttpRe
356358
throws ClientException {
357359

358360
try {
361+
if(this.connectionConfig == null) {
362+
this.connectionConfig = new DefaultConnectionConfig();
363+
}
359364
if(this.corehttpClient == null) {
360-
OkHttpClient.Builder okBuilder = HttpClients.createDefault(new ICoreAuthenticationProvider() {
365+
final ICoreAuthenticationProvider authProvider = new ICoreAuthenticationProvider() {
361366
@Override
362367
public Request authenticateRequest(Request request) {
363368
return request;
364369
}
365-
}).newBuilder();
366-
if(this.connectionConfig == null) {
367-
this.connectionConfig = new DefaultConnectionConfig();
368-
}
369-
okBuilder.connectTimeout(connectionConfig.getConnectTimeout(), TimeUnit.MILLISECONDS);
370-
okBuilder.readTimeout(connectionConfig.getReadTimeout(), TimeUnit.MILLISECONDS);
371-
okBuilder.followRedirects(false);
372-
okBuilder.retryOnConnectionFailure(false);
373-
this.corehttpClient = okBuilder.build();
370+
};
371+
this.corehttpClient = HttpClients
372+
.createDefault(authProvider)
373+
.newBuilder()
374+
.connectTimeout(connectionConfig.getConnectTimeout(), TimeUnit.MILLISECONDS)
375+
.readTimeout(connectionConfig.getReadTimeout(), TimeUnit.MILLISECONDS)
376+
.followRedirects(false)
377+
.protocols(Arrays.asList(Protocol.HTTP_1_1)) //https://stackoverflow.com/questions/62031298/sockettimeout-on-java-11-but-not-on-java-8
378+
.build();
374379
}
375380
if (authenticationProvider != null) {
376381
authenticationProvider.authenticateRequest(request);

src/test/java/com/microsoft/graph/functional/BatchTests.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ public void GetsABatchFromRequests() throws IOException{
6868
assertEquals(200, batchResponse.code());
6969

7070
final MSBatchResponseContent responseContent = new MSBatchResponseContent(batchResponse);
71+
batchResponse.close();
7172

7273
assertEquals(400, responseContent.getResponseById(userPostId).code()); //400:we're not providing enough properties for the call to go through
7374
assertEquals(200, responseContent.getResponseById(meGetId).code());

src/test/java/com/microsoft/graph/functional/UserTests.java

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.microsoft.graph.functional;
22

3+
import static org.junit.Assert.assertNotEquals;
34
import static org.junit.Assert.assertEquals;
45
import static org.junit.Assert.assertNotNull;
56

@@ -8,6 +9,9 @@
89
import java.io.InputStream;
910
import java.util.ArrayList;
1011
import java.util.List;
12+
import java.util.concurrent.ExecutorService;
13+
import java.util.concurrent.Executors;
14+
import java.util.concurrent.TimeUnit;
1115

1216
import org.junit.Before;
1317
import org.junit.Ignore;
@@ -31,7 +35,6 @@
3135
import com.microsoft.graph.requests.extensions.IOrganizationCollectionPage;
3236
import com.microsoft.graph.requests.extensions.IUsedInsightCollectionPage;
3337
import com.microsoft.graph.requests.extensions.IUserCollectionPage;
34-
3538
@Ignore
3639
public class UserTests {
3740
IGraphServiceClient graphServiceClient = null;
@@ -170,6 +173,27 @@ public void meMemberof() {
170173
IDirectoryObjectCollectionWithReferencesPage page = graphServiceClient.me().memberOf().buildRequest().get();
171174
assertNotNull(page);
172175
}
176+
@Test
177+
public void getMeAndRetryOnThrottling() throws Exception {
178+
ExecutorService exec = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors() * 2);
179+
try {
180+
for(Integer i = 0; i < 2000; i++) {
181+
exec.submit(new Runnable() {
182+
@Override
183+
public void run() {
184+
final IUserCollectionPage users = graphServiceClient.users().buildRequest().get();
185+
assertNotNull(users);
186+
final List<User> currentPage = users.getCurrentPage();
187+
assertNotNull(currentPage);
188+
assertNotEquals(0, currentPage.size());
189+
}
190+
});
191+
}
192+
exec.awaitTermination(5L, TimeUnit.MINUTES);
193+
} finally {
194+
exec.shutdown();
195+
}
196+
}
173197

174198
@Test
175199
public void emptyPostContentType() {

0 commit comments

Comments
 (0)