linagora / james-project

Mirror of Apache James Project
Apache License 2.0
70 stars 63 forks source link

Blocking call in RabbitMQHealthCheck #5163

Closed quantranhong1999 closed 3 months ago

quantranhong1999 commented 3 months ago

Error:

java.lang.IllegalStateException: block()/blockFirst()/blockLast() are blocking, which is not supported in thread parallel-1 at reactor.core.publisher.BlockingSingleSubscriber.blockingGet(BlockingSingleSubscriber.java:86) at reactor.core.publisher.Mono.block(Mono.java:1728) at org.apache.james.backends.rabbitmq.RabbitMQConnectionFactory.create(RabbitMQConnectionFactory.java:180) at java.base/java.util.Optional.orElseGet(Unknown Source) at org.apache.james.backends.rabbitmq.SimpleConnectionPool.getOpenConnection(SimpleConnectionPool.java:130) at org.apache.james.backends.rabbitmq.SimpleConnectionPool.tryConnection(SimpleConnectionPool.java:152) at org.apache.james.backends.rabbitmq.RabbitMQHealthCheck.check(RabbitMQHealthCheck.java:54) at org.apache.james.backends.rabbitmq.RabbitMQHealthCheck.check(RabbitMQHealthCheck.java:33) at org.apache.james.PeriodicalHealthChecks.lambda$start$2(PeriodicalHealthChecks.java:58) at reactor.core.publisher.FluxFlatMap$FlatMapMain.onNext(FluxFlatMap.java:388) at reactor.core.publisher.FluxFlattenIterable$FlattenIterableSubscriber.drainAsync(FluxFlattenIterable.java:453) at reactor.core.publisher.FluxFlattenIterable$FlattenIterableSubscriber.drain(FluxFlattenIterable.java:724) at reactor.core.publisher.FluxFlattenIterable$FlattenIterableSubscriber.onNext(FluxFlattenIterable.java:256) at reactor.core.publisher.FluxInterval$IntervalRunnable.run(FluxInterval.java:124) at reactor.core.scheduler.PeriodicWorkerTask.call(PeriodicWorkerTask.java:59) at reactor.core.scheduler.PeriodicWorkerTask.run(PeriodicWorkerTask.java:73) at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) at java.base/java.util.concurrent.FutureTask.runAndReset(Unknown Source) at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.base/java.lang.Thread.run(Unknown Source)

connectionPool.tryConnection is blocking on RabbitMQHealthCheck' parallel thread.

We can subscribe it on boundedElastic.

chibenwa commented 3 months ago

No rather blocking call wrapper

quantranhong1999 commented 3 months ago

https://github.com/apache/james-project/pull/2207