Skip to content

Commit 3f95a85

Browse files
committed
reverted managed Vert.x instances to single thread event loop
1 parent f7f371d commit 3f95a85

File tree

6 files changed

+31
-34
lines changed

6 files changed

+31
-34
lines changed

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -394,8 +394,7 @@ public ArangoDB build() {
394394
return new ArangoDBImpl(
395395
config,
396396
protocol,
397-
hostHandler,
398-
connectionFactory
397+
hostHandler
399398
);
400399
}
401400

core/src/main/java/com/arangodb/internal/ArangoDBImpl.java

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
import com.arangodb.entity.*;
2525
import com.arangodb.internal.config.ArangoConfig;
2626
import com.arangodb.internal.net.CommunicationProtocol;
27-
import com.arangodb.internal.net.ConnectionFactory;
2827
import com.arangodb.internal.net.HostHandler;
2928
import com.arangodb.internal.serde.SerdeUtils;
3029
import com.arangodb.model.*;
@@ -42,15 +41,12 @@ public class ArangoDBImpl extends InternalArangoDB implements ArangoDB {
4241

4342
private static final Logger LOGGER = LoggerFactory.getLogger(ArangoDBImpl.class);
4443
private final HostHandler hostHandler;
45-
private final ConnectionFactory connectionFactory;
4644

4745
public ArangoDBImpl(final ArangoConfig config,
4846
final CommunicationProtocol protocol,
49-
final HostHandler hostHandler,
50-
final ConnectionFactory connectionFactory) {
47+
final HostHandler hostHandler) {
5148
super(protocol, config);
5249
this.hostHandler = hostHandler;
53-
this.connectionFactory = connectionFactory;
5450
LOGGER.debug("ArangoDB Client is ready to use");
5551
}
5652

@@ -62,7 +58,6 @@ public ArangoDBAsync async() {
6258
@Override
6359
public void shutdown() {
6460
executorSync().disconnect();
65-
connectionFactory.close();
6661
}
6762

6863
@Override

core/src/main/java/com/arangodb/internal/net/ConnectionFactory.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,4 @@
3030
@UsedInApi
3131
public interface ConnectionFactory {
3232
Connection create(ArangoConfig config, HostDescription host);
33-
34-
default void close() {
35-
// keep backward compatibility
36-
}
3733
}

http/src/main/java/com/arangodb/http/HttpConnection.java

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import io.netty.handler.ssl.JdkSslContext;
3838
import io.vertx.core.MultiMap;
3939
import io.vertx.core.Vertx;
40+
import io.vertx.core.VertxOptions;
4041
import io.vertx.core.buffer.Buffer;
4142
import io.vertx.core.http.HttpHeaders;
4243
import io.vertx.core.http.HttpMethod;
@@ -49,6 +50,8 @@
4950
import io.vertx.ext.web.client.HttpResponse;
5051
import io.vertx.ext.web.client.WebClient;
5152
import io.vertx.ext.web.client.WebClientOptions;
53+
import org.slf4j.Logger;
54+
import org.slf4j.LoggerFactory;
5255

5356
import javax.net.ssl.SSLContext;
5457
import java.security.NoSuchAlgorithmException;
@@ -58,6 +61,7 @@
5861
import java.util.Optional;
5962
import java.util.concurrent.CompletableFuture;
6063
import java.util.concurrent.TimeUnit;
64+
import java.util.concurrent.atomic.AtomicInteger;
6165

6266

6367
/**
@@ -66,21 +70,24 @@
6670
*/
6771
@UnstableApi
6872
public class HttpConnection implements Connection {
73+
private static final Logger LOGGER = LoggerFactory.getLogger(HttpConnection.class);
6974
private static final String CONTENT_TYPE_APPLICATION_JSON_UTF8 = "application/json; charset=utf-8";
7075
private static final String CONTENT_TYPE_VPACK = "application/x-velocypack";
7176
private static final String USER_AGENT = getUserAgent();
77+
private static final AtomicInteger THREAD_COUNT = new AtomicInteger();
7278
private volatile String auth;
7379
private final int compressionThreshold;
7480
private final Encoder encoder;
7581
private final WebClient client;
7682
private final Integer timeout;
7783
private final MultiMap commonHeaders = MultiMap.caseInsensitiveMultiMap();
84+
private final Vertx vertxToClose;
7885

7986
private static String getUserAgent() {
8087
return "JavaDriver/" + PackageVersion.VERSION + " (JVM/" + System.getProperty("java.specification.version") + ")";
8188
}
8289

83-
HttpConnection(final ArangoConfig config, final HostDescription host, final Vertx vertx) {
90+
HttpConnection(final ArangoConfig config, final HostDescription host, final Vertx existingVertx) {
8491
super();
8592
Protocol protocol = config.getProtocol();
8693
ContentType contentType = ContentTypeFactory.of(protocol);
@@ -105,6 +112,22 @@ private static String getUserAgent() {
105112
config.getUser(), Optional.ofNullable(config.getPassword()).orElse("")
106113
).toHttpAuthorization();
107114

115+
Vertx vertxToUse;
116+
if (existingVertx != null) {
117+
// reuse existing Vert.x
118+
vertxToUse = existingVertx;
119+
// Vert.x will not be closed when connection is closed
120+
vertxToClose = null;
121+
LOGGER.info("Reusing existing Vert.x instance");
122+
} else {
123+
// create a new Vert.x instance
124+
LOGGER.info("Creating new Vert.x instance");
125+
vertxToUse = Vertx.vertx(new VertxOptions().setPreferNativeTransport(true).setEventLoopPoolSize(1));
126+
vertxToUse.runOnContext(e -> Thread.currentThread().setName("adb-http-" + THREAD_COUNT.getAndIncrement()));
127+
// Vert.x be closed when connection is closed
128+
vertxToClose = vertxToUse;
129+
}
130+
108131
int intTtl = Optional.ofNullable(config.getConnectionTtl())
109132
.map(ttl -> Math.toIntExact(ttl / 1000))
110133
.orElse(0);
@@ -181,7 +204,7 @@ public SslContextFactory sslContextFactory() {
181204
});
182205
}
183206

184-
client = WebClient.create(vertx, webClientOptions);
207+
client = WebClient.create(vertxToUse, webClientOptions);
185208
}
186209

187210
private static String buildUrl(final InternalRequest request) {
@@ -217,6 +240,9 @@ private static void addHeader(final InternalRequest request, final HttpRequest<?
217240
@Override
218241
public void close() {
219242
client.close();
243+
if (vertxToClose != null) {
244+
vertxToClose.close();
245+
}
220246
}
221247

222248
private HttpMethod requestTypeToHttpMethod(RequestType requestType) {

http/src/main/java/com/arangodb/http/HttpConnectionFactory.java

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
import com.arangodb.internal.net.ConnectionFactory;
2828
import io.vertx.core.Context;
2929
import io.vertx.core.Vertx;
30-
import io.vertx.core.VertxOptions;
3130
import org.slf4j.Logger;
3231
import org.slf4j.LoggerFactory;
3332

@@ -38,21 +37,16 @@ public class HttpConnectionFactory implements ConnectionFactory {
3837
private final Logger LOGGER = LoggerFactory.getLogger(HttpConnectionFactory.class);
3938

4039
private final Vertx vertx;
41-
private final boolean manageVertx;
4240

4341
public HttpConnectionFactory(@UnstableApi final ArangoConfig config) {
4442
Optional<Vertx> existingVertx = Optional.ofNullable(Vertx.currentContext()).map(Context::owner);
4543
if (config.getReuseVertx() && existingVertx.isPresent()) {
46-
LOGGER.info("Reusing existing Vert.x instance");
4744
vertx = existingVertx.get();
48-
manageVertx = false;
4945
} else {
5046
if (existingVertx.isPresent()) {
5147
LOGGER.warn("Found an existing Vert.x instance, set reuseVertx=true to reuse it");
5248
}
53-
LOGGER.info("Creating new Vert.x instance");
54-
vertx = Vertx.vertx(new VertxOptions().setPreferNativeTransport(true));
55-
manageVertx = true;
49+
vertx = null;
5650
}
5751
}
5852

@@ -61,12 +55,4 @@ public HttpConnectionFactory(@UnstableApi final ArangoConfig config) {
6155
public Connection create(@UnstableApi final ArangoConfig config, final HostDescription host) {
6256
return new HttpConnection(config, host, vertx);
6357
}
64-
65-
@Override
66-
public synchronized void close() {
67-
if (manageVertx) {
68-
LOGGER.info("Closing Vert.x instance");
69-
vertx.close();
70-
}
71-
}
7258
}

vst/src/main/java/com/arangodb/vst/VstConnectionFactoryAsync.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,4 @@ public Connection create(@UnstableApi final ArangoConfig config, final HostDescr
3939
return new VstConnectionAsync(config, host);
4040
}
4141

42-
@Override
43-
public void close() {
44-
// no-op
45-
}
46-
4742
}

0 commit comments

Comments
 (0)