-
-
Notifications
You must be signed in to change notification settings - Fork 139
Description
Bug Report
I am using r2dbc-pool with jasync-mysql and spring. The application is a web application.
I have been experienced error when getting database connection occasionally. I suspect that it is due to the reactor subscription being cancelled. (Eg. web connection is closed)
Versions
jasync-mysql-2.2.4
jasync-pool-2.2.4
r2dbc-pool 1.0.1
r2dbc-spi 1.0.0
reactor-pool-1.0.1
spring-r2dbc 6.0.11
java 17.0.1
Current Behavior
When creating a new connection, it will set the transaction isolation level
When borrowing a connection, it will test the connection by running a query select 1
But occasionly it strangely test the connection twice and run into ConnectionStillRunningQueryException
error
And You can see in the log, the connection
- Set isolation level
- Test connection
- Test connection again (without waiting for the first test to finish)
- ConnectionStillRunningQueryException error
ps. I have retry logic if it fails to acquire connection. You may ignore that in the log
From the stacktrace, I notice a line
at io.r2dbc.pool.MonoDiscardOnCancel.subscribe(MonoDiscardOnCancel.java:50) ~[r2dbc-pool-1.0.1.RELEASE.jar!/:1.0.1.RELEASE]
which may indicate the second test is triggered by a cancel subscription.
I suspect that, when the reactor subscription is cancelled, it will test the connection before returning it to the pool. But as there's running query there, it causes a concurrent running issue.
The init code of the ConnectionFactory
ConnectionFactoryOptions.Builder builder = ConnectionFactoryOptions.builder()
.option(DRIVER, "pool")
.option(PROTOCOL, "mysql")
.option(HOST, host)
.option(PORT, port)
.option(USER, username)
.option(PASSWORD, password)
.option(DATABASE, schema)
.option(Option.valueOf("applicationName"), this.getClass().getSimpleName())
.option(Option.valueOf("initialSize"), initialSize)
.option(Option.valueOf("maxSize"), maxSize)
.option(Option.valueOf("backgroundEvictionInterval"), Duration.ofMinutes(1))
.option(Option.valueOf("minIdle"), initialSize)
.option(Option.valueOf("maxIdleTime"), maxIdleTime)
.option(Option.valueOf("maxAcquireTime"), Duration.ofMillis(2000L))
.option(Option.valueOf("maxLifeTime"), Duration.ofHours(4L))
.option(Option.<Function<? super Connection, ? extends Publisher<Void>>>valueOf("postAllocate"), this::initIsolationLevel)
.option(Option.valueOf("validationDepth"), ValidationDepth.REMOTE)
.option(Option.valueOf("validationQuery"), "select 1");
Detailed Log and Stack Trace
2023-11-01 12:22:52
11-01 04:22:52 DEBUG - <mysql-connection-63> Connected to database (?:)
2023-11-01 12:22:52
11-01 04:22:52 TRACE - <mysql-connection-63> sendQuery() - SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED (?:)
2023-11-01 12:22:53
11-01 04:22:53 TRACE - <mysql-connection-63> sendQuery() - select 1 (?:)
2023-11-01 12:22:53
11-01 04:22:53 TRACE - <mysql-connection-63> sendQuery() - select 1 (?:)
2023-11-01 12:22:53
11-01 04:22:53 TRACE - close connection <mysql-connection-63> (?:)
2023-11-01 12:22:53
11-01 04:22:53 TRACE - send quit message <mysql-connection-63> (?:)
2023-11-01 12:22:53
11-01 04:22:53 TRACE - close channel <mysql-connection-63> (?:)
2023-11-01 12:22:53
11-01 04:22:53 DEBUG - <mysql-connection-63> - client got disconnected with no running query (?:)
2023-11-01 12:22:53
11-01 04:22:53 TRACE - close connection <mysql-connection-63> (?:)
2023-11-01 12:22:53
11-01 04:22:53 TRACE - channel was closed <mysql-connection-63> (?:)
2023-11-01 12:22:53
11-01 04:22:53 ERROR - Error when getting database connection. Will retry 1 (?:)
org.springframework.dao.DataAccessResourceFailureException: Failed to obtain R2DBC Connection
at org.springframework.r2dbc.connection.ConnectionFactoryUtils.lambda$getConnection$0(ConnectionFactoryUtils.java:90) ~[spring-r2dbc-6.0.11.jar!/:6.0.11]
Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException:
Assembly trace from producer [reactor.core.publisher.MonoError] :
Error has been observed at the following site(s):
*__Mono.onErrorMap ⇢ at org.springframework.r2dbc.connection.ConnectionFactoryUtils.getConnection(ConnectionFactoryUtils.java:90)
|_ Mono.map ⇢ at org.springframework.r2dbc.core.DefaultDatabaseClient.inConnection(DefaultDatabaseClient.java:113)
*___Mono.usingWhen ⇢ at org.springframework.r2dbc.core.DefaultDatabaseClient.inConnection(DefaultDatabaseClient.java:116)
|_ Mono.onErrorMap ⇢ at org.springframework.r2dbc.core.DefaultDatabaseClient.inConnection(DefaultDatabaseClient.java:128)
Original Stack Trace:
at org.springframework.r2dbc.connection.ConnectionFactoryUtils.lambda$getConnection$0(ConnectionFactoryUtils.java:90) ~[spring-r2dbc-6.0.11.jar!/:6.0.11]
at reactor.core.publisher.Mono.lambda$onErrorMap$28(Mono.java:3783) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:94) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:106) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.Operators.error(Operators.java:198) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.MonoError.subscribe(MonoError.java:53) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.Mono.subscribe(Mono.java:4495) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:103) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.MonoFlatMap$FlatMapMain.secondError(MonoFlatMap.java:241) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.MonoFlatMap$FlatMapInner.onError(MonoFlatMap.java:315) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.MonoFlatMap$FlatMapMain.onError(MonoFlatMap.java:180) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.FluxRetry$RetrySubscriber.onError(FluxRetry.java:95) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:106) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.Operators.error(Operators.java:198) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.MonoError.subscribe(MonoError.java:53) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.Mono.subscribe(Mono.java:4495) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:103) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber.onError(FluxContextWrite.java:121) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.SerializedSubscriber.onError(SerializedSubscriber.java:124) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.FluxTimeout$TimeoutMainSubscriber.onError(FluxTimeout.java:219) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.MonoFlatMap$FlatMapMain.secondError(MonoFlatMap.java:241) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.MonoFlatMap$FlatMapInner.onError(MonoFlatMap.java:315) ~[reactor-core-3.5.8.jar!/:3.5.8]
at io.r2dbc.pool.MonoDiscardOnCancel$MonoDiscardOnCancelSubscriber.onError(MonoDiscardOnCancel.java:98) ~[r2dbc-pool-1.0.1.RELEASE.jar!/:1.0.1.RELEASE]
at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:106) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.onError(MonoIgnoreThen.java:278) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.subscribeNext(MonoIgnoreThen.java:231) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.onComplete(MonoIgnoreThen.java:203) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.FluxDoFinally$DoFinallySubscriber.onComplete(FluxDoFinally.java:128) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.FluxDoFinally$DoFinallySubscriber.onComplete(FluxDoFinally.java:128) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.MonoIgnoreElements$IgnoreElementsSubscriber.onComplete(MonoIgnoreElements.java:89) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.MonoCompletionStage$MonoCompletionStageSubscription.apply(MonoCompletionStage.java:126) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.MonoCompletionStage$MonoCompletionStageSubscription.apply(MonoCompletionStage.java:71) ~[reactor-core-3.5.8.jar!/:3.5.8]
at java.base/java.util.concurrent.CompletableFuture.uniHandle(CompletableFuture.java:934) ~[?:?]
at java.base/java.util.concurrent.CompletableFuture$UniHandle.tryFire(CompletableFuture.java:911) ~[?:?]
at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510) ~[?:?]
at java.base/java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:2147) ~[?:?]
at com.github.jasync.sql.db.mysql.MySQLConnection$close$lambda$2$$inlined$onCompleteAsync$1.accept(FutureUtils.kt:110) ~[jasync-mysql-2.2.4.jar!/:?]
at com.github.jasync.sql.db.mysql.MySQLConnection$close$lambda$2$$inlined$onCompleteAsync$1.accept(FutureUtils.kt:92) ~[jasync-mysql-2.2.4.jar!/:?]
at java.base/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:863) ~[?:?]
at java.base/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:841) ~[?:?]
at java.base/java.util.concurrent.CompletableFuture$Completion.run(CompletableFuture.java:482) ~[?:?]
at java.base/java.lang.Thread.run(Thread.java:840) [?:?]
Caused by: com.github.jasync.r2dbc.mysql.JasyncDatabaseException: Unknown exception
at com.github.jasync.r2dbc.mysql.JasyncStatement.mapException(JasyncStatement.kt:261) ~[jasync-r2dbc-mysql-2.2.4.jar!/:?]
Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException:
Assembly trace from producer [reactor.core.publisher.MonoError] :
Error has been observed at the following site(s):
*_____Flux.onErrorMap ⇢ at reactor.kotlin.core.publisher.FluxExtensionsKt.onErrorMap(FluxExtensions.kt:172)
|_ Flux.flatMap ⇢ at io.r2dbc.pool.Validation.validate(Validation.java:33)
|_ Flux.then ⇢ at io.r2dbc.pool.Validation.validate(Validation.java:33)
*_____Mono.thenReturn ⇢ at io.r2dbc.pool.ConnectionPool.getValidConnection(ConnectionPool.java:176)
*___________Mono.then ⇢ at io.r2dbc.pool.ConnectionPool.lambda$null$5(ConnectionPool.java:137)
|_ Mono.onErrorResume ⇢ at io.r2dbc.pool.ConnectionPool.lambda$null$5(ConnectionPool.java:140)
*___________Mono.then ⇢ at io.r2dbc.pool.ConnectionPool.lambda$null$3(ConnectionPool.java:140)
*________Mono.flatMap ⇢ at io.r2dbc.pool.ConnectionPool.lambda$new$12(ConnectionPool.java:115)
|_ Mono.timeout ⇢ at io.r2dbc.pool.ConnectionPool.lambda$new$12(ConnectionPool.java:157)
|_ Mono.contextWrite ⇢ at io.r2dbc.pool.ConnectionPool.lambda$new$12(ConnectionPool.java:157)
|_ Mono.onErrorMap ⇢ at io.r2dbc.pool.ConnectionPool.lambda$new$12(ConnectionPool.java:168)
*__________Mono.defer ⇢ at io.r2dbc.pool.ConnectionPool.<init>(ConnectionPool.java:112)
|_ Mono.retry ⇢ at io.r2dbc.pool.ConnectionPool.<init>(ConnectionPool.java:172)
|_ Mono.flatMap ⇢ at org.springframework.r2dbc.connection.ConnectionFactoryUtils.lambda$doGetConnection$4(ConnectionFactoryUtils.java:118)
*________Mono.flatMap ⇢ at org.springframework.r2dbc.connection.ConnectionFactoryUtils.doGetConnection(ConnectionFactoryUtils.java:104)
|_ Mono.onErrorResume ⇢ at org.springframework.r2dbc.connection.ConnectionFactoryUtils.doGetConnection(ConnectionFactoryUtils.java:139)
Original Stack Trace:
at com.github.jasync.r2dbc.mysql.JasyncStatement.mapException(JasyncStatement.kt:261) ~[jasync-r2dbc-mysql-2.2.4.jar!/:?]
at com.github.jasync.r2dbc.mysql.JasyncStatement.access$mapException(JasyncStatement.kt:30) ~[jasync-r2dbc-mysql-2.2.4.jar!/:?]
at com.github.jasync.r2dbc.mysql.JasyncStatement$execute$4.invoke(JasyncStatement.kt:122) ~[jasync-r2dbc-mysql-2.2.4.jar!/:?]
at com.github.jasync.r2dbc.mysql.JasyncStatement$execute$4.invoke(JasyncStatement.kt:120) ~[jasync-r2dbc-mysql-2.2.4.jar!/:?]
at reactor.kotlin.core.publisher.FluxExtensionsKt.onErrorMap$lambda-1(FluxExtensions.kt:172) ~[reactor-kotlin-extensions-1.2.2.jar!/:1.2.2]
at reactor.core.publisher.Flux.lambda$onErrorMap$28(Flux.java:7236) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.Flux.lambda$onErrorResume$29(Flux.java:7289) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:94) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onError(FluxMapFuseable.java:142) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.Operators.error(Operators.java:198) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.FluxFlatMap.trySubscribeScalarMap(FluxFlatMap.java:161) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.MonoFlatMapMany.subscribeOrReturn(MonoFlatMapMany.java:49) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.Mono.subscribe(Mono.java:4480) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.subscribeNext(MonoIgnoreThen.java:263) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.MonoIgnoreThen.subscribe(MonoIgnoreThen.java:51) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.subscribeNext(MonoIgnoreThen.java:240) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.onComplete(MonoIgnoreThen.java:203) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.Operators.complete(Operators.java:137) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.MonoEmpty.subscribe(MonoEmpty.java:46) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:53) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.Mono.subscribe(Mono.java:4495) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.subscribeNext(MonoIgnoreThen.java:263) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.MonoIgnoreThen.subscribe(MonoIgnoreThen.java:51) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) ~[reactor-core-3.5.8.jar!/:3.5.8]
at io.r2dbc.pool.MonoDiscardOnCancel.subscribe(MonoDiscardOnCancel.java:50) ~[r2dbc-pool-1.0.1.RELEASE.jar!/:1.0.1.RELEASE]
at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:165) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.pool.AbstractPool$Borrower.deliver(AbstractPool.java:467) ~[reactor-pool-1.0.1.jar!/:1.0.1]
at reactor.pool.SimpleDequePool.lambda$drainLoop$8(SimpleDequePool.java:372) ~[reactor-pool-1.0.1.jar!/:1.0.1]
at reactor.core.scheduler.ImmediateScheduler.schedule(ImmediateScheduler.java:52) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.pool.SimpleDequePool.drainLoop(SimpleDequePool.java:372) ~[reactor-pool-1.0.1.jar!/:1.0.1]
at reactor.pool.SimpleDequePool.pendingOffer(SimpleDequePool.java:604) ~[reactor-pool-1.0.1.jar!/:1.0.1]
at reactor.pool.SimpleDequePool.doAcquire(SimpleDequePool.java:298) ~[reactor-pool-1.0.1.jar!/:1.0.1]
at reactor.pool.AbstractPool$Borrower.request(AbstractPool.java:430) ~[reactor-pool-1.0.1.jar!/:1.0.1]
at reactor.core.publisher.MonoFlatMap$FlatMapMain.request(MonoFlatMap.java:194) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.request(Operators.java:2305) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.SerializedSubscriber.request(SerializedSubscriber.java:151) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber.request(FluxContextWrite.java:136) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.set(Operators.java:2341) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onSubscribe(FluxOnErrorResume.java:74) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber.onSubscribe(FluxContextWrite.java:101) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.SerializedSubscriber.onSubscribe(SerializedSubscriber.java:65) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.FluxTimeout$TimeoutMainSubscriber.onSubscribe(FluxTimeout.java:154) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.MonoFlatMap$FlatMapMain.onSubscribe(MonoFlatMap.java:117) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.pool.SimpleDequePool$QueueBorrowerMono.subscribe(SimpleDequePool.java:722) ~[reactor-pool-1.0.1.jar!/:1.0.1]
at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:53) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.FluxRetry$RetrySubscriber.resubscribe(FluxRetry.java:117) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.FluxRetry$RetrySubscriber.onError(FluxRetry.java:101) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:106) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.Operators.error(Operators.java:198) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.MonoError.subscribe(MonoError.java:53) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.Mono.subscribe(Mono.java:4495) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:103) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber.onError(FluxContextWrite.java:121) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.SerializedSubscriber.onError(SerializedSubscriber.java:124) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.FluxTimeout$TimeoutMainSubscriber.handleTimeout(FluxTimeout.java:295) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.FluxTimeout$TimeoutMainSubscriber.doTimeout(FluxTimeout.java:280) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.FluxTimeout$TimeoutTimeoutSubscriber.onNext(FluxTimeout.java:419) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.FluxOnErrorReturn$ReturnSubscriber.onNext(FluxOnErrorReturn.java:162) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.MonoDelay$MonoDelayRunnable.propagateDelay(MonoDelay.java:271) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.MonoDelay$MonoDelayRunnable.run(MonoDelay.java:286) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:68) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:28) ~[reactor-core-3.5.8.jar!/:3.5.8]
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[?:?]
at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) ~[?:?]
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[?:?]
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[?:?]
at java.base/java.lang.Thread.run(Thread.java:840) [?:?]
Caused by: com.github.jasync.sql.db.exceptions.ConnectionStillRunningQueryException: <<mysql-connection-63>> - There is a query still being run here - race -> false
at com.github.jasync.sql.db.mysql.MySQLConnection.validateIsReadyForQuery(MySQLConnection.kt:502) ~[jasync-mysql-2.2.4.jar!/:?]
Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException:
Assembly trace from producer [reactor.core.publisher.MonoFlatMapMany] :
reactor.core.publisher.Mono.flatMapMany(Mono.java:3117)
com.github.jasync.r2dbc.mysql.JasyncStatement.execute(JasyncStatement.kt:95)
Error has been observed at the following site(s):
*__Mono.flatMapMany ⇢ at com.github.jasync.r2dbc.mysql.JasyncStatement.execute(JasyncStatement.kt:95)
|_ Flux.map ⇢ at com.github.jasync.r2dbc.mysql.JasyncStatement.execute(JasyncStatement.kt:111)
Original Stack Trace:
at com.github.jasync.sql.db.mysql.MySQLConnection.validateIsReadyForQuery(MySQLConnection.kt:502) ~[jasync-mysql-2.2.4.jar!/:?]
at com.github.jasync.sql.db.mysql.MySQLConnection.sendQueryDirect(MySQLConnection.kt:407) ~[jasync-mysql-2.2.4.jar!/:?]
at com.github.jasync.sql.db.ConcreteConnectionBase$sendQuery$1.invoke(ConcreteConnectionBase.kt:59) ~[jasync-common-2.2.4.jar!/:?]
at com.github.jasync.sql.db.ConcreteConnectionBase$sendQuery$1.invoke(ConcreteConnectionBase.kt:58) ~[jasync-common-2.2.4.jar!/:?]
at com.github.jasync.sql.db.interceptor.ConnectionInterceptorHelperKt.wrapQueryWithInterceptors(ConnectionInterceptorHelper.kt:13) ~[jasync-common-2.2.4.jar!/:?]
at com.github.jasync.sql.db.ConcreteConnectionBase.sendQuery(ConcreteConnectionBase.kt:58) ~[jasync-common-2.2.4.jar!/:?]
at com.github.jasync.r2dbc.mysql.JasyncStatement$execute$2.invoke(JasyncStatement.kt:108) ~[jasync-r2dbc-mysql-2.2.4.jar!/:?]
at com.github.jasync.r2dbc.mysql.JasyncStatement$execute$2.invoke(JasyncStatement.kt:95) ~[jasync-r2dbc-mysql-2.2.4.jar!/:?]
at com.github.jasync.r2dbc.mysql.JasyncStatement.execute$lambda$3(JasyncStatement.kt:95) ~[jasync-r2dbc-mysql-2.2.4.jar!/:?]
at reactor.core.publisher.FluxFlatMap.trySubscribeScalarMap(FluxFlatMap.java:152) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.MonoFlatMapMany.subscribeOrReturn(MonoFlatMapMany.java:49) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.Mono.subscribe(Mono.java:4480) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.subscribeNext(MonoIgnoreThen.java:263) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.MonoIgnoreThen.subscribe(MonoIgnoreThen.java:51) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.subscribeNext(MonoIgnoreThen.java:240) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.onComplete(MonoIgnoreThen.java:203) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.Operators.complete(Operators.java:137) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.MonoEmpty.subscribe(MonoEmpty.java:46) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:53) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.Mono.subscribe(Mono.java:4495) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.subscribeNext(MonoIgnoreThen.java:263) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.MonoIgnoreThen.subscribe(MonoIgnoreThen.java:51) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) ~[reactor-core-3.5.8.jar!/:3.5.8]
at io.r2dbc.pool.MonoDiscardOnCancel.subscribe(MonoDiscardOnCancel.java:50) ~[r2dbc-pool-1.0.1.RELEASE.jar!/:1.0.1.RELEASE]
at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:165) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.pool.AbstractPool$Borrower.deliver(AbstractPool.java:467) ~[reactor-pool-1.0.1.jar!/:1.0.1]
at reactor.pool.SimpleDequePool.lambda$drainLoop$8(SimpleDequePool.java:372) ~[reactor-pool-1.0.1.jar!/:1.0.1]
at reactor.core.scheduler.ImmediateScheduler.schedule(ImmediateScheduler.java:52) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.pool.SimpleDequePool.drainLoop(SimpleDequePool.java:372) ~[reactor-pool-1.0.1.jar!/:1.0.1]
at reactor.pool.SimpleDequePool.pendingOffer(SimpleDequePool.java:604) ~[reactor-pool-1.0.1.jar!/:1.0.1]
at reactor.pool.SimpleDequePool.doAcquire(SimpleDequePool.java:298) ~[reactor-pool-1.0.1.jar!/:1.0.1]
at reactor.pool.AbstractPool$Borrower.request(AbstractPool.java:430) ~[reactor-pool-1.0.1.jar!/:1.0.1]
at reactor.core.publisher.MonoFlatMap$FlatMapMain.request(MonoFlatMap.java:194) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.request(Operators.java:2305) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.SerializedSubscriber.request(SerializedSubscriber.java:151) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber.request(FluxContextWrite.java:136) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.set(Operators.java:2341) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onSubscribe(FluxOnErrorResume.java:74) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber.onSubscribe(FluxContextWrite.java:101) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.SerializedSubscriber.onSubscribe(SerializedSubscriber.java:65) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.FluxTimeout$TimeoutMainSubscriber.onSubscribe(FluxTimeout.java:154) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.MonoFlatMap$FlatMapMain.onSubscribe(MonoFlatMap.java:117) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.pool.SimpleDequePool$QueueBorrowerMono.subscribe(SimpleDequePool.java:722) ~[reactor-pool-1.0.1.jar!/:1.0.1]
at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:53) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.FluxRetry$RetrySubscriber.resubscribe(FluxRetry.java:117) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.FluxRetry$RetrySubscriber.onError(FluxRetry.java:101) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:106) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.Operators.error(Operators.java:198) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.MonoError.subscribe(MonoError.java:53) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.Mono.subscribe(Mono.java:4495) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:103) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber.onError(FluxContextWrite.java:121) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.SerializedSubscriber.onError(SerializedSubscriber.java:124) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.FluxTimeout$TimeoutMainSubscriber.handleTimeout(FluxTimeout.java:295) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.FluxTimeout$TimeoutMainSubscriber.doTimeout(FluxTimeout.java:280) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.FluxTimeout$TimeoutTimeoutSubscriber.onNext(FluxTimeout.java:419) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.FluxOnErrorReturn$ReturnSubscriber.onNext(FluxOnErrorReturn.java:162) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.MonoDelay$MonoDelayRunnable.propagateDelay(MonoDelay.java:271) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.publisher.MonoDelay$MonoDelayRunnable.run(MonoDelay.java:286) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:68) ~[reactor-core-3.5.8.jar!/:3.5.8]
at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:28) ~[reactor-core-3.5.8.jar!/:3.5.8]
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[?:?]
at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) ~[?:?]
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[?:?]
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[?:?]
at java.base/java.lang.Thread.run(Thread.java:840) [?:?]