-
Notifications
You must be signed in to change notification settings - Fork 206
Closed
Description
When an Oracle pooled connection is created on a specific context, and then later another context uses it for query, an IllegalStateException is thrown:
java.lang.IllegalStateException
at io.vertx.oracleclient.impl.CommandHandler.afterAcquire(CommandHandler.java:88)
at io.vertx.oracleclient.spi.OracleDriver.lambda$newPoolImpl$1(OracleDriver.java:60)
at io.vertx.sqlclient.impl.pool.SqlConnectionPool.lambda$execute$5(SqlConnectionPool.java:161)
at io.vertx.core.impl.future.Composition.onSuccess(Composition.java:38)
at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60)
at io.vertx.core.impl.future.FutureImpl.addListener(FutureImpl.java:196)
at io.vertx.core.impl.future.PromiseImpl.addListener(PromiseImpl.java:23)
at io.vertx.core.impl.future.FutureBase.compose(FutureBase.java:84)
at io.vertx.core.impl.future.PromiseImpl.compose(PromiseImpl.java:23)
at io.vertx.core.Future.compose(Future.java:199)
at io.vertx.sqlclient.impl.pool.SqlConnectionPool.execute(SqlConnectionPool.java:157)
at io.vertx.sqlclient.impl.PoolImpl.schedule(PoolImpl.java:161)
at io.vertx.sqlclient.impl.QueryExecutor.executeSimpleQuery(QueryExecutor.java:93)
at io.vertx.sqlclient.impl.SqlClientBase$QueryImpl.execute(SqlClientBase.java:120)
at io.vertx.sqlclient.impl.SqlClientBase$QueryImpl.execute(SqlClientBase.java:109)
Reproducer:
@Test
public void testDirectQueryFromDuplicatedContext(TestContext ctx) {
OraclePool pool = createPool(options, new PoolOptions().setMaxSize(1));
Async async = ctx.async();
vertx.runOnContext(v1 -> {
ContextInternal current = (ContextInternal) Vertx.currentContext();
pool.query("SELECT 1 FROM DUAL").execute(ctx.asyncAssertSuccess(res1 -> {
ctx.assertTrue(Vertx.currentContext() == current);
ContextInternal duplicated = current.duplicate();
duplicated.runOnContext(v2 -> {
pool.query("SELECT 1 FROM DUAL").execute(ctx.asyncAssertSuccess(res2 -> {
ctx.assertTrue(Vertx.currentContext() == duplicated);
async.complete();
}));
});
}));
});
}