Skip to content

Commit 196411d

Browse files
committed
Initial implementation of SQL client tracing
1 parent f9792f8 commit 196411d

32 files changed

+683
-248
lines changed

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

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import io.vertx.db2client.impl.command.PingCommand;
2727
import io.vertx.sqlclient.impl.Connection;
2828
import io.vertx.sqlclient.impl.SqlConnectionImpl;
29+
import io.vertx.sqlclient.impl.tracing.SqlTracer;
2930

3031
public class DB2ConnectionImpl extends SqlConnectionImpl<DB2ConnectionImpl> implements DB2Connection {
3132

@@ -37,21 +38,22 @@ public static Future<DB2Connection> connect(Vertx vertx, DB2ConnectOptions optio
3738
} catch (Exception e) {
3839
return ctx.failedFuture(e);
3940
}
41+
SqlTracer tracer = ctx.tracer() == null ? null : new SqlTracer(ctx.tracer(), options);
4042
Promise<DB2Connection> promise = ctx.promise();
41-
ctx.dispatch(null, v -> connect(client, ctx, promise));
43+
ctx.dispatch(null, v -> connect(client, ctx, tracer, promise));
4244
return promise.future();
4345
}
4446

45-
private static void connect(DB2ConnectionFactory client, ContextInternal ctx, Promise<DB2Connection> promise) {
47+
private static void connect(DB2ConnectionFactory client, ContextInternal ctx, SqlTracer tracer, Promise<DB2Connection> promise) {
4648
client.connect().map(conn -> {
47-
DB2ConnectionImpl db2Connection = new DB2ConnectionImpl(client, ctx, conn);
49+
DB2ConnectionImpl db2Connection = new DB2ConnectionImpl(client, ctx, conn, tracer);
4850
conn.init(db2Connection);
4951
return (DB2Connection) db2Connection;
5052
}).onComplete(promise);
5153
}
5254

53-
public DB2ConnectionImpl(DB2ConnectionFactory factory, ContextInternal context, Connection conn) {
54-
super(context, conn);
55+
public DB2ConnectionImpl(DB2ConnectionFactory factory, ContextInternal context, Connection conn, SqlTracer tracer) {
56+
super(context, conn, tracer);
5557
}
5658

5759
@Override

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

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,14 @@
2525
import io.vertx.sqlclient.impl.Connection;
2626
import io.vertx.sqlclient.impl.PoolBase;
2727
import io.vertx.sqlclient.impl.SqlConnectionImpl;
28+
import io.vertx.sqlclient.impl.tracing.SqlTracer;
2829

2930
public class DB2PoolImpl extends PoolBase<DB2PoolImpl> implements DB2Pool {
3031

3132
public static DB2PoolImpl create(ContextInternal context, boolean closeVertx, DB2ConnectOptions connectOptions,
3233
PoolOptions poolOptions) {
33-
DB2PoolImpl pool = new DB2PoolImpl(context, poolOptions, new DB2ConnectionFactory(context, connectOptions));
34+
SqlTracer tracer = context.tracer() == null ? null : new SqlTracer(context.tracer(), connectOptions);
35+
DB2PoolImpl pool = new DB2PoolImpl(context, poolOptions, new DB2ConnectionFactory(context, connectOptions), tracer);
3436
CloseFuture closeFuture = pool.closeFuture();
3537
if (closeVertx) {
3638
closeFuture.onComplete(ar -> context.owner().close());
@@ -42,8 +44,8 @@ public static DB2PoolImpl create(ContextInternal context, boolean closeVertx, DB
4244

4345
private final DB2ConnectionFactory factory;
4446

45-
private DB2PoolImpl(ContextInternal context, PoolOptions poolOptions, DB2ConnectionFactory factory) {
46-
super(context, factory, poolOptions);
47+
private DB2PoolImpl(ContextInternal context, PoolOptions poolOptions, DB2ConnectionFactory factory, SqlTracer tracer) {
48+
super(context, factory, tracer, poolOptions);
4749
this.factory = factory;
4850
}
4951

@@ -55,6 +57,6 @@ public void connect(Handler<AsyncResult<Connection>> completionHandler) {
5557
@SuppressWarnings("rawtypes")
5658
@Override
5759
protected SqlConnectionImpl wrap(ContextInternal context, Connection conn) {
58-
return new DB2ConnectionImpl(factory, context, conn);
60+
return new DB2ConnectionImpl(factory, context, conn, tracer);
5961
}
6062
}

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

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -39,18 +39,18 @@ public class DB2SocketConnection extends SocketConnectionBase {
3939
private DB2Codec codec;
4040
private Handler<Void> closeHandler;
4141

42-
public DB2SocketConnection(NetSocketInternal socket,
43-
boolean cachePreparedStatements,
44-
int preparedStatementCacheSize,
45-
int preparedStatementCacheSqlLimit,
46-
int pipeliningLimit,
47-
ContextInternal context) {
48-
super(socket, cachePreparedStatements, preparedStatementCacheSize, preparedStatementCacheSqlLimit, pipeliningLimit, context);
49-
}
42+
public DB2SocketConnection(NetSocketInternal socket,
43+
boolean cachePreparedStatements,
44+
int preparedStatementCacheSize,
45+
int preparedStatementCacheSqlLimit,
46+
int pipeliningLimit,
47+
ContextInternal context) {
48+
super(socket, cachePreparedStatements, preparedStatementCacheSize, preparedStatementCacheSqlLimit, pipeliningLimit, context);
49+
}
5050

51-
void sendStartupMessage(String username,
52-
String password,
53-
String database,
51+
void sendStartupMessage(String username,
52+
String password,
53+
String database,
5454
Map<String, String> properties,
5555
Promise<Connection> completionHandler) {
5656
InitialHandshakeCommand cmd = new InitialHandshakeCommand(this, username, password, database, properties);

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

Lines changed: 37 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -55,25 +55,25 @@ void encode(DB2Encoder encoder) {
5555
super.encode(encoder);
5656
}
5757

58-
@Override
59-
void encodeQuery(DRDAQueryRequest req) {
60-
for (int i = 0; i < params.size(); i++) {
61-
Tuple params = this.params.get(i);
62-
QueryInstance queryInstance = statement.getQueryInstance(baseCursorId + i);
63-
queryInstances.add(i, queryInstance);
64-
encodePreparedQuery(req, queryInstance, params);
65-
}
66-
}
58+
@Override
59+
void encodeQuery(DRDAQueryRequest req) {
60+
for (int i = 0; i < params.size(); i++) {
61+
Tuple params = this.params.get(i);
62+
QueryInstance queryInstance = statement.getQueryInstance(baseCursorId + i);
63+
queryInstances.add(i, queryInstance);
64+
encodePreparedQuery(req, queryInstance, params);
65+
}
66+
}
6767

68-
@Override
69-
void encodeUpdate(DRDAQueryRequest req) {
70-
for (Tuple params : this.params) {
71-
encodePreparedUpdate(req, params);
72-
}
73-
if (cmd.autoCommit()) {
74-
req.buildRDBCMM();
75-
}
76-
}
68+
@Override
69+
void encodeUpdate(DRDAQueryRequest req) {
70+
for (Tuple params : this.params) {
71+
encodePreparedUpdate(req, params);
72+
}
73+
if (cmd.isAutoCommit()) {
74+
req.buildRDBCMM();
75+
}
76+
}
7777

7878
void decodeQuery(ByteBuf payload) {
7979
boolean hasMoreResults = true;
@@ -91,24 +91,26 @@ void decodeQuery(ByteBuf payload) {
9191
}
9292

9393
void decodeUpdate(ByteBuf payload) {
94-
DRDAQueryResponse updateResponse = new DRDAQueryResponse(payload, encoder.connMetadata);
95-
for (int i = 0; i < params.size(); i++) {
96-
handleUpdateResult(updateResponse);
97-
}
98-
if (cmd.autoCommit()) {
99-
updateResponse.readLocalCommit();
100-
}
101-
completionHandler.handle(CommandResponse.success(true));
94+
DRDAQueryResponse updateResponse = new DRDAQueryResponse(payload, encoder.connMetadata);
95+
for (int i = 0; i < params.size(); i++) {
96+
handleUpdateResult(updateResponse);
97+
}
98+
if (cmd.isAutoCommit()) {
99+
updateResponse.readLocalCommit();
100+
}
101+
completionHandler.handle(CommandResponse.success(true));
102102
}
103103

104-
@Override
105-
public String toString() {
106-
StringBuilder sb = new StringBuilder(super.toString());
107-
sb.append(", params=");
108-
sb.append("[");
109-
sb.append(cmd.params().stream().map(Tuple::deepToString).collect(Collectors.joining(",")));
110-
sb.append("]");
111-
return sb.toString();
112-
}
104+
@Override
105+
public String toString() {
106+
StringBuilder sb = new StringBuilder(super.toString());
107+
sb.append(", params=");
108+
sb.append("[");
109+
sb.append(cmd.params().stream()
110+
.map(Tuple::deepToString)
111+
.collect(Collectors.joining(",")));
112+
sb.append("]");
113+
return sb.toString();
114+
}
113115

114116
}

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

Lines changed: 36 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -24,48 +24,48 @@
2424

2525
class ExtendedQueryCommandCodec<R> extends ExtendedQueryCommandBaseCodec<R, ExtendedQueryCommand<R>> {
2626

27-
final QueryInstance queryInstance;
27+
final QueryInstance queryInstance;
2828

29-
ExtendedQueryCommandCodec(ExtendedQueryCommand<R> cmd) {
30-
super(cmd);
31-
queryInstance = statement.getQueryInstance(cmd.cursorId());
32-
}
29+
ExtendedQueryCommandCodec(ExtendedQueryCommand<R> cmd) {
30+
super(cmd);
31+
queryInstance = statement.getQueryInstance(cmd.cursorId());
32+
}
3333

34-
@Override
35-
void encodeQuery(DRDAQueryRequest req) {
36-
encodePreparedQuery(req, queryInstance, cmd.params());
37-
}
34+
@Override
35+
void encodeQuery(DRDAQueryRequest req) {
36+
encodePreparedQuery(req, queryInstance, cmd.params());
37+
}
3838

39-
@Override
40-
void encodeUpdate(DRDAQueryRequest req) {
41-
encodePreparedUpdate(req, cmd.params());
42-
if (cmd.autoCommit()) {
43-
req.buildRDBCMM();
39+
@Override
40+
void encodeUpdate(DRDAQueryRequest req) {
41+
encodePreparedUpdate(req, cmd.params());
42+
if (cmd.isAutoCommit()) {
43+
req.buildRDBCMM();
44+
}
4445
}
45-
}
4646

47-
void decodeQuery(ByteBuf payload) {
48-
DRDAQueryResponse resp = new DRDAQueryResponse(payload, encoder.connMetadata);
49-
RowResultDecoder<?, R> decoder = decodePreparedQuery(payload, resp, queryInstance);
50-
boolean hasMoreResults = !decoder.isQueryComplete();
51-
handleQueryResult(decoder);
52-
completionHandler.handle(CommandResponse.success(hasMoreResults));
53-
}
47+
void decodeQuery(ByteBuf payload) {
48+
DRDAQueryResponse resp = new DRDAQueryResponse(payload, encoder.connMetadata);
49+
RowResultDecoder<?, R> decoder = decodePreparedQuery(payload, resp, queryInstance);
50+
boolean hasMoreResults = !decoder.isQueryComplete();
51+
handleQueryResult(decoder);
52+
completionHandler.handle(CommandResponse.success(hasMoreResults));
53+
}
5454

55-
void decodeUpdate(ByteBuf payload) {
56-
DRDAQueryResponse updateResponse = new DRDAQueryResponse(payload, encoder.connMetadata);
57-
handleUpdateResult(updateResponse);
58-
if (cmd.autoCommit()) {
59-
updateResponse.readLocalCommit();
55+
void decodeUpdate(ByteBuf payload) {
56+
DRDAQueryResponse updateResponse = new DRDAQueryResponse(payload, encoder.connMetadata);
57+
handleUpdateResult(updateResponse);
58+
if (cmd.isAutoCommit()) {
59+
updateResponse.readLocalCommit();
60+
}
61+
completionHandler.handle(CommandResponse.success(true));
6062
}
61-
completionHandler.handle(CommandResponse.success(true));
62-
}
6363

64-
@Override
65-
public String toString() {
66-
StringBuilder sb = new StringBuilder(super.toString());
67-
sb.append(", params=");
68-
sb.append(cmd.params().deepToString());
69-
return sb.toString();
70-
}
64+
@Override
65+
public String toString() {
66+
StringBuilder sb = new StringBuilder(super.toString());
67+
sb.append(", params=");
68+
sb.append(cmd.params().deepToString());
69+
return sb.toString();
70+
}
7171
}

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

Lines changed: 44 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -31,59 +31,59 @@ abstract class QueryCommandBaseCodec<T, C extends QueryCommandBase<T>> extends C
3131
this.isQuery = DRDAQueryRequest.isQuery(cmd.sql());
3232
}
3333

34-
@Override
35-
public String toString() {
36-
StringBuilder sb = new StringBuilder(getClass().getSimpleName());
37-
sb.append("@");
38-
sb.append(Integer.toHexString(hashCode()));
39-
sb.append(" sql=" + cmd.sql());
40-
if (!isQuery)
41-
sb.append(", autoCommit=" + cmd.autoCommit());
42-
return sb.toString();
43-
}
34+
@Override
35+
public String toString() {
36+
StringBuilder sb = new StringBuilder(getClass().getSimpleName());
37+
sb.append("@");
38+
sb.append(Integer.toHexString(hashCode()));
39+
sb.append(" sql=" + cmd.sql());
40+
if (!isQuery)
41+
sb.append(", autoCommit=" + cmd.isAutoCommit());
42+
return sb.toString();
43+
}
4444

45-
@Override
46-
void encode(DB2Encoder encoder) {
47-
super.encode(encoder);
45+
@Override
46+
void encode(DB2Encoder encoder) {
47+
super.encode(encoder);
4848

49-
ByteBuf packet = allocateBuffer();
50-
int packetStartIdx = packet.writerIndex();
51-
DRDAQueryRequest req = new DRDAQueryRequest(packet, encoder.connMetadata);
52-
if (isQuery) {
53-
encodeQuery(req);
54-
} else {
55-
encodeUpdate(req);
56-
}
57-
req.completeCommand();
49+
ByteBuf packet = allocateBuffer();
50+
int packetStartIdx = packet.writerIndex();
51+
DRDAQueryRequest req = new DRDAQueryRequest(packet, encoder.connMetadata);
52+
if (isQuery) {
53+
encodeQuery(req);
54+
} else {
55+
encodeUpdate(req);
56+
}
57+
req.completeCommand();
5858

59-
sendPacket(packet, packet.writerIndex() - packetStartIdx);
60-
}
59+
sendPacket(packet, packet.writerIndex() - packetStartIdx);
60+
}
6161

62-
abstract void encodeQuery(DRDAQueryRequest req);
62+
abstract void encodeQuery(DRDAQueryRequest req);
6363

64-
abstract void encodeUpdate(DRDAQueryRequest req);
64+
abstract void encodeUpdate(DRDAQueryRequest req);
6565

66-
@Override
67-
void decodePayload(ByteBuf payload, int payloadLength) {
68-
if (isQuery) {
69-
decodeQuery(payload);
70-
} else {
71-
decodeUpdate(payload);
66+
@Override
67+
void decodePayload(ByteBuf payload, int payloadLength) {
68+
if (isQuery) {
69+
decodeQuery(payload);
70+
} else {
71+
decodeUpdate(payload);
72+
}
7273
}
73-
}
7474

75-
abstract void decodeQuery(ByteBuf payload);
75+
abstract void decodeQuery(ByteBuf payload);
7676

77-
abstract void decodeUpdate(ByteBuf payload);
77+
abstract void decodeUpdate(ByteBuf payload);
7878

79-
void handleQueryResult(RowResultDecoder<?, T> decoder) {
80-
Throwable failure = decoder.complete();
81-
T result = decoder.result();
82-
RowDesc rowDesc = decoder.rowDesc;
83-
int size = decoder.size();
84-
int updatedCount = decoder.size();
85-
decoder.reset();
86-
cmd.resultHandler().handleResult(updatedCount, size, rowDesc, result, failure);
87-
}
79+
void handleQueryResult(RowResultDecoder<?, T> decoder) {
80+
Throwable failure = decoder.complete();
81+
T result = decoder.result();
82+
RowDesc rowDesc = decoder.rowDesc;
83+
int size = decoder.size();
84+
int updatedCount = decoder.size();
85+
decoder.reset();
86+
cmd.resultHandler().handleResult(updatedCount, size, rowDesc, result, failure);
87+
}
8888

8989
}

0 commit comments

Comments
 (0)