Skip to content

Commit a75702a

Browse files
committed
Fix race
1 parent e3ae921 commit a75702a

File tree

6 files changed

+19
-10
lines changed

6 files changed

+19
-10
lines changed

vertx-db2-client/src/main/java/io/vertx/db2client/spi/DB2Driver.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ private PoolImpl newPoolImpl(VertxInternal vertx, Supplier<Future<DB2ConnectOpti
6161
boolean pipelinedPool = options instanceof Db2PoolOptions && ((Db2PoolOptions) options).isPipelined();
6262
PoolImpl pool = new PoolImpl(vertx, this, pipelinedPool, options, null, null, closeFuture);
6363
ConnectionFactory<DB2ConnectOptions> factory = createConnectionFactory(vertx);
64-
pool.connectionProvider(context -> databases.get().compose(connectOptions -> factory.connect(context, connectOptions)));
64+
pool.connectionProvider(context -> factory.connect(context, databases.get()));
6565
pool.init();
6666
closeFuture.add(factory);
6767
return pool;

vertx-mssql-client/src/main/java/io/vertx/mssqlclient/spi/MSSQLDriver.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ public Pool newPool(Vertx vertx, Supplier<Future<MSSQLConnectOptions>> databases
6363
private PoolImpl newPoolImpl(VertxInternal vertx, Supplier<Future<MSSQLConnectOptions>> databases, PoolOptions options, CloseFuture closeFuture) {
6464
PoolImpl pool = new PoolImpl(vertx, this, false, options, null, null, closeFuture);
6565
ConnectionFactory<MSSQLConnectOptions> factory = createConnectionFactory(vertx);
66-
pool.connectionProvider(context -> databases.get().compose(connectOptions -> factory.connect(context, connectOptions)));
66+
pool.connectionProvider(context -> factory.connect(context, databases.get()));
6767
pool.init();
6868
closeFuture.add(factory);
6969
return pool;

vertx-mysql-client/src/main/java/io/vertx/mysqlclient/spi/MySQLDriver.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ private PoolImpl newPoolImpl(VertxInternal vertx, Supplier<Future<MySQLConnectOp
6161
boolean pipelinedPool = options instanceof MySQLPoolOptions && ((MySQLPoolOptions) options).isPipelined();
6262
PoolImpl pool = new PoolImpl(vertx, this, pipelinedPool, options, null, null, closeFuture);
6363
ConnectionFactory<MySQLConnectOptions> factory = createConnectionFactory(vertx);
64-
pool.connectionProvider(context -> databases.get().compose(connectOptions -> factory.connect(context, connectOptions)));
64+
pool.connectionProvider(context -> factory.connect(context, databases.get()));
6565
pool.init();
6666
closeFuture.add(factory);
6767
return pool;

vertx-oracle-client/src/main/java/io/vertx/oracleclient/spi/OracleDriver.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ private PoolImpl newPoolImpl(VertxInternal vertx, Supplier<Future<OracleConnectO
5858
Function<Connection, Future<Void>> beforeRecycle = conn -> ((OracleJdbcConnection) conn).beforeRecycle();
5959
PoolImpl pool = new PoolImpl(vertx, this, false, options, afterAcquire, beforeRecycle, closeFuture);
6060
ConnectionFactory<OracleConnectOptions> factory = createConnectionFactory(vertx);
61-
pool.connectionProvider(context -> databases.get().compose(connectOptions -> factory.connect(context, connectOptions)));
61+
pool.connectionProvider(context -> factory.connect(context, databases.get()));
6262
pool.init();
6363
closeFuture.add(factory);
6464
return pool;

vertx-pg-client/src/main/java/io/vertx/pgclient/spi/PgDriver.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ private PoolImpl newPoolImpl(VertxInternal vertx, Supplier<Future<PgConnectOptio
4141
boolean pipelinedPool = options instanceof PgPoolOptions && ((PgPoolOptions) options).isPipelined();
4242
PoolImpl pool = new PoolImpl(vertx, this, pipelinedPool, options, null, null, closeFuture);
4343
ConnectionFactory<PgConnectOptions> factory = createConnectionFactory(vertx);
44-
pool.connectionProvider(context -> databases.get().compose(connectOptions -> factory.connect(context, connectOptions)));
44+
pool.connectionProvider(context -> factory.connect(context, databases.get()));
4545
pool.init();
4646
closeFuture.add(factory);
4747
return pool;

vertx-sql-client/src/main/java/io/vertx/sqlclient/spi/ConnectionFactory.java

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
package io.vertx.sqlclient.spi;
22

3-
import io.vertx.core.Closeable;
4-
import io.vertx.core.CompositeFuture;
5-
import io.vertx.core.Context;
6-
import io.vertx.core.Future;
7-
import io.vertx.core.Promise;
3+
import io.vertx.core.*;
4+
import io.vertx.core.impl.ContextInternal;
85
import io.vertx.sqlclient.SqlConnectOptions;
6+
import io.vertx.core.Promise;
97
import io.vertx.sqlclient.SqlConnection;
108

119
import java.util.ArrayList;
@@ -18,6 +16,17 @@
1816
*/
1917
public interface ConnectionFactory<C extends SqlConnectOptions> extends Closeable {
2018

19+
default Future<SqlConnection> connect(Context context, Future<C> fut) {
20+
// The future might be on any context or context-less
21+
// So we need to use a specific context promise
22+
Promise<C> promise = ((ContextInternal) context).promise();
23+
fut.onComplete(promise);
24+
return promise
25+
.future()
26+
.compose(connectOptions -> connect(context, connectOptions));
27+
28+
}
29+
2130
static <T> Supplier<Future<T>> roundRobinSupplier(List<T> factories) {
2231
return new Supplier<Future<T>>() {
2332
AtomicLong idx = new AtomicLong();

0 commit comments

Comments
 (0)