Skip to content

Commit abee647

Browse files
committed
Update the pool metrics implementation to use the pool metrics instead of using the inconvenient client metric queue capabilities that does not match correctly the actual pool usage when it becomes dynamic.
1 parent c14776d commit abee647

File tree

19 files changed

+143
-407
lines changed

19 files changed

+143
-407
lines changed

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
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;
2728
import io.vertx.db2client.DB2ConnectOptions;
2829
import io.vertx.sqlclient.SqlConnectOptions;
2930
import io.vertx.sqlclient.SqlConnection;
@@ -54,7 +55,8 @@ protected Future<Connection> doConnectInternal(SqlConnectOptions options, Contex
5455
int pipeliningLimit = db2Options.getPipeliningLimit();
5556
NetClient netClient = netClient(options);
5657
return netClient.connect(server).flatMap(so -> {
57-
ClientMetrics metrics = clientMetricsProvider != null ? clientMetricsProvider.metricsFor(options) : null;
58+
VertxMetrics vertxMetrics = vertx.metricsSPI();
59+
ClientMetrics metrics = vertxMetrics != null ? vertxMetrics.createClientMetrics(db2Options.getSocketAddress(), "sql", db2Options.getMetricsName()) : null;
5860
DB2SocketConnection conn = new DB2SocketConnection((NetSocketInternal) so, metrics, db2Options, cachePreparedStatements,
5961
preparedStatementCacheSize, preparedStatementCacheSqlFilter, pipeliningLimit, context);
6062
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);
5859
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: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
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;
2223
import io.vertx.mssqlclient.MSSQLConnectOptions;
2324
import io.vertx.sqlclient.SqlConnectOptions;
2425
import io.vertx.sqlclient.SqlConnection;
@@ -72,7 +73,8 @@ private Future<Connection> connectOrRedirect(MSSQLConnectOptions options, Contex
7273
}
7374

7475
private MSSQLSocketConnection createSocketConnection(NetSocket so, MSSQLConnectOptions options, ContextInternal context) {
75-
ClientMetrics metrics = clientMetricsProvider != null ? clientMetricsProvider.metricsFor(options) : null;
76+
VertxMetrics vertxMetrics = vertx.metricsSPI();
77+
ClientMetrics metrics = vertxMetrics != null ? vertxMetrics.createClientMetrics(options.getSocketAddress(), "sql", options.getMetricsName()) : null;
7678
MSSQLSocketConnection conn = new MSSQLSocketConnection((NetSocketInternal) so, metrics, options, false, 0, sql -> true, 1, context);
7779
conn.init();
7880
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);
6061
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-mysql-client/src/main/java/io/vertx/mysqlclient/impl/MySQLConnectionFactory.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
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;
2627
import io.vertx.mysqlclient.MySQLAuthenticationPlugin;
2728
import io.vertx.mysqlclient.MySQLConnectOptions;
2829
import io.vertx.mysqlclient.SslMode;
@@ -126,7 +127,8 @@ private Future<Connection> doConnect(MySQLConnectOptions options, SslMode sslMod
126127
MySQLAuthenticationPlugin authenticationPlugin = options.getAuthenticationPlugin();
127128
Future<NetSocket> fut = netClient(new NetClientOptions(options).setSsl(false)).connect(server);
128129
return fut.flatMap(so -> {
129-
ClientMetrics metrics = clientMetricsProvider != null ? clientMetricsProvider.metricsFor(options) : null;
130+
VertxMetrics vertxMetrics = vertx.metricsSPI();
131+
ClientMetrics metrics = vertxMetrics != null ? vertxMetrics.createClientMetrics(options.getSocketAddress(), "sql", options.getMetricsName()) : null;
130132
MySQLSocketConnection conn = new MySQLSocketConnection((NetSocketInternal) so, metrics, options, cachePreparedStatements, preparedStatementCacheMaxSize, preparedStatementCacheSqlFilter, pipeliningLimit, context);
131133
conn.init();
132134
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);
5859
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: 3 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,6 @@
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;
2824
import io.vertx.sqlclient.spi.ConnectionFactory;
2925
import oracle.jdbc.OracleConnection;
3026
import oracle.jdbc.datasource.OracleDataSource;
@@ -40,39 +36,15 @@ public class OracleConnectionFactory implements ConnectionFactory {
4036

4137
private final Supplier<? extends Future<? extends SqlConnectOptions>> options;
4238
private final Map<JsonObject, OracleDataSource> datasources;
43-
private final ClientMetricsProvider clientMetricsProvider;
4439

4540
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;
6041
this.options = options;
6142
this.datasources = new HashMap<>();
6243
}
6344

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

7850
@Override
@@ -96,7 +68,8 @@ private OracleDataSource getDatasource(SqlConnectOptions options) {
9668
@Override
9769
public Future<SqlConnection> connect(Context context, SqlConnectOptions options) {
9870
OracleDataSource datasource = getDatasource(options);
99-
ClientMetrics metrics = clientMetricsProvider != null ? clientMetricsProvider.metricsFor(options) : null;
71+
VertxMetrics vertxMetrics = ((VertxInternal)context.owner()).metricsSPI();
72+
ClientMetrics metrics = vertxMetrics != null ? vertxMetrics.createClientMetrics(options.getSocketAddress(), "sql", options.getMetricsName()) : null;
10073
ContextInternal ctx = (ContextInternal) context;
10174
return executeBlocking(context, () -> {
10275
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);
5556
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-pg-client/src/main/java/io/vertx/pgclient/impl/PgConnectionFactory.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,9 @@ private PgSocketConnection newSocketConnection(ContextInternal context, NetSocke
179179
Predicate<String> preparedStatementCacheSqlFilter = options.getPreparedStatementCacheSqlFilter();
180180
int pipeliningLimit = options.getPipeliningLimit();
181181
boolean useLayer7Proxy = options.getUseLayer7Proxy();
182-
ClientMetrics metrics = clientMetricsProvider != null ? clientMetricsProvider.metricsFor(options) : null;
183-
return new PgSocketConnection(socket, metrics, options, cachePreparedStatements, preparedStatementCacheMaxSize, preparedStatementCacheSqlFilter, pipeliningLimit, useLayer7Proxy, context);
182+
VertxMetrics vertxMetrics = vertx.metricsSPI();
183+
ClientMetrics metrics = vertxMetrics != null ? vertxMetrics.createClientMetrics(options.getSocketAddress(), "sql", options.getMetricsName()) : null;
184+
PgSocketConnection conn = new PgSocketConnection(socket, metrics, options, cachePreparedStatements, preparedStatementCacheMaxSize, preparedStatementCacheSqlFilter, pipeliningLimit, useLayer7Proxy, context);
185+
return conn;
184186
}
185187
}

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

4343
private PoolImpl newPoolImpl(VertxInternal vertx, Supplier<? extends Future<? extends SqlConnectOptions>> databases, PoolOptions options, CloseFuture closeFuture) {
4444
boolean pipelinedPool = options instanceof PgPoolOptions && ((PgPoolOptions) options).isPipelined();
45+
PoolImpl pool = new PoolImpl(vertx, this, pipelinedPool, options, null, null, closeFuture);
4546
ConnectionFactory factory = createConnectionFactory(vertx, databases);
46-
PoolImpl pool = new PoolImpl(vertx, this, pipelinedPool, options, factory.metricsProvider(), null, null, closeFuture);
4747
pool.connectionProvider(context -> factory.connect(context)); // BEWARE!!!!
4848
pool.init();
4949
closeFuture.add(factory);

0 commit comments

Comments
 (0)