From f9792f826aea3ecf14e8acb42a8c7fd75b0baea0 Mon Sep 17 00:00:00 2001 From: Julien Viet Date: Thu, 21 May 2020 09:29:28 +0200 Subject: [PATCH 1/7] Move all query command execution method in SqlResultBuilder --- .../io/vertx/sqlclient/impl/CursorImpl.java | 5 +- .../sqlclient/impl/PreparedStatementImpl.java | 8 +- .../vertx/sqlclient/impl/SqlClientBase.java | 28 +----- .../sqlclient/impl/SqlResultBuilder.java | 95 ++++++++++++------- 4 files changed, 70 insertions(+), 66 deletions(-) diff --git a/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/CursorImpl.java b/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/CursorImpl.java index 9fe1365f8..c4f62c1aa 100644 --- a/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/CursorImpl.java +++ b/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/CursorImpl.java @@ -67,12 +67,11 @@ public void read(int count, Handler>> handler) { public synchronized Future> read(int count) { Promise> promise = context.promise(); SqlResultBuilder, RowSetImpl, RowSet> builder = new SqlResultBuilder<>(RowSetImpl.FACTORY, RowSetImpl.COLLECTOR); - SqlResultHandler, RowSetImpl, RowSet> handler = builder.createHandler(promise); if (id == null) { id = UUID.randomUUID().toString(); - result = builder.execute(ps.conn, ps.ps, ps.autoCommit, params, count, id, false, handler); + result = builder.executeExtendedQuery(ps.conn, ps.ps, ps.autoCommit, params, count, id, false, promise); } else if (result.isSuspended()) { - result = builder.execute(ps.conn, ps.ps, ps.autoCommit, params, count, id, true, handler); + result = builder.executeExtendedQuery(ps.conn, ps.ps, ps.autoCommit, params, count, id, true, promise); } else { throw new IllegalStateException(); } diff --git a/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/PreparedStatementImpl.java b/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/PreparedStatementImpl.java index 2344f56c0..c379072a2 100644 --- a/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/PreparedStatementImpl.java +++ b/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/PreparedStatementImpl.java @@ -70,8 +70,7 @@ > void execute(Tuple args, SqlResultBuilder builder, Promise p) { if (context == Vertx.currentContext()) { - SqlResultHandler handler = builder.createHandler(p); - builder.execute( + builder.executeExtendedQuery( conn, ps, autoCommit, @@ -79,7 +78,7 @@ > void execute(Tuple args, fetch, cursorId, suspended, - handler); + p); } else { context.runOnContext(v -> execute(args, fetch, cursorId, suspended, builder, p)); } @@ -114,8 +113,7 @@ > void executeBatch(List argsList, SqlResultBuilder builder, Promise p) { if (context == Vertx.currentContext()) { - SqlResultHandler handler = builder.createHandler(p); - builder.executeBatch(conn, ps, autoCommit, argsList, handler); + builder.executeBatchQuery(conn, ps, autoCommit, argsList, p); } else { context.runOnContext(v -> executeBatch(argsList, builder, p)); } diff --git a/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/SqlClientBase.java b/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/SqlClientBase.java index 627d32235..e7294b62c 100644 --- a/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/SqlClientBase.java +++ b/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/SqlClientBase.java @@ -20,10 +20,7 @@ import io.vertx.core.Promise; import io.vertx.sqlclient.PreparedQuery; import io.vertx.sqlclient.Query; -import io.vertx.sqlclient.impl.command.BiCommand; import io.vertx.sqlclient.impl.command.CommandScheduler; -import io.vertx.sqlclient.impl.command.ExtendedBatchQueryCommand; -import io.vertx.sqlclient.impl.command.PrepareStatementCommand; import io.vertx.sqlclient.SqlResult; import io.vertx.sqlclient.RowSet; import io.vertx.sqlclient.Row; @@ -96,8 +93,7 @@ public Future execute() { } protected void execute(Promise promise) { - SqlResultHandler handler = builder.createHandler(promise); - builder.execute(SqlClientBase.this, sql, autoCommit, singleton, handler); + builder.executeSimpleQuery(SqlClientBase.this, sql, autoCommit, singleton, promise); } } @@ -128,15 +124,7 @@ protected void execute(Promise promise) { } private void execute(Tuple arguments, Promise promise) { - SqlResultHandler handler = builder.createHandler(promise); - BiCommand abc = new BiCommand<>(new PrepareStatementCommand(sql, true), ps -> { - String msg = ps.prepare((TupleInternal) arguments); - if (msg != null) { - return Future.failedFuture(msg); - } - return Future.succeededFuture(builder.createCommand(ps, autoCommit, arguments, handler)); - }); - schedule(abc, handler); + builder.executeExtendedQuery(SqlClientBase.this, sql, autoCommit, arguments, promise); } @Override @@ -164,17 +152,7 @@ public Future executeBatch(List batch) { } private void executeBatch(List batch, Promise promise) { - SqlResultHandler handler = builder.createHandler(promise); - BiCommand abc = new BiCommand<>(new PrepareStatementCommand(sql, true), ps -> { - for (Tuple args : batch) { - String msg = ps.prepare((TupleInternal) args); - if (msg != null) { - return Future.failedFuture(msg); - } - } - return Future.succeededFuture(builder.createBatchCommand(ps, autoCommit, batch, handler)); - }); - schedule(abc, handler); + builder.executeBatchQuery(SqlClientBase.this, sql, autoCommit, batch, promise); } } } diff --git a/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/SqlResultBuilder.java b/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/SqlResultBuilder.java index b50707ca9..526127e83 100644 --- a/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/SqlResultBuilder.java +++ b/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/SqlResultBuilder.java @@ -17,13 +17,16 @@ package io.vertx.sqlclient.impl; +import io.vertx.core.Future; import io.vertx.core.Promise; import io.vertx.sqlclient.Row; import io.vertx.sqlclient.SqlResult; import io.vertx.sqlclient.Tuple; +import io.vertx.sqlclient.impl.command.BiCommand; import io.vertx.sqlclient.impl.command.CommandScheduler; import io.vertx.sqlclient.impl.command.ExtendedBatchQueryCommand; import io.vertx.sqlclient.impl.command.ExtendedQueryCommand; +import io.vertx.sqlclient.impl.command.PrepareStatementCommand; import io.vertx.sqlclient.impl.command.SimpleQueryCommand; import java.util.List; @@ -44,27 +47,28 @@ public SqlResultBuilder(Function factory, this.collector = collector; } - SqlResultHandler createHandler(Promise resultHandler) { - return new SqlResultHandler<>(factory, resultHandler); + private SqlResultHandler createHandler(Promise promise) { + return new SqlResultHandler<>(factory, promise); } - void execute(CommandScheduler scheduler, - String sql, - boolean autoCommit, - boolean singleton, - SqlResultHandler handler) { - SimpleQueryCommand cmd = new SimpleQueryCommand<>(sql, singleton, autoCommit, collector, handler); - scheduler.schedule(cmd, handler); + void executeSimpleQuery(CommandScheduler scheduler, + String sql, + boolean autoCommit, + boolean singleton, + Promise promise) { + SqlResultHandler handler = createHandler(promise); + scheduler.schedule(new SimpleQueryCommand<>(sql, singleton, autoCommit, collector, handler), handler); } - SqlResultHandler execute(CommandScheduler scheduler, - PreparedStatement preparedStatement, - boolean autoCommit, - Tuple args, - int fetch, - String cursorId, - boolean suspended, - SqlResultHandler handler) { + SqlResultHandler executeExtendedQuery(CommandScheduler scheduler, + PreparedStatement preparedStatement, + boolean autoCommit, + Tuple args, + int fetch, + String cursorId, + boolean suspended, + Promise promise) { + SqlResultHandler handler = createHandler(promise); String msg = preparedStatement.prepare((TupleInternal) args); if (msg != null) { handler.fail(msg); @@ -83,10 +87,22 @@ SqlResultHandler execute(CommandScheduler scheduler, return handler; } - ExtendedQueryCommand createCommand(PreparedStatement preparedStatement, - boolean autoCommit, - Tuple args, - SqlResultHandler handler) { + void executeExtendedQuery(CommandScheduler scheduler, String sql, boolean autoCommit, Tuple arguments, Promise promise) { + SqlResultHandler handler = this.createHandler(promise); + BiCommand cmd = new BiCommand<>(new PrepareStatementCommand(sql, true), ps -> { + String msg = ps.prepare((TupleInternal) arguments); + if (msg != null) { + return Future.failedFuture(msg); + } + return Future.succeededFuture(createExtendedQueryCommand(ps, autoCommit, arguments, handler)); + }); + scheduler.schedule(cmd, handler); + } + + private ExtendedQueryCommand createExtendedQueryCommand(PreparedStatement preparedStatement, + boolean autoCommit, + Tuple args, + SqlResultHandler handler) { return new ExtendedQueryCommand<>( preparedStatement, args, @@ -95,12 +111,12 @@ ExtendedQueryCommand createCommand(PreparedStatement preparedStatement, handler); } - - void executeBatch(CommandScheduler scheduler, - PreparedStatement preparedStatement, - boolean autoCommit, - List argsList, - SqlResultHandler handler) { + void executeBatchQuery(CommandScheduler scheduler, + PreparedStatement preparedStatement, + boolean autoCommit, + List argsList, + Promise promise) { + SqlResultHandler handler = createHandler(promise); for (Tuple args : argsList) { String msg = preparedStatement.prepare((TupleInternal)args); if (msg != null) { @@ -112,10 +128,23 @@ void executeBatch(CommandScheduler scheduler, scheduler.schedule(cmd, handler); } - ExtendedBatchQueryCommand createBatchCommand(PreparedStatement preparedStatement, - boolean autoCommit, - List argsList, - SqlResultHandler handler) { - return new ExtendedBatchQueryCommand<>(preparedStatement, argsList, autoCommit, collector, handler); + void executeBatchQuery(CommandScheduler scheduler, String sql, boolean autoCommit, List batch, Promise promise) { + SqlResultHandler handler = this.createHandler(promise); + BiCommand cmd = new BiCommand<>(new PrepareStatementCommand(sql, true), ps -> { + for (Tuple args : batch) { + String msg = ps.prepare((TupleInternal) args); + if (msg != null) { + return Future.failedFuture(msg); + } + } + return Future.succeededFuture(createBatchQueryCommand(ps, autoCommit, batch, handler)); + }); + scheduler.schedule(cmd, handler); } -} + + private ExtendedBatchQueryCommand createBatchQueryCommand(PreparedStatement preparedStatement, + boolean autoCommit, + List argsList, + SqlResultHandler handler) { + return new ExtendedBatchQueryCommand<>(preparedStatement, argsList, autoCommit, collector, handler); + }} From 624a111d7badfdc61c2d48f0090f49ce06fb5237 Mon Sep 17 00:00:00 2001 From: Julien Viet Date: Fri, 22 May 2020 12:17:59 +0200 Subject: [PATCH 2/7] Initial implementation of SQL client tracing --- .../db2client/impl/DB2ConnectionImpl.java | 12 +- .../io/vertx/db2client/impl/DB2PoolImpl.java | 10 +- .../mssqlclient/impl/MSSQLConnectionImpl.java | 8 +- .../vertx/mssqlclient/impl/MSSQLPoolImpl.java | 10 +- .../mysqlclient/impl/MySQLConnectionImpl.java | 12 +- .../vertx/mysqlclient/impl/MySQLPoolImpl.java | 10 +- .../vertx/pgclient/impl/PgConnectionImpl.java | 8 +- .../io/vertx/pgclient/impl/PgPoolImpl.java | 10 +- .../java/io/vertx/pgclient/TracingTest.java | 185 ++++++++++++++++++ .../io/vertx/sqlclient/impl/CursorImpl.java | 2 +- .../io/vertx/sqlclient/impl/PoolBase.java | 4 +- .../sqlclient/impl/PreparedStatementImpl.java | 11 +- .../io/vertx/sqlclient/impl/QueryBase.java | 4 +- .../vertx/sqlclient/impl/SqlClientBase.java | 11 +- .../sqlclient/impl/SqlConnectionBase.java | 6 +- .../sqlclient/impl/SqlConnectionImpl.java | 5 +- .../sqlclient/impl/SqlResultBuilder.java | 74 +++++-- .../sqlclient/impl/SqlResultHandler.java | 28 ++- .../sqlclient/impl/tracing/QueryRequest.java | 29 +++ .../sqlclient/impl/tracing/SqlTracer.java | 94 +++++++++ 20 files changed, 470 insertions(+), 63 deletions(-) create mode 100644 vertx-pg-client/src/test/java/io/vertx/pgclient/TracingTest.java create mode 100644 vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/tracing/QueryRequest.java create mode 100644 vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/tracing/SqlTracer.java diff --git a/vertx-db2-client/src/main/java/io/vertx/db2client/impl/DB2ConnectionImpl.java b/vertx-db2-client/src/main/java/io/vertx/db2client/impl/DB2ConnectionImpl.java index a24109532..87d03f5ee 100644 --- a/vertx-db2-client/src/main/java/io/vertx/db2client/impl/DB2ConnectionImpl.java +++ b/vertx-db2-client/src/main/java/io/vertx/db2client/impl/DB2ConnectionImpl.java @@ -26,6 +26,7 @@ import io.vertx.db2client.impl.command.PingCommand; import io.vertx.sqlclient.impl.Connection; import io.vertx.sqlclient.impl.SqlConnectionImpl; +import io.vertx.sqlclient.impl.tracing.SqlTracer; public class DB2ConnectionImpl extends SqlConnectionImpl implements DB2Connection { @@ -37,21 +38,22 @@ public static Future connect(Vertx vertx, DB2ConnectOptions optio } catch (Exception e) { return ctx.failedFuture(e); } + SqlTracer tracer = ctx.tracer() == null ? null : new SqlTracer(ctx.tracer(), options); Promise promise = ctx.promise(); - ctx.dispatch(null, v -> connect(client, ctx, promise)); + ctx.dispatch(null, v -> connect(client, ctx, tracer, promise)); return promise.future(); } - private static void connect(DB2ConnectionFactory client, ContextInternal ctx, Promise promise) { + private static void connect(DB2ConnectionFactory client, ContextInternal ctx, SqlTracer tracer, Promise promise) { client.connect().map(conn -> { - DB2ConnectionImpl db2Connection = new DB2ConnectionImpl(client, ctx, conn); + DB2ConnectionImpl db2Connection = new DB2ConnectionImpl(client, ctx, conn, tracer); conn.init(db2Connection); return (DB2Connection) db2Connection; }).onComplete(promise); } - public DB2ConnectionImpl(DB2ConnectionFactory factory, ContextInternal context, Connection conn) { - super(context, conn); + public DB2ConnectionImpl(DB2ConnectionFactory factory, ContextInternal context, Connection conn, SqlTracer tracer) { + super(context, conn, tracer); } @Override diff --git a/vertx-db2-client/src/main/java/io/vertx/db2client/impl/DB2PoolImpl.java b/vertx-db2-client/src/main/java/io/vertx/db2client/impl/DB2PoolImpl.java index ca56a19df..f5b255e5d 100644 --- a/vertx-db2-client/src/main/java/io/vertx/db2client/impl/DB2PoolImpl.java +++ b/vertx-db2-client/src/main/java/io/vertx/db2client/impl/DB2PoolImpl.java @@ -25,12 +25,14 @@ import io.vertx.sqlclient.impl.Connection; import io.vertx.sqlclient.impl.PoolBase; import io.vertx.sqlclient.impl.SqlConnectionImpl; +import io.vertx.sqlclient.impl.tracing.SqlTracer; public class DB2PoolImpl extends PoolBase implements DB2Pool { public static DB2PoolImpl create(ContextInternal context, boolean closeVertx, DB2ConnectOptions connectOptions, PoolOptions poolOptions) { - DB2PoolImpl pool = new DB2PoolImpl(context, poolOptions, new DB2ConnectionFactory(context, connectOptions)); + SqlTracer tracer = context.tracer() == null ? null : new SqlTracer(context.tracer(), connectOptions); + DB2PoolImpl pool = new DB2PoolImpl(context, poolOptions, new DB2ConnectionFactory(context, connectOptions), tracer); CloseFuture closeFuture = pool.closeFuture(); if (closeVertx) { closeFuture.onComplete(ar -> context.owner().close()); @@ -42,8 +44,8 @@ public static DB2PoolImpl create(ContextInternal context, boolean closeVertx, DB private final DB2ConnectionFactory factory; - private DB2PoolImpl(ContextInternal context, PoolOptions poolOptions, DB2ConnectionFactory factory) { - super(context, factory, poolOptions); + private DB2PoolImpl(ContextInternal context, PoolOptions poolOptions, DB2ConnectionFactory factory, SqlTracer tracer) { + super(context, factory, tracer, poolOptions); this.factory = factory; } @@ -55,6 +57,6 @@ public void connect(Handler> completionHandler) { @SuppressWarnings("rawtypes") @Override protected SqlConnectionImpl wrap(ContextInternal context, Connection conn) { - return new DB2ConnectionImpl(factory, context, conn); + return new DB2ConnectionImpl(factory, context, conn, tracer); } } diff --git a/vertx-mssql-client/src/main/java/io/vertx/mssqlclient/impl/MSSQLConnectionImpl.java b/vertx-mssql-client/src/main/java/io/vertx/mssqlclient/impl/MSSQLConnectionImpl.java index 3a29179ce..8fc3cafaa 100644 --- a/vertx-mssql-client/src/main/java/io/vertx/mssqlclient/impl/MSSQLConnectionImpl.java +++ b/vertx-mssql-client/src/main/java/io/vertx/mssqlclient/impl/MSSQLConnectionImpl.java @@ -19,12 +19,13 @@ import io.vertx.core.Vertx; import io.vertx.sqlclient.impl.Connection; import io.vertx.sqlclient.impl.SqlConnectionImpl; +import io.vertx.sqlclient.impl.tracing.SqlTracer; public class MSSQLConnectionImpl extends SqlConnectionImpl implements MSSQLConnection { private final MSSQLConnectionFactory factory; - public MSSQLConnectionImpl(MSSQLConnectionFactory factory, ContextInternal context, Connection conn) { - super(context, conn); + public MSSQLConnectionImpl(MSSQLConnectionFactory factory, ContextInternal context, Connection conn, SqlTracer tracer) { + super(context, conn, tracer); this.factory = factory; } @@ -36,12 +37,13 @@ public int appendQueryPlaceholder(StringBuilder queryBuilder, int index, int cur public static Future connect(Vertx vertx, MSSQLConnectOptions options) { ContextInternal ctx = (ContextInternal) vertx.getOrCreateContext(); + SqlTracer tracer = ctx.tracer() == null ? null : new SqlTracer(ctx.tracer(), options); PromiseInternal promise = ctx.promise(); MSSQLConnectionFactory client = new MSSQLConnectionFactory(ctx, options); ctx.dispatch(null, v -> { client.connect() .map(conn -> { - MSSQLConnectionImpl msConn = new MSSQLConnectionImpl(client, ctx, conn); + MSSQLConnectionImpl msConn = new MSSQLConnectionImpl(client, ctx, conn, tracer); conn.init(msConn); return msConn; }).onComplete(promise); diff --git a/vertx-mssql-client/src/main/java/io/vertx/mssqlclient/impl/MSSQLPoolImpl.java b/vertx-mssql-client/src/main/java/io/vertx/mssqlclient/impl/MSSQLPoolImpl.java index bb441172c..731acd9a1 100644 --- a/vertx-mssql-client/src/main/java/io/vertx/mssqlclient/impl/MSSQLPoolImpl.java +++ b/vertx-mssql-client/src/main/java/io/vertx/mssqlclient/impl/MSSQLPoolImpl.java @@ -23,13 +23,15 @@ import io.vertx.sqlclient.impl.Connection; import io.vertx.sqlclient.impl.PoolBase; import io.vertx.sqlclient.impl.SqlConnectionImpl; +import io.vertx.sqlclient.impl.tracing.SqlTracer; import java.util.function.Function; public class MSSQLPoolImpl extends PoolBase implements MSSQLPool { public static MSSQLPoolImpl create(ContextInternal context, boolean closeVertx, MSSQLConnectOptions connectOptions, PoolOptions poolOptions) { - MSSQLPoolImpl pool = new MSSQLPoolImpl(context, new MSSQLConnectionFactory(context, connectOptions), poolOptions); + SqlTracer tracer = context.tracer() == null ? null : new SqlTracer(context.tracer(), connectOptions); + MSSQLPoolImpl pool = new MSSQLPoolImpl(context, new MSSQLConnectionFactory(context, connectOptions), tracer, poolOptions); CloseFuture closeFuture = pool.closeFuture(); if (closeVertx) { closeFuture.onComplete(ar -> context.owner().close()); @@ -41,8 +43,8 @@ public static MSSQLPoolImpl create(ContextInternal context, boolean closeVertx, private final MSSQLConnectionFactory connectionFactory; - private MSSQLPoolImpl(ContextInternal context, MSSQLConnectionFactory factory, PoolOptions poolOptions) { - super(context, factory, poolOptions); + private MSSQLPoolImpl(ContextInternal context, MSSQLConnectionFactory factory, SqlTracer tracer, PoolOptions poolOptions) { + super(context, factory, tracer, poolOptions); this.connectionFactory = factory; } @@ -59,7 +61,7 @@ public void connect(Handler> completionHandler) { @Override protected SqlConnectionImpl wrap(ContextInternal context, Connection connection) { - return new MSSQLConnectionImpl(connectionFactory, context, connection); + return new MSSQLConnectionImpl(connectionFactory, context, connection, tracer); } @Override diff --git a/vertx-mysql-client/src/main/java/io/vertx/mysqlclient/impl/MySQLConnectionImpl.java b/vertx-mysql-client/src/main/java/io/vertx/mysqlclient/impl/MySQLConnectionImpl.java index acccab6c8..892c0f1eb 100644 --- a/vertx-mysql-client/src/main/java/io/vertx/mysqlclient/impl/MySQLConnectionImpl.java +++ b/vertx-mysql-client/src/main/java/io/vertx/mysqlclient/impl/MySQLConnectionImpl.java @@ -31,6 +31,7 @@ import io.vertx.mysqlclient.impl.command.StatisticsCommand; import io.vertx.sqlclient.impl.Connection; import io.vertx.sqlclient.impl.SqlConnectionImpl; +import io.vertx.sqlclient.impl.tracing.SqlTracer; public class MySQLConnectionImpl extends SqlConnectionImpl implements MySQLConnection { @@ -42,15 +43,16 @@ public static Future connect(Vertx vertx, MySQLConnectOptions o } catch (Exception e) { return ctx.failedFuture(e); } + SqlTracer tracer = ctx.tracer() == null ? null : new SqlTracer(ctx.tracer(), options); Promise promise = ctx.promise(); - ctx.dispatch(null, v -> connect(client, ctx, promise)); + ctx.dispatch(null, v -> connect(client, ctx, tracer, promise)); return promise.future(); } - private static void connect(MySQLConnectionFactory client, ContextInternal ctx, Promise promise) { + private static void connect(MySQLConnectionFactory client, ContextInternal ctx, SqlTracer tracer, Promise promise) { client.connect() .map(conn -> { - MySQLConnectionImpl mySQLConnection = new MySQLConnectionImpl(client, ctx, conn); + MySQLConnectionImpl mySQLConnection = new MySQLConnectionImpl(client, ctx, conn, tracer); conn.init(mySQLConnection); return (MySQLConnection) mySQLConnection; }).onComplete(promise); @@ -58,8 +60,8 @@ private static void connect(MySQLConnectionFactory client, ContextInternal ctx, private final MySQLConnectionFactory factory; - public MySQLConnectionImpl(MySQLConnectionFactory factory, ContextInternal context, Connection conn) { - super(context, conn); + public MySQLConnectionImpl(MySQLConnectionFactory factory, ContextInternal context, Connection conn, SqlTracer tracer) { + super(context, conn, tracer); this.factory = factory; } diff --git a/vertx-mysql-client/src/main/java/io/vertx/mysqlclient/impl/MySQLPoolImpl.java b/vertx-mysql-client/src/main/java/io/vertx/mysqlclient/impl/MySQLPoolImpl.java index b86021a35..0902a4b73 100644 --- a/vertx-mysql-client/src/main/java/io/vertx/mysqlclient/impl/MySQLPoolImpl.java +++ b/vertx-mysql-client/src/main/java/io/vertx/mysqlclient/impl/MySQLPoolImpl.java @@ -21,11 +21,13 @@ import io.vertx.sqlclient.impl.Connection; import io.vertx.sqlclient.impl.PoolBase; import io.vertx.sqlclient.impl.SqlConnectionImpl; +import io.vertx.sqlclient.impl.tracing.SqlTracer; public class MySQLPoolImpl extends PoolBase implements MySQLPool { public static MySQLPoolImpl create(ContextInternal context, boolean closeVertx, MySQLConnectOptions connectOptions, PoolOptions poolOptions) { - MySQLPoolImpl pool = new MySQLPoolImpl(context, new MySQLConnectionFactory(context, connectOptions), poolOptions); + SqlTracer tracer = context.tracer() == null ? null : new SqlTracer(context.tracer(), connectOptions); + MySQLPoolImpl pool = new MySQLPoolImpl(context, new MySQLConnectionFactory(context, connectOptions), tracer, poolOptions); CloseFuture closeFuture = pool.closeFuture(); if (closeVertx) { closeFuture.onComplete(ar -> context.owner().close()); @@ -37,8 +39,8 @@ public static MySQLPoolImpl create(ContextInternal context, boolean closeVertx, private final MySQLConnectionFactory factory; - private MySQLPoolImpl(ContextInternal context, MySQLConnectionFactory factory, PoolOptions poolOptions) { - super(context, factory, poolOptions); + private MySQLPoolImpl(ContextInternal context, MySQLConnectionFactory factory, SqlTracer tracer, PoolOptions poolOptions) { + super(context, factory, tracer, poolOptions); this.factory = factory; } @@ -49,6 +51,6 @@ public void connect(Handler> completionHandler) { @Override protected SqlConnectionImpl wrap(ContextInternal context, Connection conn) { - return new MySQLConnectionImpl(factory, context, conn); + return new MySQLConnectionImpl(factory, context, conn, tracer); } } diff --git a/vertx-pg-client/src/main/java/io/vertx/pgclient/impl/PgConnectionImpl.java b/vertx-pg-client/src/main/java/io/vertx/pgclient/impl/PgConnectionImpl.java index 890fe0e07..7e9d67caf 100644 --- a/vertx-pg-client/src/main/java/io/vertx/pgclient/impl/PgConnectionImpl.java +++ b/vertx-pg-client/src/main/java/io/vertx/pgclient/impl/PgConnectionImpl.java @@ -28,6 +28,7 @@ import io.vertx.core.Future; import io.vertx.core.Handler; import io.vertx.core.Vertx; +import io.vertx.sqlclient.impl.tracing.SqlTracer; public class PgConnectionImpl extends SqlConnectionImpl implements PgConnection { @@ -38,7 +39,8 @@ public static Future connect(ContextInternal context, PgConnectOpt PgConnectionFactory client = new PgConnectionFactory(context.owner(), context, options); return client.connect() .map(conn -> { - PgConnectionImpl pgConn = new PgConnectionImpl(client, context, conn); + SqlTracer tracer = context.tracer() == null ? null : new SqlTracer(context.tracer(), options); + PgConnectionImpl pgConn = new PgConnectionImpl(client, context, conn, tracer); conn.init(pgConn); return pgConn; }); @@ -48,8 +50,8 @@ public static Future connect(ContextInternal context, PgConnectOpt private final PgConnectionFactory factory; private volatile Handler notificationHandler; - PgConnectionImpl(PgConnectionFactory factory, ContextInternal context, Connection conn) { - super(context, conn); + PgConnectionImpl(PgConnectionFactory factory, ContextInternal context, Connection conn, SqlTracer tracer) { + super(context, conn, tracer); this.factory = factory; } diff --git a/vertx-pg-client/src/main/java/io/vertx/pgclient/impl/PgPoolImpl.java b/vertx-pg-client/src/main/java/io/vertx/pgclient/impl/PgPoolImpl.java index 16084d849..419a371c8 100644 --- a/vertx-pg-client/src/main/java/io/vertx/pgclient/impl/PgPoolImpl.java +++ b/vertx-pg-client/src/main/java/io/vertx/pgclient/impl/PgPoolImpl.java @@ -25,6 +25,7 @@ import io.vertx.sqlclient.impl.PoolBase; import io.vertx.sqlclient.impl.SqlConnectionImpl; import io.vertx.core.*; +import io.vertx.sqlclient.impl.tracing.SqlTracer; /** * Todo : @@ -38,7 +39,8 @@ public class PgPoolImpl extends PoolBase implements PgPool { public static PgPoolImpl create(ContextInternal context, boolean closeVertx, PgConnectOptions connectOptions, PoolOptions poolOptions) { - PgPoolImpl pool = new PgPoolImpl(context, new PgConnectionFactory(context.owner(), context, connectOptions), poolOptions); + SqlTracer tracer = context.tracer() == null ? null : new SqlTracer(context.tracer(), connectOptions); + PgPoolImpl pool = new PgPoolImpl(context, new PgConnectionFactory(context.owner(), context, connectOptions), tracer, poolOptions); CloseFuture closeFuture = pool.closeFuture(); if (closeVertx) { closeFuture.onComplete(ar -> context.owner().close()); @@ -50,8 +52,8 @@ public static PgPoolImpl create(ContextInternal context, boolean closeVertx, PgC private final PgConnectionFactory factory; - private PgPoolImpl(ContextInternal context, PgConnectionFactory factory, PoolOptions poolOptions) { - super(context, factory, poolOptions); + private PgPoolImpl(ContextInternal context, PgConnectionFactory factory, SqlTracer tracer, PoolOptions poolOptions) { + super(context, factory, tracer, poolOptions); this.factory = factory; } @@ -68,6 +70,6 @@ public void connect(Handler> completionHandler) { @Override protected SqlConnectionImpl wrap(ContextInternal context, Connection conn) { - return new PgConnectionImpl(factory, context, conn); + return new PgConnectionImpl(factory, context, conn, tracer); } } diff --git a/vertx-pg-client/src/test/java/io/vertx/pgclient/TracingTest.java b/vertx-pg-client/src/test/java/io/vertx/pgclient/TracingTest.java new file mode 100644 index 000000000..b5ec4d276 --- /dev/null +++ b/vertx-pg-client/src/test/java/io/vertx/pgclient/TracingTest.java @@ -0,0 +1,185 @@ +package io.vertx.pgclient; + +import io.vertx.core.Context; +import io.vertx.core.Future; +import io.vertx.core.Vertx; +import io.vertx.core.VertxOptions; +import io.vertx.core.spi.VertxTracerFactory; +import io.vertx.core.spi.tracing.TagExtractor; +import io.vertx.core.spi.tracing.VertxTracer; +import io.vertx.core.tracing.TracingOptions; +import io.vertx.ext.unit.Async; +import io.vertx.ext.unit.TestContext; +import io.vertx.sqlclient.PoolOptions; +import io.vertx.sqlclient.RowSet; +import io.vertx.sqlclient.SqlClient; +import io.vertx.sqlclient.Tuple; +import io.vertx.sqlclient.impl.tracing.QueryRequest; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicReference; +import java.util.function.BiConsumer; +import java.util.function.Function; + +public class TracingTest extends PgTestBase { + + Vertx vertx; + VertxTracer tracer; + PgPool pool; + + @Before + public void setup() throws Exception { + super.setup(); + vertx = Vertx.vertx(new VertxOptions().setTracingOptions( + new TracingOptions().setEnabled(true).setFactory(tracingOptions -> new VertxTracer() { + @Override + public Object sendRequest(Context context, Object request, String operation, BiConsumer headers, TagExtractor tagExtractor) { + return tracer.sendRequest(context, request, operation, headers, tagExtractor); + } + + @Override + public void receiveResponse(Context context, Object response, Object payload, Throwable failure, TagExtractor tagExtractor) { + tracer.receiveResponse(context, response, payload, failure, tagExtractor); + } + })) + ); + pool = PgPool.pool(vertx, options, new PoolOptions()); + } + + @After + public void teardown(TestContext ctx) { + vertx.close(ctx.asyncAssertSuccess()); + } + + @Test + public void testTraceSimpleQuery(TestContext ctx) { + String sql = "SELECT * FROM Fortune WHERE id=1"; + testTraceQuery(ctx, sql, Collections.emptyList(), conn -> conn.query(sql).execute()); + } + + @Test + public void testTracePreparedQuery(TestContext ctx) { + String sql = "SELECT * FROM Fortune WHERE id=$1"; + Tuple tuple = Tuple.of(1); + testTraceQuery(ctx, sql, Collections.singletonList(tuple), conn -> conn.preparedQuery(sql).execute(tuple)); + } + + @Test + public void testTraceBatchQuery(TestContext ctx) { + String sql = "SELECT * FROM Fortune WHERE id=$1"; + List tuples = Arrays.asList(Tuple.of(1), Tuple.of(2)); + testTraceQuery(ctx, sql, tuples, conn -> conn.preparedQuery(sql).executeBatch(tuples)); + } + + public void testTraceQuery(TestContext ctx, String expectedSql, List expectedTuples, Function> fn) { + AtomicBoolean called = new AtomicBoolean(); + AtomicReference requestContext = new AtomicReference<>(); + AtomicReference responseContext = new AtomicReference<>(); + Object expectedPayload = new Object(); + tracer = new VertxTracer() { + @Override + public Object sendRequest(Context context, R request, String operation, BiConsumer headers, TagExtractor tagExtractor) { + QueryRequest query = (QueryRequest) request; + ctx.assertEquals(query.sql(), expectedSql); + ctx.assertEquals(query.tuples(), expectedTuples); + Map tags = tagExtractor.extract(request); + ctx.assertEquals("client", tags.get("span.kind")); + ctx.assertEquals("sql", tags.get("db.type")); + ctx.assertEquals(expectedSql, tags.get("db.statement")); + requestContext.set(context); + return expectedPayload; + } + @Override + public void receiveResponse(Context context, R response, Object payload, Throwable failure, TagExtractor tagExtractor) { + RowSet rs = (RowSet) response; + ctx.assertTrue(rs.iterator().hasNext()); + ctx.assertEquals(payload, expectedPayload); + ctx.assertNull(failure); + called.set(true); + responseContext.set(context); + } + }; + Async async = ctx.async(); + vertx.runOnContext(v1 -> { + Context context = Vertx.currentContext(); + pool.getConnection(ctx.asyncAssertSuccess(conn -> { + fn.apply(conn).onComplete(ctx.asyncAssertSuccess(v2 -> { + conn.close(ctx.asyncAssertSuccess(v3 -> { + vertx.runOnContext(v4 -> { + ctx.assertEquals(context, requestContext.get()); + ctx.assertEquals(context, responseContext.get()); + ctx.assertTrue(called.get()); + async.complete(); + }); + })); + })); + })); + }); + } + + @Test + public void testTracingFailure(TestContext ctx) { + AtomicBoolean called = new AtomicBoolean(); + tracer = new VertxTracer() { + @Override + public Object sendRequest(Context context, R request, String operation, BiConsumer headers, TagExtractor tagExtractor) { + return null; + } + @Override + public void receiveResponse(Context context, R response, Object payload, Throwable failure, TagExtractor tagExtractor) { + ctx.assertNull(response); + ctx.assertNotNull(failure); + called.set(true); + } + }; + pool.getConnection(ctx.asyncAssertSuccess(conn -> { + conn + .preparedQuery("SELECT 1 / $1") + .execute(Tuple.of(0), ctx.asyncAssertFailure(err -> { + ctx.assertTrue(called.get()); + conn.close(); + })); + })); + } + + @Test + public void testMappingFailure(TestContext ctx) { + RuntimeException failure = new RuntimeException(); + AtomicInteger called = new AtomicInteger(); + String sql = "SELECT * FROM Fortune WHERE id=$1"; + tracer = new VertxTracer() { + @Override + public Object sendRequest(Context context, R request, String operation, BiConsumer headers, TagExtractor tagExtractor) { + return null; + } + @Override + public void receiveResponse(Context context, R response, Object payload, Throwable failure, TagExtractor tagExtractor) { + ctx.assertEquals(1, called.incrementAndGet()); + } + }; + Async async = ctx.async(); + pool.getConnection(ctx.asyncAssertSuccess(conn -> { + conn + .preparedQuery(sql) + .mapping(row -> { + throw failure; + }) + .execute(Tuple.of(1), ctx.asyncAssertFailure(err -> { + conn.close(ctx.asyncAssertSuccess(v1 -> { + vertx.runOnContext(v2 -> { + ctx.assertEquals(1, called.get()); + async.complete(); + }); + })); + })); + })); + } +} diff --git a/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/CursorImpl.java b/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/CursorImpl.java index c4f62c1aa..cede084f0 100644 --- a/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/CursorImpl.java +++ b/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/CursorImpl.java @@ -66,7 +66,7 @@ public void read(int count, Handler>> handler) { @Override public synchronized Future> read(int count) { Promise> promise = context.promise(); - SqlResultBuilder, RowSetImpl, RowSet> builder = new SqlResultBuilder<>(RowSetImpl.FACTORY, RowSetImpl.COLLECTOR); + SqlResultBuilder, RowSetImpl, RowSet> builder = new SqlResultBuilder<>(ps.tracer, RowSetImpl.FACTORY, RowSetImpl.COLLECTOR); if (id == null) { id = UUID.randomUUID().toString(); result = builder.executeExtendedQuery(ps.conn, ps.ps, ps.autoCommit, params, count, id, false, promise); diff --git a/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/PoolBase.java b/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/PoolBase.java index e9dfff005..9dacb3443 100644 --- a/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/PoolBase.java +++ b/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/PoolBase.java @@ -31,6 +31,7 @@ import io.vertx.core.Future; import io.vertx.core.Handler; import io.vertx.sqlclient.impl.pool.ConnectionPool; +import io.vertx.sqlclient.impl.tracing.SqlTracer; import java.util.function.Function; @@ -45,7 +46,8 @@ public abstract class PoolBase

extends SqlClientBase

implemen private final ConnectionPool pool; private final CloseFuture closeFuture; - public PoolBase(ContextInternal context, ConnectionFactory factory, PoolOptions poolOptions) { + public PoolBase(ContextInternal context, ConnectionFactory factory, SqlTracer tracer, PoolOptions poolOptions) { + super(tracer); this.vertx = context.owner(); this.factory = factory; this.pool = new ConnectionPool(factory, context, poolOptions.getMaxSize(), poolOptions.getMaxWaitQueueSize()); diff --git a/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/PreparedStatementImpl.java b/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/PreparedStatementImpl.java index c379072a2..7e8d96d76 100644 --- a/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/PreparedStatementImpl.java +++ b/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/PreparedStatementImpl.java @@ -29,6 +29,7 @@ import io.vertx.sqlclient.Row; import io.vertx.sqlclient.Tuple; import io.vertx.core.*; +import io.vertx.sqlclient.impl.tracing.SqlTracer; import java.util.List; import java.util.concurrent.atomic.AtomicBoolean; @@ -40,18 +41,20 @@ */ class PreparedStatementImpl implements PreparedStatement { - static PreparedStatement create(Connection conn, ContextInternal context, io.vertx.sqlclient.impl.PreparedStatement ps, boolean autoCommit) { - return new PreparedStatementImpl(conn, context, ps, autoCommit); + static PreparedStatement create(Connection conn, SqlTracer tracer, ContextInternal context, io.vertx.sqlclient.impl.PreparedStatement ps, boolean autoCommit) { + return new PreparedStatementImpl(conn, tracer, context, ps, autoCommit); } final Connection conn; + final SqlTracer tracer; final ContextInternal context; final io.vertx.sqlclient.impl.PreparedStatement ps; final boolean autoCommit; private final AtomicBoolean closed = new AtomicBoolean(); - private PreparedStatementImpl(Connection conn, ContextInternal context, io.vertx.sqlclient.impl.PreparedStatement ps, boolean autoCommit) { + private PreparedStatementImpl(Connection conn, SqlTracer tracer, ContextInternal context, io.vertx.sqlclient.impl.PreparedStatement ps, boolean autoCommit) { this.conn = conn; + this.tracer = tracer; this.context = context; this.ps = ps; this.autoCommit = autoCommit; @@ -59,7 +62,7 @@ private PreparedStatementImpl(Connection conn, ContextInternal context, io.vertx @Override public PreparedQuery> query() { - SqlResultBuilder, RowSetImpl, RowSet> builder = new SqlResultBuilder<>(RowSetImpl.FACTORY, RowSetImpl.COLLECTOR); + SqlResultBuilder, RowSetImpl, RowSet> builder = new SqlResultBuilder<>(tracer, RowSetImpl.FACTORY, RowSetImpl.COLLECTOR); return new PreparedStatementQuery<>(builder); } diff --git a/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/QueryBase.java b/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/QueryBase.java index 7575e261b..bf1af0409 100644 --- a/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/QueryBase.java +++ b/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/QueryBase.java @@ -42,12 +42,12 @@ public QueryBase(SqlResultBuilder builder) { @Override public Query> collecting(Collector collector) { Objects.requireNonNull(collector, "Supplied collector must not be null"); - return copy(new SqlResultBuilder<>(SqlResultImpl::new, collector)); + return copy(new SqlResultBuilder<>(builder.tracer(), SqlResultImpl::new, collector)); } @Override public Query> mapping(Function mapper) { Objects.requireNonNull(mapper, "Supplied mapper must not be null"); - return copy(new SqlResultBuilder<>(RowSetImpl.factory(), RowSetImpl.collector(mapper))); + return copy(new SqlResultBuilder<>(builder.tracer(), RowSetImpl.factory(), RowSetImpl.collector(mapper))); } } diff --git a/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/SqlClientBase.java b/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/SqlClientBase.java index e7294b62c..c821b5784 100644 --- a/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/SqlClientBase.java +++ b/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/SqlClientBase.java @@ -29,6 +29,7 @@ import io.vertx.core.AsyncResult; import io.vertx.core.Future; import io.vertx.core.Handler; +import io.vertx.sqlclient.impl.tracing.SqlTracer; import java.util.List; import java.util.function.Function; @@ -36,6 +37,12 @@ public abstract class SqlClientBase implements SqlClientInternal, CommandScheduler { + protected final SqlTracer tracer; + + public SqlClientBase(SqlTracer tracer) { + this.tracer = tracer; + } + @Override public int appendQueryPlaceholder(StringBuilder queryBuilder, int index, int current) { queryBuilder.append("?"); @@ -48,13 +55,13 @@ public int appendQueryPlaceholder(StringBuilder queryBuilder, int index, int cur @Override public Query> query(String sql) { - SqlResultBuilder, RowSetImpl, RowSet> builder = new SqlResultBuilder<>(RowSetImpl.FACTORY, RowSetImpl.COLLECTOR); + SqlResultBuilder, RowSetImpl, RowSet> builder = new SqlResultBuilder<>(tracer, RowSetImpl.FACTORY, RowSetImpl.COLLECTOR); return new QueryImpl<>(autoCommit(), false, sql, builder); } @Override public PreparedQuery> preparedQuery(String sql) { - SqlResultBuilder, RowSetImpl, RowSet> builder = new SqlResultBuilder<>(RowSetImpl.FACTORY, RowSetImpl.COLLECTOR); + SqlResultBuilder, RowSetImpl, RowSet> builder = new SqlResultBuilder<>(tracer, RowSetImpl.FACTORY, RowSetImpl.COLLECTOR); return new PreparedQueryImpl<>(autoCommit(), false, sql, builder); } diff --git a/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/SqlConnectionBase.java b/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/SqlConnectionBase.java index 4961d00ce..e7916c296 100644 --- a/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/SqlConnectionBase.java +++ b/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/SqlConnectionBase.java @@ -22,6 +22,7 @@ import io.vertx.sqlclient.SqlClient; import io.vertx.sqlclient.impl.command.PrepareStatementCommand; import io.vertx.core.*; +import io.vertx.sqlclient.impl.tracing.SqlTracer; /** * @author Julien Viet @@ -31,7 +32,8 @@ public abstract class SqlConnectionBase extends SqlClientBa protected final ContextInternal context; protected final Connection conn; - protected SqlConnectionBase(ContextInternal context, Connection conn) { + protected SqlConnectionBase(ContextInternal context, Connection conn, SqlTracer tracer) { + super(tracer); this.context = context; this.conn = conn; } @@ -47,6 +49,6 @@ public C prepare(String sql, Handler> handler) { public Future prepare(String sql) { Promise promise = promise(); schedule(new PrepareStatementCommand(sql, false), promise); - return promise.future().map(cr -> PreparedStatementImpl.create(conn, context, cr, autoCommit())); + return promise.future().map(cr -> PreparedStatementImpl.create(conn, tracer, context, cr, autoCommit())); } } diff --git a/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/SqlConnectionImpl.java b/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/SqlConnectionImpl.java index d232c3ea4..e4ed9e874 100644 --- a/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/SqlConnectionImpl.java +++ b/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/SqlConnectionImpl.java @@ -22,6 +22,7 @@ import io.vertx.sqlclient.impl.command.CommandBase; import io.vertx.sqlclient.Transaction; import io.vertx.core.*; +import io.vertx.sqlclient.impl.tracing.SqlTracer; /** * @author Julien Viet @@ -32,8 +33,8 @@ public class SqlConnectionImpl extends SqlConnectionBas private volatile Handler closeHandler; private TransactionImpl tx; - public SqlConnectionImpl(ContextInternal context, Connection conn) { - super(context, conn); + public SqlConnectionImpl(ContextInternal context, Connection conn, SqlTracer tracer) { + super(context, conn, tracer); } @Override diff --git a/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/SqlResultBuilder.java b/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/SqlResultBuilder.java index 526127e83..45de26325 100644 --- a/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/SqlResultBuilder.java +++ b/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/SqlResultBuilder.java @@ -19,6 +19,7 @@ import io.vertx.core.Future; import io.vertx.core.Promise; +import io.vertx.core.impl.ContextInternal; import io.vertx.sqlclient.Row; import io.vertx.sqlclient.SqlResult; import io.vertx.sqlclient.Tuple; @@ -28,6 +29,7 @@ import io.vertx.sqlclient.impl.command.ExtendedQueryCommand; import io.vertx.sqlclient.impl.command.PrepareStatementCommand; import io.vertx.sqlclient.impl.command.SimpleQueryCommand; +import io.vertx.sqlclient.impl.tracing.SqlTracer; import java.util.List; import java.util.function.Function; @@ -38,17 +40,28 @@ */ class SqlResultBuilder, L extends SqlResult> { + private final SqlTracer tracer; private final Function factory; private final Collector collector; - public SqlResultBuilder(Function factory, + public SqlResultBuilder(SqlTracer tracer, + Function factory, Collector collector) { + this.tracer = tracer; this.factory = factory; this.collector = collector; } + SqlTracer tracer() { + return tracer; + } + private SqlResultHandler createHandler(Promise promise) { - return new SqlResultHandler<>(factory, promise); + return new SqlResultHandler<>(factory, null, null, promise); + } + + private SqlResultHandler createHandler(Promise promise, Object payload) { + return new SqlResultHandler<>(factory, tracer, payload, promise); } void executeSimpleQuery(CommandScheduler scheduler, @@ -56,27 +69,41 @@ void executeSimpleQuery(CommandScheduler scheduler, boolean autoCommit, boolean singleton, Promise promise) { - SqlResultHandler handler = createHandler(promise); + ContextInternal context = (ContextInternal) promise.future().context(); + Object payload; + if (tracer != null) { + payload = tracer.sendRequest(context, sql); + } else { + payload = null; + } + SqlResultHandler handler = createHandler(promise, payload); scheduler.schedule(new SimpleQueryCommand<>(sql, singleton, autoCommit, collector, handler), handler); } SqlResultHandler executeExtendedQuery(CommandScheduler scheduler, PreparedStatement preparedStatement, boolean autoCommit, - Tuple args, + Tuple arguments, int fetch, String cursorId, boolean suspended, Promise promise) { - SqlResultHandler handler = createHandler(promise); - String msg = preparedStatement.prepare((TupleInternal) args); + ContextInternal context = (ContextInternal) promise.future().context(); + Object payload; + if (tracer != null) { + payload = tracer.sendRequest(context, preparedStatement.sql(), arguments); + } else { + payload = null; + } + SqlResultHandler handler = createHandler(promise, payload); + String msg = preparedStatement.prepare((TupleInternal) arguments); if (msg != null) { handler.fail(msg); return null; } ExtendedQueryCommand cmd = new ExtendedQueryCommand<>( preparedStatement, - args, + arguments, fetch, cursorId, suspended, @@ -88,7 +115,14 @@ SqlResultHandler executeExtendedQuery(CommandScheduler scheduler, } void executeExtendedQuery(CommandScheduler scheduler, String sql, boolean autoCommit, Tuple arguments, Promise promise) { - SqlResultHandler handler = this.createHandler(promise); + ContextInternal context = (ContextInternal) promise.future().context(); + Object payload; + if (tracer != null) { + payload = tracer.sendRequest(context, sql, arguments); + } else { + payload = null; + } + SqlResultHandler handler = this.createHandler(promise, payload); BiCommand cmd = new BiCommand<>(new PrepareStatementCommand(sql, true), ps -> { String msg = ps.prepare((TupleInternal) arguments); if (msg != null) { @@ -114,22 +148,36 @@ private ExtendedQueryCommand createExtendedQueryCommand(PreparedStatement pre void executeBatchQuery(CommandScheduler scheduler, PreparedStatement preparedStatement, boolean autoCommit, - List argsList, + List batch, Promise promise) { - SqlResultHandler handler = createHandler(promise); - for (Tuple args : argsList) { + ContextInternal context = (ContextInternal) promise.future().context(); + Object payload; + if (tracer != null) { + payload = tracer.sendRequest(context, preparedStatement.sql(), batch); + } else { + payload = null; + } + SqlResultHandler handler = createHandler(promise, payload); + for (Tuple args : batch) { String msg = preparedStatement.prepare((TupleInternal)args); if (msg != null) { handler.fail(msg); return; } } - ExtendedBatchQueryCommand cmd = new ExtendedBatchQueryCommand<>(preparedStatement, argsList, autoCommit, collector, handler); + ExtendedBatchQueryCommand cmd = new ExtendedBatchQueryCommand<>(preparedStatement, batch, autoCommit, collector, handler); scheduler.schedule(cmd, handler); } void executeBatchQuery(CommandScheduler scheduler, String sql, boolean autoCommit, List batch, Promise promise) { - SqlResultHandler handler = this.createHandler(promise); + ContextInternal context = (ContextInternal) promise.future().context(); + Object payload; + if (tracer != null) { + payload = tracer.sendRequest(context, sql, batch); + } else { + payload = null; + } + SqlResultHandler handler = this.createHandler(promise, payload); BiCommand cmd = new BiCommand<>(new PrepareStatementCommand(sql, true), ps -> { for (Tuple args : batch) { String msg = ps.prepare((TupleInternal) args); diff --git a/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/SqlResultHandler.java b/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/SqlResultHandler.java index 62aaedf9e..3d2605629 100644 --- a/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/SqlResultHandler.java +++ b/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/SqlResultHandler.java @@ -19,8 +19,10 @@ import io.vertx.core.Future; import io.vertx.core.Promise; +import io.vertx.core.impl.ContextInternal; import io.vertx.sqlclient.SqlResult; import io.vertx.sqlclient.PropertyKind; +import io.vertx.sqlclient.impl.tracing.SqlTracer; import java.util.HashMap; import java.util.function.Function; @@ -32,13 +34,19 @@ class SqlResultHandler, L extends SqlResult> im private final Promise handler; private final Function factory; + private final ContextInternal context; + private final SqlTracer tracer; + private final Object tracingPayload; private R first; private R current; private Throwable failure; private boolean suspended; - SqlResultHandler(Function factory, Promise handler) { + SqlResultHandler(Function factory, SqlTracer tracer, Object tracingPayload, Promise handler) { this.factory = factory; + this.context = (ContextInternal) handler.future().context(); + this.tracer = tracer; + this.tracingPayload = tracingPayload; this.handler = handler; } @@ -82,15 +90,27 @@ public void addProperty(PropertyKind property, V value) { public boolean tryComplete(Boolean result) { suspended = result; if (failure != null) { - return handler.tryFail(failure); + return tryFail(failure); } else { - return handler.tryComplete((L) first); + boolean completed = handler.tryComplete((L) first); + if (completed) { + if (tracer != null) { + tracer.receiveResponse(context, tracingPayload, first, null); + } + } + return completed; } } @Override public boolean tryFail(Throwable cause) { - return handler.tryFail(cause); + boolean completed = handler.tryFail(cause); + if (completed) { + if (tracer != null) { + tracer.receiveResponse(context, tracingPayload, null, cause); + } + } + return completed; } @Override diff --git a/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/tracing/QueryRequest.java b/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/tracing/QueryRequest.java new file mode 100644 index 000000000..01c5541df --- /dev/null +++ b/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/tracing/QueryRequest.java @@ -0,0 +1,29 @@ +package io.vertx.sqlclient.impl.tracing; + +import io.vertx.sqlclient.Tuple; + +import java.util.List; + +/** + * A traceable query. + */ +public class QueryRequest { + + final SqlTracer tracer; + final String sql; + final List tuples; + + public QueryRequest(SqlTracer tracer, String sql, List tuples) { + this.tracer = tracer; + this.sql = sql; + this.tuples = tuples; + } + + public String sql() { + return sql; + } + + public List tuples() { + return tuples; + } +} diff --git a/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/tracing/SqlTracer.java b/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/tracing/SqlTracer.java new file mode 100644 index 000000000..794ad18f6 --- /dev/null +++ b/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/tracing/SqlTracer.java @@ -0,0 +1,94 @@ +package io.vertx.sqlclient.impl.tracing; + +import io.vertx.core.impl.ContextInternal; +import io.vertx.core.spi.tracing.TagExtractor; +import io.vertx.core.spi.tracing.VertxTracer; +import io.vertx.sqlclient.SqlConnectOptions; +import io.vertx.sqlclient.Tuple; + +import java.util.Collections; +import java.util.List; +import java.util.function.Function; + +/** + * Tracer for SQL client, wrapping the generic tracer. + */ +public class SqlTracer { + + enum RequestTags { + + // Generic + PEER_ADDRESS("peer.address", q -> q.tracer.address), + PEER_SERVICE("peer.service", q -> "todo"), + SPAN_KIND("span.kind", q -> "client"), + + // DB + // See https://github.com/open-telemetry/opentelemetry-specification/blob/master/specification/trace/semantic_conventions/database.md + + DB_USER("db.user", q -> q.tracer.user), + DB_INSTANCE("db.instance", q -> q.tracer.database), + DB_STATEMENT("db.statement", QueryRequest::sql), + DB_TYPE("db.type", q -> "sql"); + + final String name; + final Function fn; + + RequestTags(String name, Function fn) { + this.name = name; + this.fn = fn; + } + } + + private static final TagExtractor REQUEST_TAG_EXTRACTOR = new TagExtractor() { + + private final RequestTags[] TAGS = RequestTags.values(); + + @Override + public int len(QueryRequest obj) { + return TAGS.length; + } + @Override + public String name(QueryRequest obj, int index) { + return TAGS[index].name; + } + @Override + public String value(QueryRequest obj, int index) { + return TAGS[index].fn.apply(obj); + } + }; + + private final VertxTracer tracer; + private final String address; + private final String host; + private final int port; + private final String user; + private final String database; + + public SqlTracer(VertxTracer tracer, SqlConnectOptions options) { + this.tracer = tracer; + this.address = options.getHost() + ":" + options.getPort(); + this.host = options.getHost(); + this.port = options.getPort(); + this.user = options.getUser(); + this.database = options.getDatabase(); + } + + public Object sendRequest(ContextInternal context, String sql) { + QueryRequest request = new QueryRequest(this, sql, Collections.emptyList()); + return tracer.sendRequest(context, request, "Query", (k,v) -> {}, REQUEST_TAG_EXTRACTOR); + } + + public Object sendRequest(ContextInternal context, String sql, Tuple tuple) { + QueryRequest request = new QueryRequest(this, sql, Collections.singletonList(tuple)); + return tracer.sendRequest(context, request, "Query", (k,v) -> {}, REQUEST_TAG_EXTRACTOR); + } + + public Object sendRequest(ContextInternal context, String sql, List tuples) { + QueryRequest request = new QueryRequest(this, sql, tuples); + return tracer.sendRequest(context, request, "Query", (k,v) -> {}, REQUEST_TAG_EXTRACTOR); + } + + public void receiveResponse(ContextInternal context, Object payload, Object result, Throwable failure) { + tracer.receiveResponse(context, result, payload, failure, TagExtractor.empty()); + } +} From 680b3291f4337a589877766b214b7348049fccb5 Mon Sep 17 00:00:00 2001 From: Julien Viet Date: Fri, 22 May 2020 13:38:53 +0200 Subject: [PATCH 3/7] Minor --- .../main/java/io/vertx/sqlclient/impl/tracing/SqlTracer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/tracing/SqlTracer.java b/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/tracing/SqlTracer.java index 794ad18f6..11f098caf 100644 --- a/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/tracing/SqlTracer.java +++ b/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/tracing/SqlTracer.java @@ -23,7 +23,7 @@ enum RequestTags { SPAN_KIND("span.kind", q -> "client"), // DB - // See https://github.com/open-telemetry/opentelemetry-specification/blob/master/specification/trace/semantic_conventions/database.md + // See https://github.com/opentracing/specification/blob/master/semantic_conventions.md DB_USER("db.user", q -> q.tracer.user), DB_INSTANCE("db.instance", q -> q.tracer.database), From 899deeafc3869268e20d3324020f853337352ea8 Mon Sep 17 00:00:00 2001 From: Julien Viet Date: Sat, 23 May 2020 11:28:06 +0200 Subject: [PATCH 4/7] Remove peer.service that does not make any sense here --- .../src/main/java/io/vertx/sqlclient/impl/tracing/SqlTracer.java | 1 - 1 file changed, 1 deletion(-) diff --git a/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/tracing/SqlTracer.java b/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/tracing/SqlTracer.java index 11f098caf..5ffa31fb7 100644 --- a/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/tracing/SqlTracer.java +++ b/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/tracing/SqlTracer.java @@ -19,7 +19,6 @@ enum RequestTags { // Generic PEER_ADDRESS("peer.address", q -> q.tracer.address), - PEER_SERVICE("peer.service", q -> "todo"), SPAN_KIND("span.kind", q -> "client"), // DB From c950b72051d734d1aab730042afd315f7d9ad093 Mon Sep 17 00:00:00 2001 From: Julien Viet Date: Sat, 23 May 2020 11:29:55 +0200 Subject: [PATCH 5/7] Revert some assertEquals operands to get correct failure reporting --- .../src/test/java/io/vertx/pgclient/TracingTest.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/vertx-pg-client/src/test/java/io/vertx/pgclient/TracingTest.java b/vertx-pg-client/src/test/java/io/vertx/pgclient/TracingTest.java index b5ec4d276..3321b48a2 100644 --- a/vertx-pg-client/src/test/java/io/vertx/pgclient/TracingTest.java +++ b/vertx-pg-client/src/test/java/io/vertx/pgclient/TracingTest.java @@ -88,8 +88,8 @@ public void testTraceQuery(TestContext ctx, String expectedSql, List expe @Override public Object sendRequest(Context context, R request, String operation, BiConsumer headers, TagExtractor tagExtractor) { QueryRequest query = (QueryRequest) request; - ctx.assertEquals(query.sql(), expectedSql); - ctx.assertEquals(query.tuples(), expectedTuples); + ctx.assertEquals(expectedSql, query.sql()); + ctx.assertEquals(expectedTuples, query.tuples()); Map tags = tagExtractor.extract(request); ctx.assertEquals("client", tags.get("span.kind")); ctx.assertEquals("sql", tags.get("db.type")); @@ -101,7 +101,7 @@ public Object sendRequest(Context context, R request, String operation, BiCo public void receiveResponse(Context context, R response, Object payload, Throwable failure, TagExtractor tagExtractor) { RowSet rs = (RowSet) response; ctx.assertTrue(rs.iterator().hasNext()); - ctx.assertEquals(payload, expectedPayload); + ctx.assertEquals(expectedPayload, payload); ctx.assertNull(failure); called.set(true); responseContext.set(context); From ada9240b11eaa58407f8a56450f669c47e6b246e Mon Sep 17 00:00:00 2001 From: Julien Viet Date: Sat, 23 May 2020 11:36:09 +0200 Subject: [PATCH 6/7] A few internal renaming --- .../io/vertx/sqlclient/impl/CursorImpl.java | 4 +- .../sqlclient/impl/PreparedStatementImpl.java | 10 ++-- .../io/vertx/sqlclient/impl/QueryBase.java | 10 ++-- ...lResultBuilder.java => QueryExecutor.java} | 51 +++++++++---------- ...ltHandler.java => QueryResultBuilder.java} | 6 +-- .../vertx/sqlclient/impl/SqlClientBase.java | 12 ++--- 6 files changed, 45 insertions(+), 48 deletions(-) rename vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/{SqlResultBuilder.java => QueryExecutor.java} (77%) rename vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/{SqlResultHandler.java => QueryResultBuilder.java} (91%) diff --git a/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/CursorImpl.java b/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/CursorImpl.java index cede084f0..a52c65c43 100644 --- a/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/CursorImpl.java +++ b/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/CursorImpl.java @@ -39,7 +39,7 @@ public class CursorImpl implements Cursor { private String id; private boolean closed; - private SqlResultHandler, RowSetImpl, RowSet> result; + private QueryResultBuilder, RowSetImpl, RowSet> result; CursorImpl(PreparedStatementImpl ps, ContextInternal context, TupleInternal params) { this.ps = ps; @@ -66,7 +66,7 @@ public void read(int count, Handler>> handler) { @Override public synchronized Future> read(int count) { Promise> promise = context.promise(); - SqlResultBuilder, RowSetImpl, RowSet> builder = new SqlResultBuilder<>(ps.tracer, RowSetImpl.FACTORY, RowSetImpl.COLLECTOR); + QueryExecutor, RowSetImpl, RowSet> builder = new QueryExecutor<>(ps.tracer, RowSetImpl.FACTORY, RowSetImpl.COLLECTOR); if (id == null) { id = UUID.randomUUID().toString(); result = builder.executeExtendedQuery(ps.conn, ps.ps, ps.autoCommit, params, count, id, false, promise); diff --git a/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/PreparedStatementImpl.java b/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/PreparedStatementImpl.java index 7e8d96d76..4e1c70461 100644 --- a/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/PreparedStatementImpl.java +++ b/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/PreparedStatementImpl.java @@ -62,7 +62,7 @@ private PreparedStatementImpl(Connection conn, SqlTracer tracer, ContextInternal @Override public PreparedQuery> query() { - SqlResultBuilder, RowSetImpl, RowSet> builder = new SqlResultBuilder<>(tracer, RowSetImpl.FACTORY, RowSetImpl.COLLECTOR); + QueryExecutor, RowSetImpl, RowSet> builder = new QueryExecutor<>(tracer, RowSetImpl.FACTORY, RowSetImpl.COLLECTOR); return new PreparedStatementQuery<>(builder); } @@ -70,7 +70,7 @@ > void execute(Tuple args, int fetch, String cursorId, boolean suspended, - SqlResultBuilder builder, + QueryExecutor builder, Promise p) { if (context == Vertx.currentContext()) { builder.executeExtendedQuery( @@ -113,7 +113,7 @@ public Future close() { } > void executeBatch(List argsList, - SqlResultBuilder builder, + QueryExecutor builder, Promise p) { if (context == Vertx.currentContext()) { builder.executeBatchQuery(conn, ps, autoCommit, argsList, p); @@ -142,12 +142,12 @@ void closeCursor(String cursorId, Promise promise) { private class PreparedStatementQuery> extends QueryBase implements PreparedQuery { - public PreparedStatementQuery(SqlResultBuilder builder) { + public PreparedStatementQuery(QueryExecutor builder) { super(builder); } @Override - protected > QueryBase copy(SqlResultBuilder builder) { + protected > QueryBase copy(QueryExecutor builder) { return new PreparedStatementQuery<>(builder); } diff --git a/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/QueryBase.java b/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/QueryBase.java index bf1af0409..3dd75d554 100644 --- a/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/QueryBase.java +++ b/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/QueryBase.java @@ -31,23 +31,23 @@ */ abstract class QueryBase> implements Query { - protected final SqlResultBuilder builder; + protected final QueryExecutor builder; - public QueryBase(SqlResultBuilder builder) { + public QueryBase(QueryExecutor builder) { this.builder = builder; } - protected abstract > QueryBase copy(SqlResultBuilder builder); + protected abstract > QueryBase copy(QueryExecutor builder); @Override public Query> collecting(Collector collector) { Objects.requireNonNull(collector, "Supplied collector must not be null"); - return copy(new SqlResultBuilder<>(builder.tracer(), SqlResultImpl::new, collector)); + return copy(new QueryExecutor<>(builder.tracer(), SqlResultImpl::new, collector)); } @Override public Query> mapping(Function mapper) { Objects.requireNonNull(mapper, "Supplied mapper must not be null"); - return copy(new SqlResultBuilder<>(builder.tracer(), RowSetImpl.factory(), RowSetImpl.collector(mapper))); + return copy(new QueryExecutor<>(builder.tracer(), RowSetImpl.factory(), RowSetImpl.collector(mapper))); } } diff --git a/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/SqlResultBuilder.java b/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/QueryExecutor.java similarity index 77% rename from vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/SqlResultBuilder.java rename to vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/QueryExecutor.java index 45de26325..588faaf6b 100644 --- a/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/SqlResultBuilder.java +++ b/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/QueryExecutor.java @@ -36,17 +36,17 @@ import java.util.stream.Collector; /** - * A query result handler for building a {@link SqlResult}. + * Executes query. */ -class SqlResultBuilder, L extends SqlResult> { +class QueryExecutor, L extends SqlResult> { private final SqlTracer tracer; private final Function factory; private final Collector collector; - public SqlResultBuilder(SqlTracer tracer, - Function factory, - Collector collector) { + public QueryExecutor(SqlTracer tracer, + Function factory, + Collector collector) { this.tracer = tracer; this.factory = factory; this.collector = collector; @@ -56,12 +56,8 @@ SqlTracer tracer() { return tracer; } - private SqlResultHandler createHandler(Promise promise) { - return new SqlResultHandler<>(factory, null, null, promise); - } - - private SqlResultHandler createHandler(Promise promise, Object payload) { - return new SqlResultHandler<>(factory, tracer, payload, promise); + private QueryResultBuilder createHandler(Promise promise, Object payload) { + return new QueryResultBuilder<>(factory, tracer, payload, promise); } void executeSimpleQuery(CommandScheduler scheduler, @@ -76,18 +72,18 @@ void executeSimpleQuery(CommandScheduler scheduler, } else { payload = null; } - SqlResultHandler handler = createHandler(promise, payload); + QueryResultBuilder handler = createHandler(promise, payload); scheduler.schedule(new SimpleQueryCommand<>(sql, singleton, autoCommit, collector, handler), handler); } - SqlResultHandler executeExtendedQuery(CommandScheduler scheduler, - PreparedStatement preparedStatement, - boolean autoCommit, - Tuple arguments, - int fetch, - String cursorId, - boolean suspended, - Promise promise) { + QueryResultBuilder executeExtendedQuery(CommandScheduler scheduler, + PreparedStatement preparedStatement, + boolean autoCommit, + Tuple arguments, + int fetch, + String cursorId, + boolean suspended, + Promise promise) { ContextInternal context = (ContextInternal) promise.future().context(); Object payload; if (tracer != null) { @@ -95,7 +91,7 @@ SqlResultHandler executeExtendedQuery(CommandScheduler scheduler, } else { payload = null; } - SqlResultHandler handler = createHandler(promise, payload); + QueryResultBuilder handler = createHandler(promise, payload); String msg = preparedStatement.prepare((TupleInternal) arguments); if (msg != null) { handler.fail(msg); @@ -122,7 +118,7 @@ void executeExtendedQuery(CommandScheduler scheduler, String sql, boolean autoCo } else { payload = null; } - SqlResultHandler handler = this.createHandler(promise, payload); + QueryResultBuilder handler = this.createHandler(promise, payload); BiCommand cmd = new BiCommand<>(new PrepareStatementCommand(sql, true), ps -> { String msg = ps.prepare((TupleInternal) arguments); if (msg != null) { @@ -136,7 +132,7 @@ void executeExtendedQuery(CommandScheduler scheduler, String sql, boolean autoCo private ExtendedQueryCommand createExtendedQueryCommand(PreparedStatement preparedStatement, boolean autoCommit, Tuple args, - SqlResultHandler handler) { + QueryResultBuilder handler) { return new ExtendedQueryCommand<>( preparedStatement, args, @@ -157,7 +153,7 @@ void executeBatchQuery(CommandScheduler scheduler, } else { payload = null; } - SqlResultHandler handler = createHandler(promise, payload); + QueryResultBuilder handler = createHandler(promise, payload); for (Tuple args : batch) { String msg = preparedStatement.prepare((TupleInternal)args); if (msg != null) { @@ -177,7 +173,7 @@ void executeBatchQuery(CommandScheduler scheduler, String sql, boolean autoCommi } else { payload = null; } - SqlResultHandler handler = this.createHandler(promise, payload); + QueryResultBuilder handler = createHandler(promise, payload); BiCommand cmd = new BiCommand<>(new PrepareStatementCommand(sql, true), ps -> { for (Tuple args : batch) { String msg = ps.prepare((TupleInternal) args); @@ -193,6 +189,7 @@ void executeBatchQuery(CommandScheduler scheduler, String sql, boolean autoCommi private ExtendedBatchQueryCommand createBatchQueryCommand(PreparedStatement preparedStatement, boolean autoCommit, List argsList, - SqlResultHandler handler) { + QueryResultBuilder handler) { return new ExtendedBatchQueryCommand<>(preparedStatement, argsList, autoCommit, collector, handler); - }} + } +} diff --git a/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/SqlResultHandler.java b/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/QueryResultBuilder.java similarity index 91% rename from vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/SqlResultHandler.java rename to vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/QueryResultBuilder.java index 3d2605629..72fb384ee 100644 --- a/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/SqlResultHandler.java +++ b/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/QueryResultBuilder.java @@ -28,9 +28,9 @@ import java.util.function.Function; /** - * A query result handler for building a {@link SqlResult}. + * A query result for building a {@link SqlResult}. */ -class SqlResultHandler, L extends SqlResult> implements QueryResultHandler, Promise { +class QueryResultBuilder, L extends SqlResult> implements QueryResultHandler, Promise { private final Promise handler; private final Function factory; @@ -42,7 +42,7 @@ class SqlResultHandler, L extends SqlResult> im private Throwable failure; private boolean suspended; - SqlResultHandler(Function factory, SqlTracer tracer, Object tracingPayload, Promise handler) { + QueryResultBuilder(Function factory, SqlTracer tracer, Object tracingPayload, Promise handler) { this.factory = factory; this.context = (ContextInternal) handler.future().context(); this.tracer = tracer; diff --git a/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/SqlClientBase.java b/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/SqlClientBase.java index c821b5784..679d91334 100644 --- a/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/SqlClientBase.java +++ b/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/SqlClientBase.java @@ -55,13 +55,13 @@ public int appendQueryPlaceholder(StringBuilder queryBuilder, int index, int cur @Override public Query> query(String sql) { - SqlResultBuilder, RowSetImpl, RowSet> builder = new SqlResultBuilder<>(tracer, RowSetImpl.FACTORY, RowSetImpl.COLLECTOR); + QueryExecutor, RowSetImpl, RowSet> builder = new QueryExecutor<>(tracer, RowSetImpl.FACTORY, RowSetImpl.COLLECTOR); return new QueryImpl<>(autoCommit(), false, sql, builder); } @Override public PreparedQuery> preparedQuery(String sql) { - SqlResultBuilder, RowSetImpl, RowSet> builder = new SqlResultBuilder<>(tracer, RowSetImpl.FACTORY, RowSetImpl.COLLECTOR); + QueryExecutor, RowSetImpl, RowSet> builder = new QueryExecutor<>(tracer, RowSetImpl.FACTORY, RowSetImpl.COLLECTOR); return new PreparedQueryImpl<>(autoCommit(), false, sql, builder); } @@ -75,7 +75,7 @@ private class QueryImpl> extends QueryBase { protected final boolean singleton; protected final String sql; - private QueryImpl(boolean autoCommit, boolean singleton, String sql, SqlResultBuilder builder) { + private QueryImpl(boolean autoCommit, boolean singleton, String sql, QueryExecutor builder) { super(builder); this.autoCommit = autoCommit; this.singleton = singleton; @@ -83,7 +83,7 @@ private QueryImpl(boolean autoCommit, boolean singleton, String sql, SqlResultBu } @Override - protected > QueryBase copy(SqlResultBuilder builder) { + protected > QueryBase copy(QueryExecutor builder) { return new QueryImpl<>(autoCommit, singleton, sql, builder); } @@ -106,7 +106,7 @@ protected void execute(Promise promise) { private class PreparedQueryImpl> extends QueryImpl implements PreparedQuery { - private PreparedQueryImpl(boolean autoCommit, boolean singleton, String sql, SqlResultBuilder builder) { + private PreparedQueryImpl(boolean autoCommit, boolean singleton, String sql, QueryExecutor builder) { super(autoCommit, singleton, sql, builder); } @@ -121,7 +121,7 @@ public PreparedQuery> mapping(Function mapper) { } @Override - protected > QueryBase copy(SqlResultBuilder builder) { + protected > QueryBase copy(QueryExecutor builder) { return new PreparedQueryImpl<>(autoCommit, singleton, sql, builder); } From 32ebb46bf67bee69b3cd3d92dab07a3e3d72b9db Mon Sep 17 00:00:00 2001 From: Julien Viet Date: Sun, 24 May 2020 10:05:06 +0200 Subject: [PATCH 7/7] Rename SqlTracer -> QueryTracer --- .../java/io/vertx/db2client/impl/DB2ConnectionImpl.java | 8 ++++---- .../main/java/io/vertx/db2client/impl/DB2PoolImpl.java | 6 +++--- .../io/vertx/mssqlclient/impl/MSSQLConnectionImpl.java | 6 +++--- .../java/io/vertx/mssqlclient/impl/MSSQLPoolImpl.java | 6 +++--- .../io/vertx/mysqlclient/impl/MySQLConnectionImpl.java | 8 ++++---- .../java/io/vertx/mysqlclient/impl/MySQLPoolImpl.java | 6 +++--- .../java/io/vertx/pgclient/impl/PgConnectionImpl.java | 6 +++--- .../src/main/java/io/vertx/pgclient/impl/PgPoolImpl.java | 6 +++--- .../src/main/java/io/vertx/sqlclient/impl/PoolBase.java | 4 ++-- .../io/vertx/sqlclient/impl/PreparedStatementImpl.java | 8 ++++---- .../main/java/io/vertx/sqlclient/impl/QueryExecutor.java | 8 ++++---- .../java/io/vertx/sqlclient/impl/QueryResultBuilder.java | 6 +++--- .../main/java/io/vertx/sqlclient/impl/SqlClientBase.java | 6 +++--- .../java/io/vertx/sqlclient/impl/SqlConnectionBase.java | 4 ++-- .../java/io/vertx/sqlclient/impl/SqlConnectionImpl.java | 4 ++-- .../io/vertx/sqlclient/impl/tracing/QueryRequest.java | 4 ++-- .../impl/tracing/{SqlTracer.java => QueryTracer.java} | 6 +++--- 17 files changed, 51 insertions(+), 51 deletions(-) rename vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/tracing/{SqlTracer.java => QueryTracer.java} (95%) diff --git a/vertx-db2-client/src/main/java/io/vertx/db2client/impl/DB2ConnectionImpl.java b/vertx-db2-client/src/main/java/io/vertx/db2client/impl/DB2ConnectionImpl.java index 87d03f5ee..fd9cf2c00 100644 --- a/vertx-db2-client/src/main/java/io/vertx/db2client/impl/DB2ConnectionImpl.java +++ b/vertx-db2-client/src/main/java/io/vertx/db2client/impl/DB2ConnectionImpl.java @@ -26,7 +26,7 @@ import io.vertx.db2client.impl.command.PingCommand; import io.vertx.sqlclient.impl.Connection; import io.vertx.sqlclient.impl.SqlConnectionImpl; -import io.vertx.sqlclient.impl.tracing.SqlTracer; +import io.vertx.sqlclient.impl.tracing.QueryTracer; public class DB2ConnectionImpl extends SqlConnectionImpl implements DB2Connection { @@ -38,13 +38,13 @@ public static Future connect(Vertx vertx, DB2ConnectOptions optio } catch (Exception e) { return ctx.failedFuture(e); } - SqlTracer tracer = ctx.tracer() == null ? null : new SqlTracer(ctx.tracer(), options); + QueryTracer tracer = ctx.tracer() == null ? null : new QueryTracer(ctx.tracer(), options); Promise promise = ctx.promise(); ctx.dispatch(null, v -> connect(client, ctx, tracer, promise)); return promise.future(); } - private static void connect(DB2ConnectionFactory client, ContextInternal ctx, SqlTracer tracer, Promise promise) { + private static void connect(DB2ConnectionFactory client, ContextInternal ctx, QueryTracer tracer, Promise promise) { client.connect().map(conn -> { DB2ConnectionImpl db2Connection = new DB2ConnectionImpl(client, ctx, conn, tracer); conn.init(db2Connection); @@ -52,7 +52,7 @@ private static void connect(DB2ConnectionFactory client, ContextInternal ctx, Sq }).onComplete(promise); } - public DB2ConnectionImpl(DB2ConnectionFactory factory, ContextInternal context, Connection conn, SqlTracer tracer) { + public DB2ConnectionImpl(DB2ConnectionFactory factory, ContextInternal context, Connection conn, QueryTracer tracer) { super(context, conn, tracer); } diff --git a/vertx-db2-client/src/main/java/io/vertx/db2client/impl/DB2PoolImpl.java b/vertx-db2-client/src/main/java/io/vertx/db2client/impl/DB2PoolImpl.java index f5b255e5d..093a4997e 100644 --- a/vertx-db2-client/src/main/java/io/vertx/db2client/impl/DB2PoolImpl.java +++ b/vertx-db2-client/src/main/java/io/vertx/db2client/impl/DB2PoolImpl.java @@ -25,13 +25,13 @@ import io.vertx.sqlclient.impl.Connection; import io.vertx.sqlclient.impl.PoolBase; import io.vertx.sqlclient.impl.SqlConnectionImpl; -import io.vertx.sqlclient.impl.tracing.SqlTracer; +import io.vertx.sqlclient.impl.tracing.QueryTracer; public class DB2PoolImpl extends PoolBase implements DB2Pool { public static DB2PoolImpl create(ContextInternal context, boolean closeVertx, DB2ConnectOptions connectOptions, PoolOptions poolOptions) { - SqlTracer tracer = context.tracer() == null ? null : new SqlTracer(context.tracer(), connectOptions); + QueryTracer tracer = context.tracer() == null ? null : new QueryTracer(context.tracer(), connectOptions); DB2PoolImpl pool = new DB2PoolImpl(context, poolOptions, new DB2ConnectionFactory(context, connectOptions), tracer); CloseFuture closeFuture = pool.closeFuture(); if (closeVertx) { @@ -44,7 +44,7 @@ public static DB2PoolImpl create(ContextInternal context, boolean closeVertx, DB private final DB2ConnectionFactory factory; - private DB2PoolImpl(ContextInternal context, PoolOptions poolOptions, DB2ConnectionFactory factory, SqlTracer tracer) { + private DB2PoolImpl(ContextInternal context, PoolOptions poolOptions, DB2ConnectionFactory factory, QueryTracer tracer) { super(context, factory, tracer, poolOptions); this.factory = factory; } diff --git a/vertx-mssql-client/src/main/java/io/vertx/mssqlclient/impl/MSSQLConnectionImpl.java b/vertx-mssql-client/src/main/java/io/vertx/mssqlclient/impl/MSSQLConnectionImpl.java index 8fc3cafaa..3673a5089 100644 --- a/vertx-mssql-client/src/main/java/io/vertx/mssqlclient/impl/MSSQLConnectionImpl.java +++ b/vertx-mssql-client/src/main/java/io/vertx/mssqlclient/impl/MSSQLConnectionImpl.java @@ -19,12 +19,12 @@ import io.vertx.core.Vertx; import io.vertx.sqlclient.impl.Connection; import io.vertx.sqlclient.impl.SqlConnectionImpl; -import io.vertx.sqlclient.impl.tracing.SqlTracer; +import io.vertx.sqlclient.impl.tracing.QueryTracer; public class MSSQLConnectionImpl extends SqlConnectionImpl implements MSSQLConnection { private final MSSQLConnectionFactory factory; - public MSSQLConnectionImpl(MSSQLConnectionFactory factory, ContextInternal context, Connection conn, SqlTracer tracer) { + public MSSQLConnectionImpl(MSSQLConnectionFactory factory, ContextInternal context, Connection conn, QueryTracer tracer) { super(context, conn, tracer); this.factory = factory; } @@ -37,7 +37,7 @@ public int appendQueryPlaceholder(StringBuilder queryBuilder, int index, int cur public static Future connect(Vertx vertx, MSSQLConnectOptions options) { ContextInternal ctx = (ContextInternal) vertx.getOrCreateContext(); - SqlTracer tracer = ctx.tracer() == null ? null : new SqlTracer(ctx.tracer(), options); + QueryTracer tracer = ctx.tracer() == null ? null : new QueryTracer(ctx.tracer(), options); PromiseInternal promise = ctx.promise(); MSSQLConnectionFactory client = new MSSQLConnectionFactory(ctx, options); ctx.dispatch(null, v -> { diff --git a/vertx-mssql-client/src/main/java/io/vertx/mssqlclient/impl/MSSQLPoolImpl.java b/vertx-mssql-client/src/main/java/io/vertx/mssqlclient/impl/MSSQLPoolImpl.java index 731acd9a1..7d795310a 100644 --- a/vertx-mssql-client/src/main/java/io/vertx/mssqlclient/impl/MSSQLPoolImpl.java +++ b/vertx-mssql-client/src/main/java/io/vertx/mssqlclient/impl/MSSQLPoolImpl.java @@ -23,14 +23,14 @@ import io.vertx.sqlclient.impl.Connection; import io.vertx.sqlclient.impl.PoolBase; import io.vertx.sqlclient.impl.SqlConnectionImpl; -import io.vertx.sqlclient.impl.tracing.SqlTracer; +import io.vertx.sqlclient.impl.tracing.QueryTracer; import java.util.function.Function; public class MSSQLPoolImpl extends PoolBase implements MSSQLPool { public static MSSQLPoolImpl create(ContextInternal context, boolean closeVertx, MSSQLConnectOptions connectOptions, PoolOptions poolOptions) { - SqlTracer tracer = context.tracer() == null ? null : new SqlTracer(context.tracer(), connectOptions); + QueryTracer tracer = context.tracer() == null ? null : new QueryTracer(context.tracer(), connectOptions); MSSQLPoolImpl pool = new MSSQLPoolImpl(context, new MSSQLConnectionFactory(context, connectOptions), tracer, poolOptions); CloseFuture closeFuture = pool.closeFuture(); if (closeVertx) { @@ -43,7 +43,7 @@ public static MSSQLPoolImpl create(ContextInternal context, boolean closeVertx, private final MSSQLConnectionFactory connectionFactory; - private MSSQLPoolImpl(ContextInternal context, MSSQLConnectionFactory factory, SqlTracer tracer, PoolOptions poolOptions) { + private MSSQLPoolImpl(ContextInternal context, MSSQLConnectionFactory factory, QueryTracer tracer, PoolOptions poolOptions) { super(context, factory, tracer, poolOptions); this.connectionFactory = factory; } diff --git a/vertx-mysql-client/src/main/java/io/vertx/mysqlclient/impl/MySQLConnectionImpl.java b/vertx-mysql-client/src/main/java/io/vertx/mysqlclient/impl/MySQLConnectionImpl.java index 892c0f1eb..c4a7c48f3 100644 --- a/vertx-mysql-client/src/main/java/io/vertx/mysqlclient/impl/MySQLConnectionImpl.java +++ b/vertx-mysql-client/src/main/java/io/vertx/mysqlclient/impl/MySQLConnectionImpl.java @@ -31,7 +31,7 @@ import io.vertx.mysqlclient.impl.command.StatisticsCommand; import io.vertx.sqlclient.impl.Connection; import io.vertx.sqlclient.impl.SqlConnectionImpl; -import io.vertx.sqlclient.impl.tracing.SqlTracer; +import io.vertx.sqlclient.impl.tracing.QueryTracer; public class MySQLConnectionImpl extends SqlConnectionImpl implements MySQLConnection { @@ -43,13 +43,13 @@ public static Future connect(Vertx vertx, MySQLConnectOptions o } catch (Exception e) { return ctx.failedFuture(e); } - SqlTracer tracer = ctx.tracer() == null ? null : new SqlTracer(ctx.tracer(), options); + QueryTracer tracer = ctx.tracer() == null ? null : new QueryTracer(ctx.tracer(), options); Promise promise = ctx.promise(); ctx.dispatch(null, v -> connect(client, ctx, tracer, promise)); return promise.future(); } - private static void connect(MySQLConnectionFactory client, ContextInternal ctx, SqlTracer tracer, Promise promise) { + private static void connect(MySQLConnectionFactory client, ContextInternal ctx, QueryTracer tracer, Promise promise) { client.connect() .map(conn -> { MySQLConnectionImpl mySQLConnection = new MySQLConnectionImpl(client, ctx, conn, tracer); @@ -60,7 +60,7 @@ private static void connect(MySQLConnectionFactory client, ContextInternal ctx, private final MySQLConnectionFactory factory; - public MySQLConnectionImpl(MySQLConnectionFactory factory, ContextInternal context, Connection conn, SqlTracer tracer) { + public MySQLConnectionImpl(MySQLConnectionFactory factory, ContextInternal context, Connection conn, QueryTracer tracer) { super(context, conn, tracer); this.factory = factory; diff --git a/vertx-mysql-client/src/main/java/io/vertx/mysqlclient/impl/MySQLPoolImpl.java b/vertx-mysql-client/src/main/java/io/vertx/mysqlclient/impl/MySQLPoolImpl.java index 0902a4b73..aa587f360 100644 --- a/vertx-mysql-client/src/main/java/io/vertx/mysqlclient/impl/MySQLPoolImpl.java +++ b/vertx-mysql-client/src/main/java/io/vertx/mysqlclient/impl/MySQLPoolImpl.java @@ -21,12 +21,12 @@ import io.vertx.sqlclient.impl.Connection; import io.vertx.sqlclient.impl.PoolBase; import io.vertx.sqlclient.impl.SqlConnectionImpl; -import io.vertx.sqlclient.impl.tracing.SqlTracer; +import io.vertx.sqlclient.impl.tracing.QueryTracer; public class MySQLPoolImpl extends PoolBase implements MySQLPool { public static MySQLPoolImpl create(ContextInternal context, boolean closeVertx, MySQLConnectOptions connectOptions, PoolOptions poolOptions) { - SqlTracer tracer = context.tracer() == null ? null : new SqlTracer(context.tracer(), connectOptions); + QueryTracer tracer = context.tracer() == null ? null : new QueryTracer(context.tracer(), connectOptions); MySQLPoolImpl pool = new MySQLPoolImpl(context, new MySQLConnectionFactory(context, connectOptions), tracer, poolOptions); CloseFuture closeFuture = pool.closeFuture(); if (closeVertx) { @@ -39,7 +39,7 @@ public static MySQLPoolImpl create(ContextInternal context, boolean closeVertx, private final MySQLConnectionFactory factory; - private MySQLPoolImpl(ContextInternal context, MySQLConnectionFactory factory, SqlTracer tracer, PoolOptions poolOptions) { + private MySQLPoolImpl(ContextInternal context, MySQLConnectionFactory factory, QueryTracer tracer, PoolOptions poolOptions) { super(context, factory, tracer, poolOptions); this.factory = factory; } diff --git a/vertx-pg-client/src/main/java/io/vertx/pgclient/impl/PgConnectionImpl.java b/vertx-pg-client/src/main/java/io/vertx/pgclient/impl/PgConnectionImpl.java index 7e9d67caf..12b0a3fa9 100644 --- a/vertx-pg-client/src/main/java/io/vertx/pgclient/impl/PgConnectionImpl.java +++ b/vertx-pg-client/src/main/java/io/vertx/pgclient/impl/PgConnectionImpl.java @@ -28,7 +28,7 @@ import io.vertx.core.Future; import io.vertx.core.Handler; import io.vertx.core.Vertx; -import io.vertx.sqlclient.impl.tracing.SqlTracer; +import io.vertx.sqlclient.impl.tracing.QueryTracer; public class PgConnectionImpl extends SqlConnectionImpl implements PgConnection { @@ -39,7 +39,7 @@ public static Future connect(ContextInternal context, PgConnectOpt PgConnectionFactory client = new PgConnectionFactory(context.owner(), context, options); return client.connect() .map(conn -> { - SqlTracer tracer = context.tracer() == null ? null : new SqlTracer(context.tracer(), options); + QueryTracer tracer = context.tracer() == null ? null : new QueryTracer(context.tracer(), options); PgConnectionImpl pgConn = new PgConnectionImpl(client, context, conn, tracer); conn.init(pgConn); return pgConn; @@ -50,7 +50,7 @@ public static Future connect(ContextInternal context, PgConnectOpt private final PgConnectionFactory factory; private volatile Handler notificationHandler; - PgConnectionImpl(PgConnectionFactory factory, ContextInternal context, Connection conn, SqlTracer tracer) { + PgConnectionImpl(PgConnectionFactory factory, ContextInternal context, Connection conn, QueryTracer tracer) { super(context, conn, tracer); this.factory = factory; diff --git a/vertx-pg-client/src/main/java/io/vertx/pgclient/impl/PgPoolImpl.java b/vertx-pg-client/src/main/java/io/vertx/pgclient/impl/PgPoolImpl.java index 419a371c8..adde75cea 100644 --- a/vertx-pg-client/src/main/java/io/vertx/pgclient/impl/PgPoolImpl.java +++ b/vertx-pg-client/src/main/java/io/vertx/pgclient/impl/PgPoolImpl.java @@ -25,7 +25,7 @@ import io.vertx.sqlclient.impl.PoolBase; import io.vertx.sqlclient.impl.SqlConnectionImpl; import io.vertx.core.*; -import io.vertx.sqlclient.impl.tracing.SqlTracer; +import io.vertx.sqlclient.impl.tracing.QueryTracer; /** * Todo : @@ -39,7 +39,7 @@ public class PgPoolImpl extends PoolBase implements PgPool { public static PgPoolImpl create(ContextInternal context, boolean closeVertx, PgConnectOptions connectOptions, PoolOptions poolOptions) { - SqlTracer tracer = context.tracer() == null ? null : new SqlTracer(context.tracer(), connectOptions); + QueryTracer tracer = context.tracer() == null ? null : new QueryTracer(context.tracer(), connectOptions); PgPoolImpl pool = new PgPoolImpl(context, new PgConnectionFactory(context.owner(), context, connectOptions), tracer, poolOptions); CloseFuture closeFuture = pool.closeFuture(); if (closeVertx) { @@ -52,7 +52,7 @@ public static PgPoolImpl create(ContextInternal context, boolean closeVertx, PgC private final PgConnectionFactory factory; - private PgPoolImpl(ContextInternal context, PgConnectionFactory factory, SqlTracer tracer, PoolOptions poolOptions) { + private PgPoolImpl(ContextInternal context, PgConnectionFactory factory, QueryTracer tracer, PoolOptions poolOptions) { super(context, factory, tracer, poolOptions); this.factory = factory; } diff --git a/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/PoolBase.java b/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/PoolBase.java index 9dacb3443..37a251e51 100644 --- a/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/PoolBase.java +++ b/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/PoolBase.java @@ -31,7 +31,7 @@ import io.vertx.core.Future; import io.vertx.core.Handler; import io.vertx.sqlclient.impl.pool.ConnectionPool; -import io.vertx.sqlclient.impl.tracing.SqlTracer; +import io.vertx.sqlclient.impl.tracing.QueryTracer; import java.util.function.Function; @@ -46,7 +46,7 @@ public abstract class PoolBase

extends SqlClientBase

implemen private final ConnectionPool pool; private final CloseFuture closeFuture; - public PoolBase(ContextInternal context, ConnectionFactory factory, SqlTracer tracer, PoolOptions poolOptions) { + public PoolBase(ContextInternal context, ConnectionFactory factory, QueryTracer tracer, PoolOptions poolOptions) { super(tracer); this.vertx = context.owner(); this.factory = factory; diff --git a/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/PreparedStatementImpl.java b/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/PreparedStatementImpl.java index 4e1c70461..662eb1015 100644 --- a/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/PreparedStatementImpl.java +++ b/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/PreparedStatementImpl.java @@ -29,7 +29,7 @@ import io.vertx.sqlclient.Row; import io.vertx.sqlclient.Tuple; import io.vertx.core.*; -import io.vertx.sqlclient.impl.tracing.SqlTracer; +import io.vertx.sqlclient.impl.tracing.QueryTracer; import java.util.List; import java.util.concurrent.atomic.AtomicBoolean; @@ -41,18 +41,18 @@ */ class PreparedStatementImpl implements PreparedStatement { - static PreparedStatement create(Connection conn, SqlTracer tracer, ContextInternal context, io.vertx.sqlclient.impl.PreparedStatement ps, boolean autoCommit) { + static PreparedStatement create(Connection conn, QueryTracer tracer, ContextInternal context, io.vertx.sqlclient.impl.PreparedStatement ps, boolean autoCommit) { return new PreparedStatementImpl(conn, tracer, context, ps, autoCommit); } final Connection conn; - final SqlTracer tracer; + final QueryTracer tracer; final ContextInternal context; final io.vertx.sqlclient.impl.PreparedStatement ps; final boolean autoCommit; private final AtomicBoolean closed = new AtomicBoolean(); - private PreparedStatementImpl(Connection conn, SqlTracer tracer, ContextInternal context, io.vertx.sqlclient.impl.PreparedStatement ps, boolean autoCommit) { + private PreparedStatementImpl(Connection conn, QueryTracer tracer, ContextInternal context, io.vertx.sqlclient.impl.PreparedStatement ps, boolean autoCommit) { this.conn = conn; this.tracer = tracer; this.context = context; diff --git a/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/QueryExecutor.java b/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/QueryExecutor.java index 588faaf6b..5214cbb32 100644 --- a/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/QueryExecutor.java +++ b/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/QueryExecutor.java @@ -29,7 +29,7 @@ import io.vertx.sqlclient.impl.command.ExtendedQueryCommand; import io.vertx.sqlclient.impl.command.PrepareStatementCommand; import io.vertx.sqlclient.impl.command.SimpleQueryCommand; -import io.vertx.sqlclient.impl.tracing.SqlTracer; +import io.vertx.sqlclient.impl.tracing.QueryTracer; import java.util.List; import java.util.function.Function; @@ -40,11 +40,11 @@ */ class QueryExecutor, L extends SqlResult> { - private final SqlTracer tracer; + private final QueryTracer tracer; private final Function factory; private final Collector collector; - public QueryExecutor(SqlTracer tracer, + public QueryExecutor(QueryTracer tracer, Function factory, Collector collector) { this.tracer = tracer; @@ -52,7 +52,7 @@ public QueryExecutor(SqlTracer tracer, this.collector = collector; } - SqlTracer tracer() { + QueryTracer tracer() { return tracer; } diff --git a/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/QueryResultBuilder.java b/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/QueryResultBuilder.java index 72fb384ee..cf37b6dab 100644 --- a/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/QueryResultBuilder.java +++ b/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/QueryResultBuilder.java @@ -22,7 +22,7 @@ import io.vertx.core.impl.ContextInternal; import io.vertx.sqlclient.SqlResult; import io.vertx.sqlclient.PropertyKind; -import io.vertx.sqlclient.impl.tracing.SqlTracer; +import io.vertx.sqlclient.impl.tracing.QueryTracer; import java.util.HashMap; import java.util.function.Function; @@ -35,14 +35,14 @@ class QueryResultBuilder, L extends SqlResult> private final Promise handler; private final Function factory; private final ContextInternal context; - private final SqlTracer tracer; + private final QueryTracer tracer; private final Object tracingPayload; private R first; private R current; private Throwable failure; private boolean suspended; - QueryResultBuilder(Function factory, SqlTracer tracer, Object tracingPayload, Promise handler) { + QueryResultBuilder(Function factory, QueryTracer tracer, Object tracingPayload, Promise handler) { this.factory = factory; this.context = (ContextInternal) handler.future().context(); this.tracer = tracer; diff --git a/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/SqlClientBase.java b/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/SqlClientBase.java index 679d91334..8f6949011 100644 --- a/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/SqlClientBase.java +++ b/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/SqlClientBase.java @@ -29,7 +29,7 @@ import io.vertx.core.AsyncResult; import io.vertx.core.Future; import io.vertx.core.Handler; -import io.vertx.sqlclient.impl.tracing.SqlTracer; +import io.vertx.sqlclient.impl.tracing.QueryTracer; import java.util.List; import java.util.function.Function; @@ -37,9 +37,9 @@ public abstract class SqlClientBase implements SqlClientInternal, CommandScheduler { - protected final SqlTracer tracer; + protected final QueryTracer tracer; - public SqlClientBase(SqlTracer tracer) { + public SqlClientBase(QueryTracer tracer) { this.tracer = tracer; } diff --git a/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/SqlConnectionBase.java b/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/SqlConnectionBase.java index e7916c296..cbcbbb25e 100644 --- a/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/SqlConnectionBase.java +++ b/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/SqlConnectionBase.java @@ -22,7 +22,7 @@ import io.vertx.sqlclient.SqlClient; import io.vertx.sqlclient.impl.command.PrepareStatementCommand; import io.vertx.core.*; -import io.vertx.sqlclient.impl.tracing.SqlTracer; +import io.vertx.sqlclient.impl.tracing.QueryTracer; /** * @author Julien Viet @@ -32,7 +32,7 @@ public abstract class SqlConnectionBase extends SqlClientBa protected final ContextInternal context; protected final Connection conn; - protected SqlConnectionBase(ContextInternal context, Connection conn, SqlTracer tracer) { + protected SqlConnectionBase(ContextInternal context, Connection conn, QueryTracer tracer) { super(tracer); this.context = context; this.conn = conn; diff --git a/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/SqlConnectionImpl.java b/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/SqlConnectionImpl.java index e4ed9e874..c0ae506b7 100644 --- a/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/SqlConnectionImpl.java +++ b/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/SqlConnectionImpl.java @@ -22,7 +22,7 @@ import io.vertx.sqlclient.impl.command.CommandBase; import io.vertx.sqlclient.Transaction; import io.vertx.core.*; -import io.vertx.sqlclient.impl.tracing.SqlTracer; +import io.vertx.sqlclient.impl.tracing.QueryTracer; /** * @author Julien Viet @@ -33,7 +33,7 @@ public class SqlConnectionImpl extends SqlConnectionBas private volatile Handler closeHandler; private TransactionImpl tx; - public SqlConnectionImpl(ContextInternal context, Connection conn, SqlTracer tracer) { + public SqlConnectionImpl(ContextInternal context, Connection conn, QueryTracer tracer) { super(context, conn, tracer); } diff --git a/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/tracing/QueryRequest.java b/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/tracing/QueryRequest.java index 01c5541df..c363577ab 100644 --- a/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/tracing/QueryRequest.java +++ b/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/tracing/QueryRequest.java @@ -9,11 +9,11 @@ */ public class QueryRequest { - final SqlTracer tracer; + final QueryTracer tracer; final String sql; final List tuples; - public QueryRequest(SqlTracer tracer, String sql, List tuples) { + public QueryRequest(QueryTracer tracer, String sql, List tuples) { this.tracer = tracer; this.sql = sql; this.tuples = tuples; diff --git a/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/tracing/SqlTracer.java b/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/tracing/QueryTracer.java similarity index 95% rename from vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/tracing/SqlTracer.java rename to vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/tracing/QueryTracer.java index 5ffa31fb7..ec4a3e594 100644 --- a/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/tracing/SqlTracer.java +++ b/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/tracing/QueryTracer.java @@ -11,9 +11,9 @@ import java.util.function.Function; /** - * Tracer for SQL client, wrapping the generic tracer. + * Tracer for queries, wrapping the generic tracer. */ -public class SqlTracer { +public class QueryTracer { enum RequestTags { @@ -63,7 +63,7 @@ public String value(QueryRequest obj, int index) { private final String user; private final String database; - public SqlTracer(VertxTracer tracer, SqlConnectOptions options) { + public QueryTracer(VertxTracer tracer, SqlConnectOptions options) { this.tracer = tracer; this.address = options.getHost() + ":" + options.getPort(); this.host = options.getHost();