Title: [r2dbc-mysql] Occasional error when acquiring a new connection from the connection pool · Issue #421 · jasync-sql/jasync-sql · GitHub
Open Graph Title: [r2dbc-mysql] Occasional error when acquiring a new connection from the connection pool · Issue #421 · jasync-sql/jasync-sql
X Title: [r2dbc-mysql] Occasional error when acquiring a new connection from the connection pool · Issue #421 · jasync-sql/jasync-sql
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 ...
Open Graph 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 i...
X 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 i...
Opengraph URL: https://github.com/jasync-sql/jasync-sql/issues/421
X: @github
Domain: patch-diff.githubusercontent.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"[r2dbc-mysql] Occasional error when acquiring a new connection from the connection pool","articleBody":"## Bug Report\r\nI am using r2dbc-pool with jasync-mysql and spring. The application is a web application.\r\nI 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)\r\n\r\n#### Versions\r\njasync-mysql-2.2.4\r\njasync-pool-2.2.4\r\nr2dbc-pool 1.0.1\r\nr2dbc-spi 1.0.0\r\nreactor-pool-1.0.1\r\nspring-r2dbc 6.0.11\r\njava 17.0.1\r\n\r\n#### Current Behavior\r\nWhen creating a new connection, it will set the transaction isolation level\r\nWhen borrowing a connection, it will test the connection by running a query `select 1`\r\nBut occasionly it strangely test the connection twice and run into `ConnectionStillRunningQueryException` error\r\n\r\nAnd You can see in the log, the connection\r\n1. Set isolation level\r\n2. Test connection\r\n3. Test connection again (without waiting for the first test to finish)\r\n4. ConnectionStillRunningQueryException error\r\n\r\nps. I have retry logic if it fails to acquire connection. You may ignore that in the log\r\n\r\nFrom the stacktrace, I notice a line\r\n```at io.r2dbc.pool.MonoDiscardOnCancel.subscribe(MonoDiscardOnCancel.java:50) ~[r2dbc-pool-1.0.1.RELEASE.jar!/:1.0.1.RELEASE]```\r\nwhich may indicate the second test is triggered by a cancel subscription.\r\nI 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.\r\n\r\nThe init code of the ConnectionFactory\r\n```\r\nConnectionFactoryOptions.Builder builder = ConnectionFactoryOptions.builder()\r\n\t\t\t\t.option(DRIVER, \"pool\")\r\n\t\t\t\t.option(PROTOCOL, \"mysql\")\r\n\t\t\t\t.option(HOST, host)\r\n\t\t\t\t.option(PORT, port)\r\n\t\t\t\t.option(USER, username)\r\n\t\t\t\t.option(PASSWORD, password)\r\n\t\t\t\t.option(DATABASE, schema)\r\n\t\t\t\t.option(Option.valueOf(\"applicationName\"), this.getClass().getSimpleName())\r\n\t\t\t\t.option(Option.valueOf(\"initialSize\"), initialSize)\r\n\t\t\t\t.option(Option.valueOf(\"maxSize\"), maxSize)\r\n\t\t\t\t.option(Option.valueOf(\"backgroundEvictionInterval\"), Duration.ofMinutes(1))\r\n\t\t\t\t.option(Option.valueOf(\"minIdle\"), initialSize)\r\n\t\t\t\t.option(Option.valueOf(\"maxIdleTime\"), maxIdleTime)\r\n\t\t\t\t.option(Option.valueOf(\"maxAcquireTime\"), Duration.ofMillis(2000L))\r\n\t\t\t\t.option(Option.valueOf(\"maxLifeTime\"), Duration.ofHours(4L))\r\n\t\t\t\t.option(Option.\u003cFunction\u003c? super Connection, ? extends Publisher\u003cVoid\u003e\u003e\u003evalueOf(\"postAllocate\"), this::initIsolationLevel)\r\n\t\t\t\t.option(Option.valueOf(\"validationDepth\"), ValidationDepth.REMOTE)\r\n\t\t\t\t.option(Option.valueOf(\"validationQuery\"), \"select 1\");\r\n```\r\n\r\n\u003cdetails\u003e\r\n\u003csummary\u003eDetailed Log and Stack Trace\u003c/summary\u003e\r\n\r\n```\r\n2023-11-01 12:22:52\t\r\n11-01 04:22:52 DEBUG - \u003cmysql-connection-63\u003e Connected to database (?:)\r\n2023-11-01 12:22:52\t\r\n11-01 04:22:52 TRACE - \u003cmysql-connection-63\u003e sendQuery() - SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED (?:)\r\n2023-11-01 12:22:53\t\r\n11-01 04:22:53 TRACE - \u003cmysql-connection-63\u003e sendQuery() - select 1 (?:)\r\n2023-11-01 12:22:53\t\r\n11-01 04:22:53 TRACE - \u003cmysql-connection-63\u003e sendQuery() - select 1 (?:)\r\n2023-11-01 12:22:53\t\r\n11-01 04:22:53 TRACE - close connection \u003cmysql-connection-63\u003e (?:)\r\n2023-11-01 12:22:53\t\r\n11-01 04:22:53 TRACE - send quit message \u003cmysql-connection-63\u003e (?:)\r\n2023-11-01 12:22:53\t\r\n11-01 04:22:53 TRACE - close channel \u003cmysql-connection-63\u003e (?:)\r\n2023-11-01 12:22:53\t\r\n11-01 04:22:53 DEBUG - \u003cmysql-connection-63\u003e - client got disconnected with no running query (?:)\r\n2023-11-01 12:22:53\t\r\n11-01 04:22:53 TRACE - close connection \u003cmysql-connection-63\u003e (?:)\r\n2023-11-01 12:22:53\t\r\n11-01 04:22:53 TRACE - channel was closed \u003cmysql-connection-63\u003e (?:)\r\n2023-11-01 12:22:53\t\r\n11-01 04:22:53 ERROR - Error when getting database connection. Will retry 1 (?:)\r\norg.springframework.dao.DataAccessResourceFailureException: Failed to obtain R2DBC Connection\r\n\tat org.springframework.r2dbc.connection.ConnectionFactoryUtils.lambda$getConnection$0(ConnectionFactoryUtils.java:90) ~[spring-r2dbc-6.0.11.jar!/:6.0.11]\r\n\tSuppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException: \r\nAssembly trace from producer [reactor.core.publisher.MonoError] :\r\n\r\nError has been observed at the following site(s):\r\n\t*__Mono.onErrorMap ⇢ at org.springframework.r2dbc.connection.ConnectionFactoryUtils.getConnection(ConnectionFactoryUtils.java:90)\r\n\t|_ Mono.map ⇢ at org.springframework.r2dbc.core.DefaultDatabaseClient.inConnection(DefaultDatabaseClient.java:113)\r\n\t*___Mono.usingWhen ⇢ at org.springframework.r2dbc.core.DefaultDatabaseClient.inConnection(DefaultDatabaseClient.java:116)\r\n\t|_ Mono.onErrorMap ⇢ at org.springframework.r2dbc.core.DefaultDatabaseClient.inConnection(DefaultDatabaseClient.java:128)\r\nOriginal Stack Trace:\r\n\t\tat org.springframework.r2dbc.connection.ConnectionFactoryUtils.lambda$getConnection$0(ConnectionFactoryUtils.java:90) ~[spring-r2dbc-6.0.11.jar!/:6.0.11]\r\n\t\tat reactor.core.publisher.Mono.lambda$onErrorMap$28(Mono.java:3783) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:94) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:106) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.Operators.error(Operators.java:198) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.MonoError.subscribe(MonoError.java:53) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.Mono.subscribe(Mono.java:4495) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:103) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.MonoFlatMap$FlatMapMain.secondError(MonoFlatMap.java:241) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.MonoFlatMap$FlatMapInner.onError(MonoFlatMap.java:315) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.MonoFlatMap$FlatMapMain.onError(MonoFlatMap.java:180) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.FluxRetry$RetrySubscriber.onError(FluxRetry.java:95) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:106) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.Operators.error(Operators.java:198) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.MonoError.subscribe(MonoError.java:53) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.Mono.subscribe(Mono.java:4495) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:103) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber.onError(FluxContextWrite.java:121) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.SerializedSubscriber.onError(SerializedSubscriber.java:124) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.FluxTimeout$TimeoutMainSubscriber.onError(FluxTimeout.java:219) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.MonoFlatMap$FlatMapMain.secondError(MonoFlatMap.java:241) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.MonoFlatMap$FlatMapInner.onError(MonoFlatMap.java:315) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat io.r2dbc.pool.MonoDiscardOnCancel$MonoDiscardOnCancelSubscriber.onError(MonoDiscardOnCancel.java:98) ~[r2dbc-pool-1.0.1.RELEASE.jar!/:1.0.1.RELEASE]\r\n\t\tat reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:106) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.onError(MonoIgnoreThen.java:278) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.subscribeNext(MonoIgnoreThen.java:231) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.onComplete(MonoIgnoreThen.java:203) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.FluxDoFinally$DoFinallySubscriber.onComplete(FluxDoFinally.java:128) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.FluxDoFinally$DoFinallySubscriber.onComplete(FluxDoFinally.java:128) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.MonoIgnoreElements$IgnoreElementsSubscriber.onComplete(MonoIgnoreElements.java:89) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.MonoCompletionStage$MonoCompletionStageSubscription.apply(MonoCompletionStage.java:126) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.MonoCompletionStage$MonoCompletionStageSubscription.apply(MonoCompletionStage.java:71) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat java.base/java.util.concurrent.CompletableFuture.uniHandle(CompletableFuture.java:934) ~[?:?]\r\n\t\tat java.base/java.util.concurrent.CompletableFuture$UniHandle.tryFire(CompletableFuture.java:911) ~[?:?]\r\n\t\tat java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510) ~[?:?]\r\n\t\tat java.base/java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:2147) ~[?:?]\r\n\t\tat com.github.jasync.sql.db.mysql.MySQLConnection$close$lambda$2$$inlined$onCompleteAsync$1.accept(FutureUtils.kt:110) ~[jasync-mysql-2.2.4.jar!/:?]\r\n\t\tat com.github.jasync.sql.db.mysql.MySQLConnection$close$lambda$2$$inlined$onCompleteAsync$1.accept(FutureUtils.kt:92) ~[jasync-mysql-2.2.4.jar!/:?]\r\n\t\tat java.base/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:863) ~[?:?]\r\n\t\tat java.base/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:841) ~[?:?]\r\n\t\tat java.base/java.util.concurrent.CompletableFuture$Completion.run(CompletableFuture.java:482) ~[?:?]\r\n\t\tat java.base/java.lang.Thread.run(Thread.java:840) [?:?]\r\nCaused by: com.github.jasync.r2dbc.mysql.JasyncDatabaseException: Unknown exception\r\n\tat com.github.jasync.r2dbc.mysql.JasyncStatement.mapException(JasyncStatement.kt:261) ~[jasync-r2dbc-mysql-2.2.4.jar!/:?]\r\n\tSuppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException: \r\nAssembly trace from producer [reactor.core.publisher.MonoError] :\r\n\r\nError has been observed at the following site(s):\r\n\t*_____Flux.onErrorMap ⇢ at reactor.kotlin.core.publisher.FluxExtensionsKt.onErrorMap(FluxExtensions.kt:172)\r\n\t|_ Flux.flatMap ⇢ at io.r2dbc.pool.Validation.validate(Validation.java:33)\r\n\t|_ Flux.then ⇢ at io.r2dbc.pool.Validation.validate(Validation.java:33)\r\n\t*_____Mono.thenReturn ⇢ at io.r2dbc.pool.ConnectionPool.getValidConnection(ConnectionPool.java:176)\r\n\t*___________Mono.then ⇢ at io.r2dbc.pool.ConnectionPool.lambda$null$5(ConnectionPool.java:137)\r\n\t|_ Mono.onErrorResume ⇢ at io.r2dbc.pool.ConnectionPool.lambda$null$5(ConnectionPool.java:140)\r\n\t*___________Mono.then ⇢ at io.r2dbc.pool.ConnectionPool.lambda$null$3(ConnectionPool.java:140)\r\n\t*________Mono.flatMap ⇢ at io.r2dbc.pool.ConnectionPool.lambda$new$12(ConnectionPool.java:115)\r\n\t|_ Mono.timeout ⇢ at io.r2dbc.pool.ConnectionPool.lambda$new$12(ConnectionPool.java:157)\r\n\t|_ Mono.contextWrite ⇢ at io.r2dbc.pool.ConnectionPool.lambda$new$12(ConnectionPool.java:157)\r\n\t|_ Mono.onErrorMap ⇢ at io.r2dbc.pool.ConnectionPool.lambda$new$12(ConnectionPool.java:168)\r\n\t*__________Mono.defer ⇢ at io.r2dbc.pool.ConnectionPool.\u003cinit\u003e(ConnectionPool.java:112)\r\n\t|_ Mono.retry ⇢ at io.r2dbc.pool.ConnectionPool.\u003cinit\u003e(ConnectionPool.java:172)\r\n\t|_ Mono.flatMap ⇢ at org.springframework.r2dbc.connection.ConnectionFactoryUtils.lambda$doGetConnection$4(ConnectionFactoryUtils.java:118)\r\n\t*________Mono.flatMap ⇢ at org.springframework.r2dbc.connection.ConnectionFactoryUtils.doGetConnection(ConnectionFactoryUtils.java:104)\r\n\t|_ Mono.onErrorResume ⇢ at org.springframework.r2dbc.connection.ConnectionFactoryUtils.doGetConnection(ConnectionFactoryUtils.java:139)\r\nOriginal Stack Trace:\r\n\t\tat com.github.jasync.r2dbc.mysql.JasyncStatement.mapException(JasyncStatement.kt:261) ~[jasync-r2dbc-mysql-2.2.4.jar!/:?]\r\n\t\tat com.github.jasync.r2dbc.mysql.JasyncStatement.access$mapException(JasyncStatement.kt:30) ~[jasync-r2dbc-mysql-2.2.4.jar!/:?]\r\n\t\tat com.github.jasync.r2dbc.mysql.JasyncStatement$execute$4.invoke(JasyncStatement.kt:122) ~[jasync-r2dbc-mysql-2.2.4.jar!/:?]\r\n\t\tat com.github.jasync.r2dbc.mysql.JasyncStatement$execute$4.invoke(JasyncStatement.kt:120) ~[jasync-r2dbc-mysql-2.2.4.jar!/:?]\r\n\t\tat reactor.kotlin.core.publisher.FluxExtensionsKt.onErrorMap$lambda-1(FluxExtensions.kt:172) ~[reactor-kotlin-extensions-1.2.2.jar!/:1.2.2]\r\n\t\tat reactor.core.publisher.Flux.lambda$onErrorMap$28(Flux.java:7236) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.Flux.lambda$onErrorResume$29(Flux.java:7289) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:94) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onError(FluxMapFuseable.java:142) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.Operators.error(Operators.java:198) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.FluxFlatMap.trySubscribeScalarMap(FluxFlatMap.java:161) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.MonoFlatMapMany.subscribeOrReturn(MonoFlatMapMany.java:49) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.Mono.subscribe(Mono.java:4480) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.subscribeNext(MonoIgnoreThen.java:263) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.MonoIgnoreThen.subscribe(MonoIgnoreThen.java:51) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.subscribeNext(MonoIgnoreThen.java:240) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.onComplete(MonoIgnoreThen.java:203) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.Operators.complete(Operators.java:137) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.MonoEmpty.subscribe(MonoEmpty.java:46) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:53) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.Mono.subscribe(Mono.java:4495) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.subscribeNext(MonoIgnoreThen.java:263) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.MonoIgnoreThen.subscribe(MonoIgnoreThen.java:51) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat io.r2dbc.pool.MonoDiscardOnCancel.subscribe(MonoDiscardOnCancel.java:50) ~[r2dbc-pool-1.0.1.RELEASE.jar!/:1.0.1.RELEASE]\r\n\t\tat reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:165) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.pool.AbstractPool$Borrower.deliver(AbstractPool.java:467) ~[reactor-pool-1.0.1.jar!/:1.0.1]\r\n\t\tat reactor.pool.SimpleDequePool.lambda$drainLoop$8(SimpleDequePool.java:372) ~[reactor-pool-1.0.1.jar!/:1.0.1]\r\n\t\tat reactor.core.scheduler.ImmediateScheduler.schedule(ImmediateScheduler.java:52) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.pool.SimpleDequePool.drainLoop(SimpleDequePool.java:372) ~[reactor-pool-1.0.1.jar!/:1.0.1]\r\n\t\tat reactor.pool.SimpleDequePool.pendingOffer(SimpleDequePool.java:604) ~[reactor-pool-1.0.1.jar!/:1.0.1]\r\n\t\tat reactor.pool.SimpleDequePool.doAcquire(SimpleDequePool.java:298) ~[reactor-pool-1.0.1.jar!/:1.0.1]\r\n\t\tat reactor.pool.AbstractPool$Borrower.request(AbstractPool.java:430) ~[reactor-pool-1.0.1.jar!/:1.0.1]\r\n\t\tat reactor.core.publisher.MonoFlatMap$FlatMapMain.request(MonoFlatMap.java:194) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.Operators$MultiSubscriptionSubscriber.request(Operators.java:2305) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.SerializedSubscriber.request(SerializedSubscriber.java:151) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber.request(FluxContextWrite.java:136) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.Operators$MultiSubscriptionSubscriber.set(Operators.java:2341) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onSubscribe(FluxOnErrorResume.java:74) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber.onSubscribe(FluxContextWrite.java:101) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.SerializedSubscriber.onSubscribe(SerializedSubscriber.java:65) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.FluxTimeout$TimeoutMainSubscriber.onSubscribe(FluxTimeout.java:154) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.MonoFlatMap$FlatMapMain.onSubscribe(MonoFlatMap.java:117) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.pool.SimpleDequePool$QueueBorrowerMono.subscribe(SimpleDequePool.java:722) ~[reactor-pool-1.0.1.jar!/:1.0.1]\r\n\t\tat reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:53) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.FluxRetry$RetrySubscriber.resubscribe(FluxRetry.java:117) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.FluxRetry$RetrySubscriber.onError(FluxRetry.java:101) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:106) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.Operators.error(Operators.java:198) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.MonoError.subscribe(MonoError.java:53) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.Mono.subscribe(Mono.java:4495) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:103) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber.onError(FluxContextWrite.java:121) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.SerializedSubscriber.onError(SerializedSubscriber.java:124) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.FluxTimeout$TimeoutMainSubscriber.handleTimeout(FluxTimeout.java:295) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.FluxTimeout$TimeoutMainSubscriber.doTimeout(FluxTimeout.java:280) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.FluxTimeout$TimeoutTimeoutSubscriber.onNext(FluxTimeout.java:419) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.FluxOnErrorReturn$ReturnSubscriber.onNext(FluxOnErrorReturn.java:162) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.MonoDelay$MonoDelayRunnable.propagateDelay(MonoDelay.java:271) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.MonoDelay$MonoDelayRunnable.run(MonoDelay.java:286) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:68) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:28) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[?:?]\r\n\t\tat java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) ~[?:?]\r\n\t\tat java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[?:?]\r\n\t\tat java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[?:?]\r\n\t\tat java.base/java.lang.Thread.run(Thread.java:840) [?:?]\r\nCaused by: com.github.jasync.sql.db.exceptions.ConnectionStillRunningQueryException: \u003c\u003cmysql-connection-63\u003e\u003e - There is a query still being run here - race -\u003e false\r\n\tat com.github.jasync.sql.db.mysql.MySQLConnection.validateIsReadyForQuery(MySQLConnection.kt:502) ~[jasync-mysql-2.2.4.jar!/:?]\r\n\tSuppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException: \r\nAssembly trace from producer [reactor.core.publisher.MonoFlatMapMany] :\r\n\treactor.core.publisher.Mono.flatMapMany(Mono.java:3117)\r\n\tcom.github.jasync.r2dbc.mysql.JasyncStatement.execute(JasyncStatement.kt:95)\r\nError has been observed at the following site(s):\r\n\t*__Mono.flatMapMany ⇢ at com.github.jasync.r2dbc.mysql.JasyncStatement.execute(JasyncStatement.kt:95)\r\n\t|_ Flux.map ⇢ at com.github.jasync.r2dbc.mysql.JasyncStatement.execute(JasyncStatement.kt:111)\r\nOriginal Stack Trace:\r\n\t\tat com.github.jasync.sql.db.mysql.MySQLConnection.validateIsReadyForQuery(MySQLConnection.kt:502) ~[jasync-mysql-2.2.4.jar!/:?]\r\n\t\tat com.github.jasync.sql.db.mysql.MySQLConnection.sendQueryDirect(MySQLConnection.kt:407) ~[jasync-mysql-2.2.4.jar!/:?]\r\n\t\tat com.github.jasync.sql.db.ConcreteConnectionBase$sendQuery$1.invoke(ConcreteConnectionBase.kt:59) ~[jasync-common-2.2.4.jar!/:?]\r\n\t\tat com.github.jasync.sql.db.ConcreteConnectionBase$sendQuery$1.invoke(ConcreteConnectionBase.kt:58) ~[jasync-common-2.2.4.jar!/:?]\r\n\t\tat com.github.jasync.sql.db.interceptor.ConnectionInterceptorHelperKt.wrapQueryWithInterceptors(ConnectionInterceptorHelper.kt:13) ~[jasync-common-2.2.4.jar!/:?]\r\n\t\tat com.github.jasync.sql.db.ConcreteConnectionBase.sendQuery(ConcreteConnectionBase.kt:58) ~[jasync-common-2.2.4.jar!/:?]\r\n\t\tat com.github.jasync.r2dbc.mysql.JasyncStatement$execute$2.invoke(JasyncStatement.kt:108) ~[jasync-r2dbc-mysql-2.2.4.jar!/:?]\r\n\t\tat com.github.jasync.r2dbc.mysql.JasyncStatement$execute$2.invoke(JasyncStatement.kt:95) ~[jasync-r2dbc-mysql-2.2.4.jar!/:?]\r\n\t\tat com.github.jasync.r2dbc.mysql.JasyncStatement.execute$lambda$3(JasyncStatement.kt:95) ~[jasync-r2dbc-mysql-2.2.4.jar!/:?]\r\n\t\tat reactor.core.publisher.FluxFlatMap.trySubscribeScalarMap(FluxFlatMap.java:152) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.MonoFlatMapMany.subscribeOrReturn(MonoFlatMapMany.java:49) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.Mono.subscribe(Mono.java:4480) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.subscribeNext(MonoIgnoreThen.java:263) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.MonoIgnoreThen.subscribe(MonoIgnoreThen.java:51) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.subscribeNext(MonoIgnoreThen.java:240) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.onComplete(MonoIgnoreThen.java:203) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.Operators.complete(Operators.java:137) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.MonoEmpty.subscribe(MonoEmpty.java:46) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:53) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.Mono.subscribe(Mono.java:4495) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.subscribeNext(MonoIgnoreThen.java:263) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.MonoIgnoreThen.subscribe(MonoIgnoreThen.java:51) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat io.r2dbc.pool.MonoDiscardOnCancel.subscribe(MonoDiscardOnCancel.java:50) ~[r2dbc-pool-1.0.1.RELEASE.jar!/:1.0.1.RELEASE]\r\n\t\tat reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:165) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.pool.AbstractPool$Borrower.deliver(AbstractPool.java:467) ~[reactor-pool-1.0.1.jar!/:1.0.1]\r\n\t\tat reactor.pool.SimpleDequePool.lambda$drainLoop$8(SimpleDequePool.java:372) ~[reactor-pool-1.0.1.jar!/:1.0.1]\r\n\t\tat reactor.core.scheduler.ImmediateScheduler.schedule(ImmediateScheduler.java:52) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.pool.SimpleDequePool.drainLoop(SimpleDequePool.java:372) ~[reactor-pool-1.0.1.jar!/:1.0.1]\r\n\t\tat reactor.pool.SimpleDequePool.pendingOffer(SimpleDequePool.java:604) ~[reactor-pool-1.0.1.jar!/:1.0.1]\r\n\t\tat reactor.pool.SimpleDequePool.doAcquire(SimpleDequePool.java:298) ~[reactor-pool-1.0.1.jar!/:1.0.1]\r\n\t\tat reactor.pool.AbstractPool$Borrower.request(AbstractPool.java:430) ~[reactor-pool-1.0.1.jar!/:1.0.1]\r\n\t\tat reactor.core.publisher.MonoFlatMap$FlatMapMain.request(MonoFlatMap.java:194) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.Operators$MultiSubscriptionSubscriber.request(Operators.java:2305) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.SerializedSubscriber.request(SerializedSubscriber.java:151) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber.request(FluxContextWrite.java:136) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.Operators$MultiSubscriptionSubscriber.set(Operators.java:2341) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onSubscribe(FluxOnErrorResume.java:74) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber.onSubscribe(FluxContextWrite.java:101) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.SerializedSubscriber.onSubscribe(SerializedSubscriber.java:65) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.FluxTimeout$TimeoutMainSubscriber.onSubscribe(FluxTimeout.java:154) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.MonoFlatMap$FlatMapMain.onSubscribe(MonoFlatMap.java:117) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.pool.SimpleDequePool$QueueBorrowerMono.subscribe(SimpleDequePool.java:722) ~[reactor-pool-1.0.1.jar!/:1.0.1]\r\n\t\tat reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:53) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.FluxRetry$RetrySubscriber.resubscribe(FluxRetry.java:117) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.FluxRetry$RetrySubscriber.onError(FluxRetry.java:101) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:106) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.Operators.error(Operators.java:198) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.MonoError.subscribe(MonoError.java:53) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.Mono.subscribe(Mono.java:4495) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:103) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber.onError(FluxContextWrite.java:121) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.SerializedSubscriber.onError(SerializedSubscriber.java:124) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.FluxTimeout$TimeoutMainSubscriber.handleTimeout(FluxTimeout.java:295) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.FluxTimeout$TimeoutMainSubscriber.doTimeout(FluxTimeout.java:280) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.FluxTimeout$TimeoutTimeoutSubscriber.onNext(FluxTimeout.java:419) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.FluxOnErrorReturn$ReturnSubscriber.onNext(FluxOnErrorReturn.java:162) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.MonoDelay$MonoDelayRunnable.propagateDelay(MonoDelay.java:271) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.publisher.MonoDelay$MonoDelayRunnable.run(MonoDelay.java:286) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:68) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:28) ~[reactor-core-3.5.8.jar!/:3.5.8]\r\n\t\tat java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[?:?]\r\n\t\tat java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) ~[?:?]\r\n\t\tat java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[?:?]\r\n\t\tat java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[?:?]\r\n\t\tat java.base/java.lang.Thread.run(Thread.java:840) [?:?]\r\n```\r\n\r\n\u003c/details\u003e\r\n ","author":{"url":"https://github.com/knuclechan","@type":"Person","name":"knuclechan"},"datePublished":"2023-11-08T07:13:06.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":1},"url":"https://github.com/421/jasync-sql/issues/421"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:f7e892f5-93e6-bf37-49fc-7717f9f316d1 |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | C44E:328BE0:49D13:5B09E:697DE2BC |
| html-safe-nonce | 75fddf82c4bff353cb4b6ec04c0c1d9429d73008c76cf41cc3cf51532241d422 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJDNDRFOjMyOEJFMDo0OUQxMzo1QjA5RTo2OTdERTJCQyIsInZpc2l0b3JfaWQiOiI1MDIyMDU1NzQ4NTk5NjY5NDM2IiwicmVnaW9uX2VkZ2UiOiJpYWQiLCJyZWdpb25fcmVuZGVyIjoiaWFkIn0= |
| visitor-hmac | 7e04e91eaf9e3144d7cfcef5627958c39b9dd0fdf5bd2f9d9f4af8aef9f17d4a |
| hovercard-subject-tag | issue:1982906894 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/jasync-sql/jasync-sql/421/issue_layout |
| twitter:image | https://opengraph.githubassets.com/9f3385b324bbc5e91e7116b0f794ab66ebf2b15e4c77a85d36679a06e190c951/jasync-sql/jasync-sql/issues/421 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/9f3385b324bbc5e91e7116b0f794ab66ebf2b15e4c77a85d36679a06e190c951/jasync-sql/jasync-sql/issues/421 |
| og:image:alt | 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 i... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | knuclechan |
| hostname | github.com |
| expected-hostname | github.com |
| None | 60279d4097367e16897439d16d6bbe4180663db828c666eeed2656988ffe59f6 |
| turbo-cache-control | no-preview |
| go-import | github.com/jasync-sql/jasync-sql git https://github.com/jasync-sql/jasync-sql.git |
| octolytics-dimension-user_id | 42655245 |
| octolytics-dimension-user_login | jasync-sql |
| octolytics-dimension-repository_id | 145898133 |
| octolytics-dimension-repository_nwo | jasync-sql/jasync-sql |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 145898133 |
| octolytics-dimension-repository_network_root_nwo | jasync-sql/jasync-sql |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 7c85641c598ad130c74f7bcc27f58575cac69551 |
| ui-target | canary-2 |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width