Skip to content

Commit c14776d

Browse files
authored
Merge pull request #1454 from eclipse-vertx/pool-queue-metrics-4.x
Queue metrics for single address connection pool
2 parents bc4b1ed + 2b09d83 commit c14776d

File tree

23 files changed

+462
-40
lines changed

23 files changed

+462
-40
lines changed

.github/workflows/ci-4.x.yml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,9 @@ jobs:
1616
strategy:
1717
matrix:
1818
os: [ubuntu-latest]
19-
profile: [PostgreSQL-9,PostgreSQL-10,PostgreSQL-11,MySQL-8.0,MySQL-5.6,MySQL-5.7,MariaDB-10.4,MSSQL-2017-latest,MSSQL-2019-latest,DB2-11.5,Oracle-23,SQL-templates]
19+
# profile: [PostgreSQL-9,PostgreSQL-10,PostgreSQL-11,MySQL-8.0,MySQL-5.6,MySQL-5.7,MariaDB-10.4,MSSQL-2017-latest,MSSQL-2019-latest,DB2-11.5,Oracle-23,SQL-templates]
20+
# Removed MSSQL that fails in CI docker
21+
profile: [PostgreSQL-9,PostgreSQL-10,PostgreSQL-11,MySQL-8.0,MySQL-5.6,MySQL-5.7,MariaDB-10.4,DB2-11.5,Oracle-23,SQL-templates]
2022
jdk: [8, 17]
2123
exclude:
2224
- profile: Oracle-23

vertx-db2-client/src/main/java/io/vertx/db2client/impl/DB2ConnectionFactory.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
import io.vertx.core.net.SocketAddress;
2525
import io.vertx.core.net.impl.NetSocketInternal;
2626
import io.vertx.core.spi.metrics.ClientMetrics;
27-
import io.vertx.core.spi.metrics.VertxMetrics;
2827
import io.vertx.db2client.DB2ConnectOptions;
2928
import io.vertx.sqlclient.SqlConnectOptions;
3029
import io.vertx.sqlclient.SqlConnection;
@@ -55,8 +54,7 @@ protected Future<Connection> doConnectInternal(SqlConnectOptions options, Contex
5554
int pipeliningLimit = db2Options.getPipeliningLimit();
5655
NetClient netClient = netClient(options);
5756
return netClient.connect(server).flatMap(so -> {
58-
VertxMetrics vertxMetrics = vertx.metricsSPI();
59-
ClientMetrics metrics = vertxMetrics != null ? vertxMetrics.createClientMetrics(db2Options.getSocketAddress(), "sql", db2Options.getMetricsName()) : null;
57+
ClientMetrics metrics = clientMetricsProvider != null ? clientMetricsProvider.metricsFor(options) : null;
6058
DB2SocketConnection conn = new DB2SocketConnection((NetSocketInternal) so, metrics, db2Options, cachePreparedStatements,
6159
preparedStatementCacheSize, preparedStatementCacheSqlFilter, pipeliningLimit, context);
6260
conn.init();

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
@@ -55,8 +55,8 @@ public Pool newPool(Vertx vertx, Supplier<? extends Future<? extends SqlConnectO
5555

5656
private PoolImpl newPoolImpl(VertxInternal vertx, Supplier<? extends Future<? extends SqlConnectOptions>> databases, PoolOptions options, CloseFuture closeFuture) {
5757
boolean pipelinedPool = options instanceof Db2PoolOptions && ((Db2PoolOptions) options).isPipelined();
58-
PoolImpl pool = new PoolImpl(vertx, this, pipelinedPool, options, null, null, closeFuture);
5958
ConnectionFactory factory = createConnectionFactory(vertx, databases);
59+
PoolImpl pool = new PoolImpl(vertx, this, pipelinedPool, options, factory.metricsProvider(), null, null, closeFuture);
6060
pool.connectionProvider(factory::connect);
6161
pool.init();
6262
closeFuture.add(factory);

vertx-mssql-client/src/main/java/io/vertx/mssqlclient/impl/MSSQLConnectionFactory.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
import io.vertx.core.net.*;
2020
import io.vertx.core.net.impl.NetSocketInternal;
2121
import io.vertx.core.spi.metrics.ClientMetrics;
22-
import io.vertx.core.spi.metrics.VertxMetrics;
2322
import io.vertx.mssqlclient.MSSQLConnectOptions;
2423
import io.vertx.sqlclient.SqlConnectOptions;
2524
import io.vertx.sqlclient.SqlConnection;
@@ -73,8 +72,7 @@ private Future<Connection> connectOrRedirect(MSSQLConnectOptions options, Contex
7372
}
7473

7574
private MSSQLSocketConnection createSocketConnection(NetSocket so, MSSQLConnectOptions options, ContextInternal context) {
76-
VertxMetrics vertxMetrics = vertx.metricsSPI();
77-
ClientMetrics metrics = vertxMetrics != null ? vertxMetrics.createClientMetrics(options.getSocketAddress(), "sql", options.getMetricsName()) : null;
75+
ClientMetrics metrics = clientMetricsProvider != null ? clientMetricsProvider.metricsFor(options) : null;
7876
MSSQLSocketConnection conn = new MSSQLSocketConnection((NetSocketInternal) so, metrics, options, false, 0, sql -> true, 1, context);
7977
conn.init();
8078
return conn;

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
@@ -57,8 +57,8 @@ public Pool newPool(Vertx vertx, Supplier<? extends Future<? extends SqlConnectO
5757
}
5858

5959
private PoolImpl newPoolImpl(VertxInternal vertx, Supplier<? extends Future<? extends SqlConnectOptions>> databases, PoolOptions options, CloseFuture closeFuture) {
60-
PoolImpl pool = new PoolImpl(vertx, this, false, options, null, null, closeFuture);
6160
ConnectionFactory factory = createConnectionFactory(vertx, databases);
61+
PoolImpl pool = new PoolImpl(vertx, this, false, options, factory.metricsProvider(), null, null, closeFuture);
6262
pool.connectionProvider(context -> factory.connect(context, databases.get()));
6363
pool.init();
6464
closeFuture.add(factory);

vertx-mssql-client/src/test/java/io/vertx/mssqlclient/tck/MSSQLMetricsTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@
1111

1212
package io.vertx.mssqlclient.tck;
1313

14-
import io.vertx.core.Vertx;
1514
import io.vertx.mssqlclient.MSSQLBuilder;
1615
import io.vertx.mssqlclient.junit.MSSQLRule;
16+
import io.vertx.sqlclient.ClientBuilder;
1717
import io.vertx.sqlclient.Pool;
1818
import io.vertx.sqlclient.tck.MetricsTestBase;
1919
import org.junit.ClassRule;
@@ -24,8 +24,8 @@ public class MSSQLMetricsTest extends MetricsTestBase {
2424
public static MSSQLRule rule = MSSQLRule.SHARED_INSTANCE;
2525

2626
@Override
27-
protected Pool createPool(Vertx vertx) {
28-
return MSSQLBuilder.pool(builder -> builder.connectingTo(rule.options()).using(vertx));
27+
protected ClientBuilder<Pool> poolBuilder() {
28+
return MSSQLBuilder.pool().connectingTo(rule.options());
2929
}
3030

3131
@Override

vertx-mysql-client/src/main/java/io/vertx/mysqlclient/impl/MySQLConnectionFactory.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
import io.vertx.core.net.TrustOptions;
2424
import io.vertx.core.net.impl.NetSocketInternal;
2525
import io.vertx.core.spi.metrics.ClientMetrics;
26-
import io.vertx.core.spi.metrics.VertxMetrics;
2726
import io.vertx.mysqlclient.MySQLAuthenticationPlugin;
2827
import io.vertx.mysqlclient.MySQLConnectOptions;
2928
import io.vertx.mysqlclient.SslMode;
@@ -127,8 +126,7 @@ private Future<Connection> doConnect(MySQLConnectOptions options, SslMode sslMod
127126
MySQLAuthenticationPlugin authenticationPlugin = options.getAuthenticationPlugin();
128127
Future<NetSocket> fut = netClient(new NetClientOptions(options).setSsl(false)).connect(server);
129128
return fut.flatMap(so -> {
130-
VertxMetrics vertxMetrics = vertx.metricsSPI();
131-
ClientMetrics metrics = vertxMetrics != null ? vertxMetrics.createClientMetrics(options.getSocketAddress(), "sql", options.getMetricsName()) : null;
129+
ClientMetrics metrics = clientMetricsProvider != null ? clientMetricsProvider.metricsFor(options) : null;
132130
MySQLSocketConnection conn = new MySQLSocketConnection((NetSocketInternal) so, metrics, options, cachePreparedStatements, preparedStatementCacheMaxSize, preparedStatementCacheSqlFilter, pipeliningLimit, context);
133131
conn.init();
134132
return Future.future(promise -> conn.sendStartupMessage(username, password, database, collation, serverRsaPublicKey, properties, sslMode, initialCapabilitiesFlags, charsetEncoding, authenticationPlugin, promise));

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
@@ -55,8 +55,8 @@ public Pool newPool(Vertx vertx, Supplier<? extends Future<? extends SqlConnectO
5555

5656
private PoolImpl newPoolImpl(VertxInternal vertx, Supplier<? extends Future<? extends SqlConnectOptions>> databases, PoolOptions options, CloseFuture closeFuture) {
5757
boolean pipelinedPool = options instanceof MySQLPoolOptions && ((MySQLPoolOptions) options).isPipelined();
58-
PoolImpl pool = new PoolImpl(vertx, this, pipelinedPool, options, null, null, closeFuture);
5958
ConnectionFactory factory = createConnectionFactory(vertx, databases);
59+
PoolImpl pool = new PoolImpl(vertx, this, pipelinedPool, options, factory.metricsProvider(), null, null, closeFuture);
6060
pool.connectionProvider(context -> factory.connect(context, databases.get()));
6161
pool.init();
6262
closeFuture.add(factory);

vertx-oracle-client/src/main/java/io/vertx/oracleclient/impl/OracleConnectionFactory.java

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@
2121
import io.vertx.oracleclient.OracleConnectOptions;
2222
import io.vertx.sqlclient.SqlConnectOptions;
2323
import io.vertx.sqlclient.SqlConnection;
24+
import io.vertx.sqlclient.impl.SingletonSupplier;
25+
import io.vertx.sqlclient.impl.metrics.ClientMetricsProvider;
26+
import io.vertx.sqlclient.impl.metrics.DynamicClientMetricsProvider;
27+
import io.vertx.sqlclient.impl.metrics.SingleServerClientMetricsProvider;
2428
import io.vertx.sqlclient.spi.ConnectionFactory;
2529
import oracle.jdbc.OracleConnection;
2630
import oracle.jdbc.datasource.OracleDataSource;
@@ -36,15 +40,39 @@ public class OracleConnectionFactory implements ConnectionFactory {
3640

3741
private final Supplier<? extends Future<? extends SqlConnectOptions>> options;
3842
private final Map<JsonObject, OracleDataSource> datasources;
43+
private final ClientMetricsProvider clientMetricsProvider;
3944

4045
public OracleConnectionFactory(VertxInternal vertx, Supplier<? extends Future<? extends SqlConnectOptions>> options) {
46+
VertxMetrics metrics = vertx.metricsSPI();
47+
ClientMetricsProvider clientMetricsProvider;
48+
if (metrics != null) {
49+
if (options instanceof SingletonSupplier) {
50+
SqlConnectOptions option = (SqlConnectOptions) ((SingletonSupplier) options).unwrap();
51+
ClientMetrics<?, ?, ?, ?> clientMetrics = metrics.createClientMetrics(option.getSocketAddress(), "sql", option.getMetricsName());
52+
clientMetricsProvider = new SingleServerClientMetricsProvider(clientMetrics);
53+
} else {
54+
clientMetricsProvider = new DynamicClientMetricsProvider(metrics);
55+
}
56+
} else {
57+
clientMetricsProvider = null;
58+
}
59+
this.clientMetricsProvider = clientMetricsProvider;
4160
this.options = options;
4261
this.datasources = new HashMap<>();
4362
}
4463

64+
@Override
65+
public ClientMetricsProvider metricsProvider() {
66+
return clientMetricsProvider;
67+
}
68+
4569
@Override
4670
public void close(Promise<Void> promise) {
47-
promise.complete();
71+
if (clientMetricsProvider != null) {
72+
clientMetricsProvider.close(promise);
73+
} else {
74+
promise.complete();
75+
}
4876
}
4977

5078
@Override
@@ -68,8 +96,7 @@ private OracleDataSource getDatasource(SqlConnectOptions options) {
6896
@Override
6997
public Future<SqlConnection> connect(Context context, SqlConnectOptions options) {
7098
OracleDataSource datasource = getDatasource(options);
71-
VertxMetrics vertxMetrics = ((VertxInternal)context.owner()).metricsSPI();
72-
ClientMetrics metrics = vertxMetrics != null ? vertxMetrics.createClientMetrics(options.getSocketAddress(), "sql", options.getMetricsName()) : null;
99+
ClientMetrics metrics = clientMetricsProvider != null ? clientMetricsProvider.metricsFor(options) : null;
73100
ContextInternal ctx = (ContextInternal) context;
74101
return executeBlocking(context, () -> {
75102
OracleConnection orac = datasource.createConnectionBuilder().build();

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
@@ -52,8 +52,8 @@ public Pool newPool(Vertx vertx, Supplier<? extends Future<? extends SqlConnectO
5252
private PoolImpl newPoolImpl(VertxInternal vertx, Supplier<? extends Future<? extends SqlConnectOptions>> databases, PoolOptions options, CloseFuture closeFuture) {
5353
Function<Connection, Future<Void>> afterAcquire = conn -> ((OracleJdbcConnection) conn).afterAcquire();
5454
Function<Connection, Future<Void>> beforeRecycle = conn -> ((OracleJdbcConnection) conn).beforeRecycle();
55-
PoolImpl pool = new PoolImpl(vertx, this, false, options, afterAcquire, beforeRecycle, closeFuture);
5655
ConnectionFactory factory = createConnectionFactory(vertx, databases);
56+
PoolImpl pool = new PoolImpl(vertx, this, false, options, factory.metricsProvider(), afterAcquire, beforeRecycle, closeFuture);
5757
pool.connectionProvider(context -> factory.connect(context, databases.get()));
5858
pool.init();
5959
closeFuture.add(factory);

0 commit comments

Comments
 (0)