Skip to content

Commit 603cec8

Browse files
author
ehennum
committed
prefer ipv4 to ipv6 for consistent client identification #1202
1 parent b647f4d commit 603cec8

File tree

1 file changed

+22
-14
lines changed

1 file changed

+22
-14
lines changed

marklogic-client-api/src/main/java/com/marklogic/client/impl/OkHttpServices.java

Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2012-2019 MarkLogic Corporation
2+
* Copyright 2012-2020 MarkLogic Corporation
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -86,19 +86,8 @@
8686
import com.fasterxml.jackson.databind.node.ArrayNode;
8787
import com.fasterxml.jackson.databind.node.ObjectNode;
8888

89-
import okhttp3.ConnectionPool;
90-
import okhttp3.CookieJar;
91-
import okhttp3.Headers;
92-
import okhttp3.HttpUrl;
93-
import okhttp3.Interceptor;
94-
import okhttp3.MediaType;
95-
import okhttp3.MultipartBody;
89+
import okhttp3.*;
9690
import okhttp3.MultipartBody.Part;
97-
import okhttp3.OkHttpClient;
98-
import okhttp3.Request;
99-
import okhttp3.RequestBody;
100-
import okhttp3.Response;
101-
import okhttp3.ResponseBody;
10291
import okhttp3.logging.HttpLoggingInterceptor;
10392
import okio.BufferedSink;
10493
import okio.Okio;
@@ -129,7 +118,10 @@
129118
import java.io.UnsupportedEncodingException;
130119
import java.io.Writer;
131120
import java.math.BigDecimal;
121+
import java.net.Inet4Address;
122+
import java.net.InetAddress;
132123
import java.net.URLEncoder;
124+
import java.net.UnknownHostException;
133125
import java.nio.charset.Charset;
134126
import java.nio.charset.CharsetEncoder;
135127
import java.nio.charset.StandardCharsets;
@@ -260,7 +252,9 @@ public void connect(String host, int port, String database, SecurityContext secu
260252
.cookieJar(CookieJar.NO_COOKIES)
261253
// no timeouts since some of our clients' reads and writes can be massive
262254
.readTimeout(0, TimeUnit.SECONDS)
263-
.writeTimeout(0, TimeUnit.SECONDS);
255+
.writeTimeout(0, TimeUnit.SECONDS)
256+
// prefer ipv4 to ipv6
257+
.dns(new DnsImpl());
264258

265259
if (securityContext instanceof BasicAuthContext) {
266260
BasicAuthContext basicContext = (BasicAuthContext) securityContext;
@@ -6481,4 +6475,18 @@ private void setErrorMessage(String errorMessage) {
64816475
private interface ResultIteratorConstructor<T> {
64826476
T construct(RequestLogger logger, List list, Closeable closeable);
64836477
}
6478+
6479+
static class DnsImpl implements Dns {
6480+
@Override
6481+
public List<InetAddress> lookup(String hostname) throws UnknownHostException {
6482+
List<InetAddress> rawAddresses = Dns.SYSTEM.lookup(hostname);
6483+
List<InetAddress> ipv4Addresses = new ArrayList<>();
6484+
for (InetAddress address: rawAddresses) {
6485+
if (address instanceof Inet4Address) {
6486+
ipv4Addresses.add(address);
6487+
}
6488+
}
6489+
return ipv4Addresses.isEmpty() ? rawAddresses : ipv4Addresses;
6490+
}
6491+
}
64846492
}

0 commit comments

Comments
 (0)