Skip to content

Commit 3d71a14

Browse files
committed
Add in_use metrics for sql connection pool
Should fix #278
1 parent 125df2f commit 3d71a14

File tree

1 file changed

+27
-0
lines changed

1 file changed

+27
-0
lines changed

vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/pool/SqlConnectionPool.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,27 @@ private void dequeueMetric(Object metric) {
181181
}
182182
}
183183

184+
private Object beginMetric() {
185+
if (metrics != null) {
186+
try {
187+
return metrics.begin();
188+
} catch (Exception e) {
189+
//
190+
}
191+
}
192+
return NO_METRICS;
193+
}
194+
195+
private void endMetric(Object metric) {
196+
if (metrics != null && metric != NO_METRICS) {
197+
try {
198+
metrics.end(metric);
199+
} catch (Exception e) {
200+
//
201+
}
202+
}
203+
}
204+
184205
// TODO : try optimize without promise
185206
public <R> void execute(CommandBase<R> cmd, Completable<R> handler) {
186207
ContextInternal context = vertx.getOrCreateContext();
@@ -191,6 +212,8 @@ public <R> void execute(CommandBase<R> cmd, Completable<R> handler) {
191212
dequeueMetric(metric);
192213
PooledConnection pooled = lease.get();
193214
Connection conn = pooled.conn;
215+
Object useMetric = beginMetric();
216+
194217
Future<R> future;
195218
if (afterAcquire != null) {
196219
future = afterAcquire.apply(conn)
@@ -202,6 +225,7 @@ public <R> void execute(CommandBase<R> cmd, Completable<R> handler) {
202225
future = pp;
203226
}
204227
return future.andThen(ar -> {
228+
endMetric(useMetric);
205229
pooled.refresh();
206230
lease.recycle();
207231
});
@@ -244,6 +268,7 @@ public void complete(Lease<PooledConnection> lease, Throwable failure) {
244268
private void handle(Lease<PooledConnection> lease) {
245269
dequeueMetric(metric);
246270
PooledConnection pooled = lease.get();
271+
pooled.usage = beginMetric();
247272
pooled.lease = lease;
248273
handler.succeed(pooled);
249274
}
@@ -303,6 +328,7 @@ public class PooledConnection implements Connection, Connection.Holder {
303328
private Holder holder;
304329
private Promise<ConnectResult<PooledConnection>> poolCallback;
305330
private Lease<PooledConnection> lease;
331+
private Object usage;
306332
public long idleEvictionTimestamp;
307333
public long lifetimeEvictionTimestamp;
308334

@@ -443,6 +469,7 @@ private void doClose(Holder holder, Completable<Void> promise) {
443469
}
444470

445471
private void cleanup(Completable<Void> promise) {
472+
endMetric(usage);
446473
Lease<PooledConnection> l = this.lease;
447474
this.lease = null;
448475
refresh();

0 commit comments

Comments
 (0)