r2dbc @Transactional causes Connection pool request timeout
See original GitHub issueEnvironment Information
- Operating System: window
- Micronaut Version: 2.5.3
- JDK Version: jdk8
- MYSQL Version mysql8
Interface with transaction annotation, stress test causes connection pool request timeout, after closing pressure test for a few minutes, single request interface still prompts connection pool request timeout, which may be caused by connection pool leakage. There is no error because the transaction annotation is cancelled.
Example
@Get("/")
Flux<Book> all() {
return bookService.findAll(); // With transaction;pool request timeout
//return bookRepository.findAll(); // without,it's ok
}
- ab -n 5000 -c 300 http://127.0.0.1:8080/books
- curl http://127.0.0.1:8080/books curl: (18) transfer closed with outstanding read data remaining
logs
14:02:16.486 [default-nioEventLoopGroup-1-8] DEBUG i.m.d.r.o.DefaultR2dbcRepositoryOperations - Creating a new Connection for DataSource: default 14:02:28.504 [parallel-4] ERROR i.m.h.n.stream.HttpStreamsHandler - Error occurred writing stream response: Connection Acquisition timed out after 6000ms io.r2dbc.spi.R2dbcTimeoutException: Connection Acquisition timed out after 6000ms at io.r2dbc.pool.ConnectionPool.lambda$null$6(ConnectionPool.java:123) at reactor.core.publisher.Mono.lambda$onErrorMap$29(Mono.java:3370) at reactor.core.publisher.Mono.lambda$onErrorResume$31(Mono.java:3460) at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:94) at reactor.core.publisher.SerializedSubscriber.onError(SerializedSubscriber.java:124) at reactor.core.publisher.SerializedSubscriber.onError(SerializedSubscriber.java:124) at reactor.core.publisher.FluxTimeout$TimeoutMainSubscriber.handleTimeout(FluxTimeout.java:294) at reactor.core.publisher.FluxTimeout$TimeoutMainSubscriber.doTimeout(FluxTimeout.java:279) at reactor.core.publisher.FluxTimeout$TimeoutTimeoutSubscriber.onNext(FluxTimeout.java:418) at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onNext(FluxOnErrorResume.java:79) at reactor.core.publisher.MonoDelay$MonoDelayRunnable.run(MonoDelay.java:119) at io.micronaut.reactor.instrument.ReactorInstrumentation.lambda$null$0(ReactorInstrumentation.java:62) at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:68) at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:28) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630) at java.base/java.lang.Thread.run(Thread.java:832) Caused by: java.util.concurrent.TimeoutException: Did not observe any item or terminal signal within 6000ms in ‘Connection Acquisition from [dev.miku.r2dbc.mysql.MySqlConnectionFactory@3e4fddc3]’ (and no fallback has been configured) … 13 common frames omitted
Issue Analytics
- State:
- Created 2 years ago
- Comments:14 (6 by maintainers)
Thanks so much, the problem was thoroughly solved.
@chenjpu I will look at it probably next week