Skip to content

Commit 52ef027

Browse files
author
mpv1989
committed
Add configurable connection pooling for http
1 parent a0f5e38 commit 52ef027

File tree

5 files changed

+18
-13
lines changed

5 files changed

+18
-13
lines changed

src/main/java/com/arangodb/ArangoDB.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -350,7 +350,8 @@ public synchronized ArangoDB build() {
350350
.user(user).password(password).useSsl(useSsl).sslContext(sslContext).chunksize(chunksize)
351351
.maxConnections(maxConnections),
352352
new HttpCommunication.Builder(new DefaultHostHandler(new ArrayList<Host>(hosts))).timeout(timeout)
353-
.user(user).password(password).useSsl(useSsl).sslContext(sslContext),
353+
.user(user).password(password).useSsl(useSsl).sslContext(sslContext)
354+
.maxConnections(maxConnections),
354355
new ArangoUtilImpl(serializerTemp, deserializerTemp), collectionCache, protocol);
355356
}
356357

src/main/java/com/arangodb/internal/ArangoDBConstants.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@ public class ArangoDBConstants {
3737
public static final int CHUNK_MIN_HEADER_SIZE = INTEGER_BYTES + INTEGER_BYTES + LONG_BYTES;
3838
public static final int CHUNK_MAX_HEADER_SIZE = CHUNK_MIN_HEADER_SIZE + LONG_BYTES;
3939
public static final int CHUNK_DEFAULT_CONTENT_SIZE = 30000;
40-
public static final int MAX_CONNECTIONS_DEFAULT = 1;
40+
public static final int MAX_CONNECTIONS_VST_DEFAULT = 1;
41+
public static final int MAX_CONNECTIONS_HTTP_DEFAULT = 20;
4142

4243
public static final String PATH_API_DOCUMENT = "/_api/document";
4344
public static final String PATH_API_COLLECTION = "/_api/collection";

src/main/java/com/arangodb/internal/InternalArangoDB.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ protected static Integer loadChunkSize(final Properties properties, final Intege
120120

121121
protected static Integer loadMaxConnections(final Properties properties, final Integer currentValue) {
122122
return Integer.parseInt(getProperty(properties, PROPERTY_KEY_MAX_CONNECTIONS, currentValue,
123-
ArangoDBConstants.MAX_CONNECTIONS_DEFAULT));
123+
ArangoDBConstants.MAX_CONNECTIONS_VST_DEFAULT));
124124
}
125125

126126
private static <T> String getProperty(

src/main/java/com/arangodb/internal/http/HttpCommunication.java

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@
7171

7272
import com.arangodb.ArangoDBException;
7373
import com.arangodb.entity.ErrorEntity;
74+
import com.arangodb.internal.ArangoDBConstants;
7475
import com.arangodb.internal.util.CURLLogger;
7576
import com.arangodb.internal.util.IOUtils;
7677
import com.arangodb.internal.velocystream.Host;
@@ -101,7 +102,7 @@ public static class Builder {
101102
private Boolean useSsl;
102103
private SSLContext sslContext;
103104
// private Integer chunksize;
104-
// private Integer maxConnections;
105+
private Integer maxConnections;
105106

106107
public Builder(final HostHandler hostHandler) {
107108
super();
@@ -138,13 +139,13 @@ public Builder sslContext(final SSLContext sslContext) {
138139
// return this;
139140
// }
140141
//
141-
// public Builder maxConnections(final Integer maxConnections) {
142-
// this.maxConnections = maxConnections;
143-
// return this;
144-
// }
142+
public Builder maxConnections(final Integer maxConnections) {
143+
this.maxConnections = maxConnections;
144+
return this;
145+
}
145146

146147
public HttpCommunication build(final ArangoSerialization util) {
147-
return new HttpCommunication(timeout, user, password, useSsl, sslContext, util, hostHandler,
148+
return new HttpCommunication(timeout, user, password, useSsl, sslContext, util, hostHandler, maxConnections,
148149
HttpContentType.JSON);
149150
}
150151
}
@@ -165,7 +166,7 @@ public HttpCommunication build(final ArangoSerialization util) {
165166

166167
private HttpCommunication(final Integer timeout, final String user, final String password, final Boolean useSsl,
167168
final SSLContext sslContext, final ArangoSerialization util, final HostHandler hostHandler,
168-
final HttpContentType contentType) {
169+
final Integer maxConnections, final HttpContentType contentType) {
169170
super();
170171
this.user = user;
171172
this.password = password;
@@ -185,8 +186,10 @@ private HttpCommunication(final Integer timeout, final String user, final String
185186
a.register("http", new PlainConnectionSocketFactory());
186187
}
187188
cm = new PoolingHttpClientConnectionManager(a.build());
188-
cm.setDefaultMaxPerRoute(20);// TODO configurable
189-
cm.setMaxTotal(20);// TODO configurable
189+
final int connections = maxConnections != null ? Math.max(1, maxConnections)
190+
: ArangoDBConstants.MAX_CONNECTIONS_HTTP_DEFAULT;
191+
cm.setDefaultMaxPerRoute(connections);
192+
cm.setMaxTotal(connections);
190193

191194
final RequestConfig.Builder custom = RequestConfig.custom();
192195
// if (configure.getConnectionTimeout() >= 0) {

src/main/java/com/arangodb/internal/velocystream/ConnectionPool.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public abstract class ConnectionPool<C extends Connection> {
3636
public ConnectionPool(final Integer maxConnections) {
3737
super();
3838
this.maxConnections = maxConnections != null ? Math.max(1, maxConnections)
39-
: ArangoDBConstants.MAX_CONNECTIONS_DEFAULT;
39+
: ArangoDBConstants.MAX_CONNECTIONS_VST_DEFAULT;
4040
connections = new LinkedList<C>();
4141
}
4242

0 commit comments

Comments
 (0)