Skip to content

Commit 1bf43ad

Browse files
committed
The pool implementation does not actually log queue metrics to the client metrics SPI.
This updates the implementation to actually log queue metrics to the client SPI when the pool uses a fixed connect options (the reason is that the client metrics SPI is coupled to the socket address of the client and most likely this should be changed in Vert.x 5)
1 parent bc4b1ed commit 1bf43ad

File tree

22 files changed

+459
-39
lines changed

22 files changed

+459
-39
lines changed

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);

vertx-oracle-client/src/test/java/io/vertx/oracleclient/test/tck/OracleMetricsTest.java

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

1212
package io.vertx.oracleclient.test.tck;
1313

14-
import io.vertx.core.Vertx;
1514
import io.vertx.ext.unit.TestContext;
1615
import io.vertx.oracleclient.OracleBuilder;
1716
import io.vertx.oracleclient.test.junit.OracleRule;
17+
import io.vertx.sqlclient.ClientBuilder;
1818
import io.vertx.sqlclient.Pool;
1919
import io.vertx.sqlclient.tck.MetricsTestBase;
2020
import org.junit.ClassRule;
@@ -27,10 +27,8 @@ public class OracleMetricsTest extends MetricsTestBase {
2727
public static OracleRule rule = OracleRule.SHARED_INSTANCE;
2828

2929
@Override
30-
protected Pool createPool(Vertx vertx) {
31-
return OracleBuilder.pool(builder -> builder
32-
.connectingTo(rule.options())
33-
.using(vertx));
30+
protected ClientBuilder<Pool> poolBuilder() {
31+
return OracleBuilder.pool().connectingTo(rule.options());
3432
}
3533

3634
@Override

0 commit comments

Comments
 (0)