Skip to content

Commit 2b05155

Browse files
committed
Metrics and Tracing are now handled related to the connection and reported by a dedicated reporter around the command scheduler when it can access a connection.
1 parent c31d50d commit 2b05155

File tree

38 files changed

+408
-392
lines changed

38 files changed

+408
-392
lines changed

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

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,13 @@
2424
import io.vertx.core.net.NetClient;
2525
import io.vertx.core.net.SocketAddress;
2626
import io.vertx.core.net.impl.NetSocketInternal;
27+
import io.vertx.core.spi.metrics.ClientMetrics;
28+
import io.vertx.core.spi.metrics.VertxMetrics;
2729
import io.vertx.db2client.DB2ConnectOptions;
2830
import io.vertx.sqlclient.SqlConnectOptions;
2931
import io.vertx.sqlclient.SqlConnection;
3032
import io.vertx.sqlclient.impl.Connection;
3133
import io.vertx.sqlclient.impl.ConnectionFactoryBase;
32-
import io.vertx.sqlclient.impl.tracing.QueryTracer;
3334

3435
import java.util.Map;
3536
import java.util.function.Predicate;
@@ -43,6 +44,7 @@ public DB2ConnectionFactory(VertxInternal vertx, Supplier<DB2ConnectOptions> opt
4344

4445
@Override
4546
protected Future<Connection> doConnectInternal(SqlConnectOptions options, EventLoopContext context) {
47+
DB2ConnectOptions db2Options = DB2ConnectOptions.wrap(options);
4648
SocketAddress server = options.getSocketAddress();
4749
boolean cachePreparedStatements = options.getCachePreparedStatements();
4850
int preparedStatementCacheSize = options.getPreparedStatementCacheMaxSize();
@@ -51,10 +53,12 @@ protected Future<Connection> doConnectInternal(SqlConnectOptions options, EventL
5153
String password = options.getPassword();
5254
String database = options.getDatabase();
5355
Map<String, String> properties = options.getProperties();
54-
int pipeliningLimit = ((DB2ConnectOptions) options).getPipeliningLimit();
56+
int pipeliningLimit = db2Options.getPipeliningLimit();
5557
NetClient netClient = netClient(options);
5658
return netClient.connect(server).flatMap(so -> {
57-
DB2SocketConnection conn = new DB2SocketConnection((NetSocketInternal) so, cachePreparedStatements,
59+
VertxMetrics vertxMetrics = vertx.metricsSPI();
60+
ClientMetrics metrics = vertxMetrics != null ? vertxMetrics.createClientMetrics(db2Options.getSocketAddress(), "sql", db2Options.getMetricsName()) : null;
61+
DB2SocketConnection conn = new DB2SocketConnection((NetSocketInternal) so, metrics, db2Options, cachePreparedStatements,
5862
preparedStatementCacheSize, preparedStatementCacheSqlFilter, pipeliningLimit, context);
5963
conn.init();
6064
return Future.future(p -> conn.sendStartupMessage(username, password, database, properties, p));
@@ -64,11 +68,10 @@ protected Future<Connection> doConnectInternal(SqlConnectOptions options, EventL
6468
@Override
6569
public Future<SqlConnection> connect(Context context, SqlConnectOptions options) {
6670
ContextInternal contextInternal = (ContextInternal) context;
67-
QueryTracer tracer = contextInternal.tracer() == null ? null : new QueryTracer(contextInternal.tracer(), options);
6871
Promise<SqlConnection> promise = contextInternal.promise();
6972
connect(asEventLoopContext(contextInternal), options)
7073
.map(conn -> {
71-
DB2ConnectionImpl db2Connection = new DB2ConnectionImpl(contextInternal, this, conn, tracer, null);
74+
DB2ConnectionImpl db2Connection = new DB2ConnectionImpl(contextInternal, this, conn);
7275
conn.init(db2Connection);
7376
return (SqlConnection)db2Connection;
7477
}).onComplete(promise);

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

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,12 @@
2020
import io.vertx.core.Handler;
2121
import io.vertx.core.Vertx;
2222
import io.vertx.core.impl.ContextInternal;
23-
import io.vertx.core.spi.metrics.ClientMetrics;
2423
import io.vertx.db2client.DB2ConnectOptions;
2524
import io.vertx.db2client.DB2Connection;
2625
import io.vertx.db2client.impl.command.PingCommand;
2726
import io.vertx.db2client.spi.DB2Driver;
2827
import io.vertx.sqlclient.impl.Connection;
2928
import io.vertx.sqlclient.impl.SqlConnectionBase;
30-
import io.vertx.sqlclient.impl.tracing.QueryTracer;
3129
import io.vertx.sqlclient.spi.ConnectionFactory;
3230

3331
public class DB2ConnectionImpl extends SqlConnectionBase<DB2ConnectionImpl> implements DB2Connection {
@@ -44,8 +42,8 @@ public static Future<DB2Connection> connect(Vertx vertx, DB2ConnectOptions optio
4442
return (Future) client.connect(ctx);
4543
}
4644

47-
public DB2ConnectionImpl(ContextInternal context, ConnectionFactory factory, Connection conn, QueryTracer tracer, ClientMetrics metrics) {
48-
super(context, factory, conn, DB2Driver.INSTANCE, tracer, metrics);
45+
public DB2ConnectionImpl(ContextInternal context, ConnectionFactory factory, Connection conn) {
46+
super(context, factory, conn, DB2Driver.INSTANCE);
4947
}
5048

5149
@Override

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

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,14 @@
2222
import io.vertx.core.AsyncResult;
2323
import io.vertx.core.Handler;
2424
import io.vertx.core.Promise;
25-
import io.vertx.core.impl.ContextInternal;
2625
import io.vertx.core.impl.EventLoopContext;
2726
import io.vertx.core.net.impl.NetSocketInternal;
27+
import io.vertx.core.spi.metrics.ClientMetrics;
28+
import io.vertx.db2client.DB2ConnectOptions;
2829
import io.vertx.db2client.impl.codec.DB2Codec;
2930
import io.vertx.db2client.impl.command.InitialHandshakeCommand;
3031
import io.vertx.db2client.impl.drda.ConnectionMetaData;
32+
import io.vertx.sqlclient.SqlConnectOptions;
3133
import io.vertx.sqlclient.impl.Connection;
3234
import io.vertx.sqlclient.impl.QueryResultHandler;
3335
import io.vertx.sqlclient.impl.SocketConnectionBase;
@@ -40,17 +42,21 @@
4042

4143
public class DB2SocketConnection extends SocketConnectionBase {
4244

45+
private final DB2ConnectOptions connectOptions;
4346
private DB2Codec codec;
4447
private Handler<Void> closeHandler;
4548
public final ConnectionMetaData connMetadata = new ConnectionMetaData();
4649

4750
public DB2SocketConnection(NetSocketInternal socket,
51+
ClientMetrics clientMetrics,
52+
DB2ConnectOptions connectOptions,
4853
boolean cachePreparedStatements,
4954
int preparedStatementCacheSize,
5055
Predicate<String> preparedStatementCacheSqlFilter,
5156
int pipeliningLimit,
5257
EventLoopContext context) {
53-
super(socket, cachePreparedStatements, preparedStatementCacheSize, preparedStatementCacheSqlFilter, pipeliningLimit, context);
58+
super(socket, clientMetrics, cachePreparedStatements, preparedStatementCacheSize, preparedStatementCacheSqlFilter, pipeliningLimit, context);
59+
this.connectOptions = connectOptions;
5460
}
5561

5662
// TODO RETURN FUTURE ???
@@ -63,6 +69,11 @@ void sendStartupMessage(String username,
6369
schedule(context, cmd).onComplete(completionHandler);
6470
}
6571

72+
@Override
73+
protected SqlConnectOptions connectOptions() {
74+
return connectOptions;
75+
}
76+
6677
@Override
6778
public void init() {
6879
codec = new DB2Codec(this);

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

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,6 @@
2020
import io.vertx.core.impl.ContextInternal;
2121
import io.vertx.core.impl.VertxInternal;
2222
import io.vertx.core.json.JsonObject;
23-
import io.vertx.core.spi.metrics.ClientMetrics;
24-
import io.vertx.core.spi.metrics.VertxMetrics;
2523
import io.vertx.db2client.DB2ConnectOptions;
2624
import io.vertx.db2client.impl.*;
2725
import io.vertx.sqlclient.Pool;
@@ -30,7 +28,6 @@
3028
import io.vertx.sqlclient.impl.Connection;
3129
import io.vertx.sqlclient.impl.PoolImpl;
3230
import io.vertx.sqlclient.impl.SqlConnectionInternal;
33-
import io.vertx.sqlclient.impl.tracing.QueryTracer;
3431
import io.vertx.sqlclient.spi.ConnectionFactory;
3532
import io.vertx.sqlclient.spi.Driver;
3633

@@ -56,12 +53,9 @@ public Pool newPool(Vertx vertx, Supplier<? extends SqlConnectOptions> databases
5653

5754
private PoolImpl newPoolImpl(VertxInternal vertx, Supplier<? extends SqlConnectOptions> databases, PoolOptions options, CloseFuture closeFuture) {
5855
DB2ConnectOptions baseConnectOptions = DB2ConnectOptions.wrap(databases.get());
59-
QueryTracer tracer = vertx.tracer() == null ? null : new QueryTracer(vertx.tracer(), baseConnectOptions);
60-
VertxMetrics vertxMetrics = vertx.metricsSPI();
61-
ClientMetrics metrics = vertxMetrics != null ? vertxMetrics.createClientMetrics(baseConnectOptions.getSocketAddress(), "sql", baseConnectOptions.getMetricsName()) : null;
6256
boolean pipelinedPool = options instanceof Db2PoolOptions && ((Db2PoolOptions) options).isPipelined();
6357
int pipeliningLimit = pipelinedPool ? baseConnectOptions.getPipeliningLimit() : 1;
64-
PoolImpl pool = new PoolImpl(vertx, this, tracer, metrics, pipeliningLimit, options, null, null, closeFuture);
58+
PoolImpl pool = new PoolImpl(vertx, this, pipeliningLimit, options, null, null, closeFuture);
6559
ConnectionFactory factory = createConnectionFactory(vertx, databases);
6660
pool.connectionProvider(factory::connect);
6761
pool.init();
@@ -91,7 +85,7 @@ public ConnectionFactory createConnectionFactory(Vertx vertx, Supplier<? extends
9185
}
9286

9387
@Override
94-
public SqlConnectionInternal wrapConnection(ContextInternal context, ConnectionFactory factory, Connection conn, QueryTracer tracer, ClientMetrics metrics) {
95-
return new DB2ConnectionImpl(context, factory, conn, tracer, metrics);
88+
public SqlConnectionInternal wrapConnection(ContextInternal context, ConnectionFactory factory, Connection conn) {
89+
return new DB2ConnectionImpl(context, factory, conn);
9690
}
9791
}

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

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,13 @@
2222
import io.vertx.core.net.NetSocket;
2323
import io.vertx.core.net.SocketAddress;
2424
import io.vertx.core.net.impl.NetSocketInternal;
25+
import io.vertx.core.spi.metrics.ClientMetrics;
26+
import io.vertx.core.spi.metrics.VertxMetrics;
2527
import io.vertx.mssqlclient.MSSQLConnectOptions;
2628
import io.vertx.sqlclient.SqlConnectOptions;
2729
import io.vertx.sqlclient.SqlConnection;
2830
import io.vertx.sqlclient.impl.Connection;
2931
import io.vertx.sqlclient.impl.ConnectionFactoryBase;
30-
import io.vertx.sqlclient.impl.tracing.QueryTracer;
3132

3233
import java.util.Map;
3334
import java.util.function.Supplier;
@@ -42,7 +43,7 @@ public MSSQLConnectionFactory(VertxInternal vertx, Supplier<MSSQLConnectOptions>
4243

4344
@Override
4445
protected Future<Connection> doConnectInternal(SqlConnectOptions options, EventLoopContext context) {
45-
return connectOrRedirect((MSSQLConnectOptions) options, context, 0);
46+
return connectOrRedirect(MSSQLConnectOptions.wrap(options), context, 0);
4647
}
4748

4849
private Future<Connection> connectOrRedirect(MSSQLConnectOptions options, EventLoopContext context, int redirections) {
@@ -55,7 +56,7 @@ private Future<Connection> connectOrRedirect(MSSQLConnectOptions options, EventL
5556
// Always start unencrypted, the connection will be upgraded if client and server agree
5657
NetClient netClient = netClient(new NetClientOptions(options).setSsl(false));
5758
return netClient.connect(server)
58-
.map(so -> createSocketConnection(so, desiredPacketSize, context))
59+
.map(so -> createSocketConnection(so, options, desiredPacketSize, context))
5960
.compose(conn -> conn.sendPreLoginMessage(clientSslConfig)
6061
.compose(encryptionLevel -> login(conn, options, encryptionLevel, context))
6162
)
@@ -71,8 +72,10 @@ private Future<Connection> connectOrRedirect(MSSQLConnectOptions options, EventL
7172
});
7273
}
7374

74-
private MSSQLSocketConnection createSocketConnection(NetSocket so, int desiredPacketSize, EventLoopContext context) {
75-
MSSQLSocketConnection conn = new MSSQLSocketConnection((NetSocketInternal) so, desiredPacketSize, false, 0, sql -> true, 1, context);
75+
private MSSQLSocketConnection createSocketConnection(NetSocket so, MSSQLConnectOptions options, int desiredPacketSize, EventLoopContext context) {
76+
VertxMetrics vertxMetrics = vertx.metricsSPI();
77+
ClientMetrics metrics = vertxMetrics != null ? vertxMetrics.createClientMetrics(options.getSocketAddress(), "sql", options.getMetricsName()) : null;
78+
MSSQLSocketConnection conn = new MSSQLSocketConnection((NetSocketInternal) so, metrics, options, desiredPacketSize, false, 0, sql -> true, 1, context);
7679
conn.init();
7780
return conn;
7881
}
@@ -102,11 +105,10 @@ private Future<Connection> login(MSSQLSocketConnection conn, MSSQLConnectOptions
102105
@Override
103106
public Future<SqlConnection> connect(Context context, SqlConnectOptions options) {
104107
ContextInternal ctx = (ContextInternal) context;
105-
QueryTracer tracer = ctx.tracer() == null ? null : new QueryTracer(ctx.tracer(), options);
106108
Promise<SqlConnection> promise = ctx.promise();
107109
connect(asEventLoopContext(ctx), options)
108110
.map(conn -> {
109-
MSSQLConnectionImpl msConn = new MSSQLConnectionImpl(ctx, this, conn, tracer, null);
111+
MSSQLConnectionImpl msConn = new MSSQLConnectionImpl(ctx, this, conn);
110112
conn.init(msConn);
111113
return (SqlConnection)msConn;
112114
})

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

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,23 +15,21 @@
1515
import io.vertx.core.Handler;
1616
import io.vertx.core.Vertx;
1717
import io.vertx.core.impl.ContextInternal;
18-
import io.vertx.core.spi.metrics.ClientMetrics;
1918
import io.vertx.mssqlclient.MSSQLConnectOptions;
2019
import io.vertx.mssqlclient.MSSQLConnection;
2120
import io.vertx.mssqlclient.MSSQLInfo;
2221
import io.vertx.mssqlclient.spi.MSSQLDriver;
2322
import io.vertx.sqlclient.impl.Connection;
2423
import io.vertx.sqlclient.impl.SocketConnectionBase;
2524
import io.vertx.sqlclient.impl.SqlConnectionBase;
26-
import io.vertx.sqlclient.impl.tracing.QueryTracer;
2725
import io.vertx.sqlclient.spi.ConnectionFactory;
2826

2927
public class MSSQLConnectionImpl extends SqlConnectionBase<MSSQLConnectionImpl> implements MSSQLConnection {
3028

3129
private volatile Handler<MSSQLInfo> infoHandler;
3230

33-
public MSSQLConnectionImpl(ContextInternal context, ConnectionFactory factory, Connection conn, QueryTracer tracer, ClientMetrics metrics) {
34-
super(context, factory, conn, MSSQLDriver.INSTANCE, tracer, metrics);
31+
public MSSQLConnectionImpl(ContextInternal context, ConnectionFactory factory, Connection conn) {
32+
super(context, factory, conn, MSSQLDriver.INSTANCE);
3533
}
3634

3735
public static Future<MSSQLConnection> connect(Vertx vertx, MSSQLConnectOptions options) {

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

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,15 @@
2323
import io.vertx.core.net.impl.NetSocketInternal;
2424
import io.vertx.core.net.impl.SSLHelper;
2525
import io.vertx.core.net.impl.SslHandshakeCompletionHandler;
26+
import io.vertx.core.spi.metrics.ClientMetrics;
2627
import io.vertx.mssqlclient.MSSQLConnectOptions;
2728
import io.vertx.mssqlclient.MSSQLInfo;
2829
import io.vertx.mssqlclient.impl.codec.TdsLoginSentCompletionHandler;
2930
import io.vertx.mssqlclient.impl.codec.TdsMessageCodec;
3031
import io.vertx.mssqlclient.impl.codec.TdsPacketDecoder;
3132
import io.vertx.mssqlclient.impl.codec.TdsSslHandshakeCodec;
3233
import io.vertx.mssqlclient.impl.command.PreLoginCommand;
34+
import io.vertx.sqlclient.SqlConnectOptions;
3335
import io.vertx.sqlclient.impl.Connection;
3436
import io.vertx.sqlclient.impl.QueryResultHandler;
3537
import io.vertx.sqlclient.impl.SocketConnectionBase;
@@ -43,22 +45,31 @@
4345

4446
public class MSSQLSocketConnection extends SocketConnectionBase {
4547

48+
private final MSSQLConnectOptions connectOptions;
4649
private final int packetSize;
4750

4851
private MSSQLDatabaseMetadata databaseMetadata;
4952
private SocketAddress alternateServer;
5053

5154
MSSQLSocketConnection(NetSocketInternal socket,
55+
ClientMetrics clientMetrics,
56+
MSSQLConnectOptions connectOptions,
5257
int packetSize,
5358
boolean cachePreparedStatements,
5459
int preparedStatementCacheSize,
5560
Predicate<String> preparedStatementCacheSqlFilter,
5661
int pipeliningLimit,
5762
EventLoopContext context) {
58-
super(socket, cachePreparedStatements, preparedStatementCacheSize, preparedStatementCacheSqlFilter, pipeliningLimit, context);
63+
super(socket, clientMetrics, cachePreparedStatements, preparedStatementCacheSize, preparedStatementCacheSqlFilter, pipeliningLimit, context);
64+
this.connectOptions = connectOptions;
5965
this.packetSize = packetSize;
6066
}
6167

68+
@Override
69+
protected SqlConnectOptions connectOptions() {
70+
return connectOptions;
71+
}
72+
6273
Future<Byte> sendPreLoginMessage(boolean clientConfigSsl) {
6374
PreLoginCommand cmd = new PreLoginCommand(clientConfigSsl);
6475
return schedule(context, cmd).map(resp -> {

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

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,6 @@
2020
import io.vertx.core.impl.ContextInternal;
2121
import io.vertx.core.impl.VertxInternal;
2222
import io.vertx.core.json.JsonObject;
23-
import io.vertx.core.spi.metrics.ClientMetrics;
24-
import io.vertx.core.spi.metrics.VertxMetrics;
2523
import io.vertx.mssqlclient.MSSQLConnectOptions;
2624
import io.vertx.mssqlclient.impl.MSSQLConnectionFactory;
2725
import io.vertx.mssqlclient.impl.MSSQLConnectionImpl;
@@ -33,7 +31,6 @@
3331
import io.vertx.sqlclient.impl.Connection;
3432
import io.vertx.sqlclient.impl.PoolImpl;
3533
import io.vertx.sqlclient.impl.SqlConnectionInternal;
36-
import io.vertx.sqlclient.impl.tracing.QueryTracer;
3734
import io.vertx.sqlclient.spi.ConnectionFactory;
3835
import io.vertx.sqlclient.spi.Driver;
3936

@@ -59,12 +56,9 @@ public Pool newPool(Vertx vertx, Supplier<? extends SqlConnectOptions> databases
5956

6057
private PoolImpl newPoolImpl(VertxInternal vertx, Supplier<? extends SqlConnectOptions> databases, PoolOptions options, CloseFuture closeFuture) {
6158
MSSQLConnectOptions baseConnectOptions = MSSQLConnectOptions.wrap(databases.get());
62-
QueryTracer tracer = vertx.tracer() == null ? null : new QueryTracer(vertx.tracer(), baseConnectOptions);
63-
VertxMetrics vertxMetrics = vertx.metricsSPI();
64-
ClientMetrics metrics = vertxMetrics != null ? vertxMetrics.createClientMetrics(baseConnectOptions.getSocketAddress(), "sql", baseConnectOptions.getMetricsName()) : null;
65-
PoolImpl pool = new PoolImpl(vertx, this, tracer, metrics, 1, options, null, null, closeFuture);
59+
PoolImpl pool = new PoolImpl(vertx, this, 1, options, null, null, closeFuture);
6660
ConnectionFactory factory = createConnectionFactory(vertx, databases);
67-
pool.connectionProvider(factory::connect);
61+
pool.connectionProvider(context -> factory.connect(context, databases.get()));
6862
pool.init();
6963
closeFuture.add(factory);
7064
return pool;
@@ -98,7 +92,7 @@ public int appendQueryPlaceholder(StringBuilder queryBuilder, int index, int cur
9892
}
9993

10094
@Override
101-
public SqlConnectionInternal wrapConnection(ContextInternal context, ConnectionFactory factory, Connection conn, QueryTracer tracer, ClientMetrics metrics) {
102-
return new MSSQLConnectionImpl(context, factory, conn, tracer, metrics);
95+
public SqlConnectionInternal wrapConnection(ContextInternal context, ConnectionFactory factory, Connection conn) {
96+
return new MSSQLConnectionImpl(context, factory, conn);
10397
}
10498
}

0 commit comments

Comments
 (0)