linagora / james-project

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

NullPointerException when RabbitEventBusConsumerHealthCheck tries to restart the RabbitMQEventBus #5164

Closed quantranhong1999 closed 3 months ago

quantranhong1999 commented 3 months ago

Why

Upon James performance test, we disrupt RabbitMQ service. Then likely RabbitEventBusConsumerHealthCheck tried to trigger the RabbitMQEventBus restart.

Somehow NullPointerException is thrown. Likely we pointed to a null Scheduler in RabbitMQEventBus.

DoD: investigate and fix.

chibenwa commented 3 months ago

You have the stacktrace?

Protip: after some time advanced jvm truncates the stacktrace upon NPE. So look for earlier logs?

hungphan227 commented 3 months ago
{
  "timestamp": "2024-04-15T08:58:04.924Z",
  "level": "ERROR",
  "thread": "blocking-call-wrapper-152",
  "logger": "org.apache.james.PeriodicalHealthChecks",
  "message": "HealthCheck error. Triggering value: amqp://james@10.3.55.201:5672/upn, Cause: ",
  "context": "default",
  "exception": "java.lang.NullPointerException: scheduler\n\tat java.base/java.util.Objects.requireNonNull(Unknown Source)\n\tat reactor.core.publisher.FluxSubscribeOn.<init>(FluxSubscribeOn.java:48)\n\tat reactor.core.publisher.Flux.subscribeOn(Flux.java:8882)\n\tat reactor.core.publisher.Flux.subscribeOn(Flux.java:8829)\n\tat org.apache.james.events.GroupRegistrationHandler.consumeWorkQueue(GroupRegistrationHandler.java:133)\n\tat org.apache.james.events.GroupRegistrationHandler.restart(GroupRegistrationHandler.java:168)\n\tat org.apache.james.events.RabbitMQEventBus.restart(RabbitMQEventBus.java:103)\n\tat org.apache.james.events.RabbitEventBusConsumerHealthCheck.check(RabbitEventBusConsumerHealthCheck.java:77)\n\tat org.apache.james.events.RabbitEventBusConsumerHealthCheck.lambda$check$0(RabbitEventBusConsumerHealthCheck.java:60)\n\tat com.github.fge.lambdas.functions.FunctionChainer.doApply(FunctionChainer.java:20)\n\tat com.github.fge.lambdas.functions.ThrowingFunction.apply(ThrowingFunction.java:17)\n\tat reactor.core.publisher.FluxMap$MapSubscriber.onNext(FluxMap.java:106)\n\tat reactor.core.publisher.SerializedSubscriber.onNext(SerializedSubscriber.java:99)\n\tat reactor.core.publisher.FluxRetryWhen$RetryWhenMainSubscriber.onNext(FluxRetryWhen.java:177)\n\tat reactor.core.publisher.Operators$ScalarSubscription.request(Operators.java:2571)\n\tat reactor.core.publisher.Operators$MultiSubscriptionSubscriber.set(Operators.java:2367)\n\tat reactor.core.publisher.Operators$MultiSubscriptionSubscriber.onSubscribe(Operators.java:2241)\n\tat reactor.core.publisher.MonoJust.subscribe(MonoJust.java:55)\n\tat reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:53)\n\tat reactor.core.publisher.FluxRetryWhen.subscribe(FluxRetryWhen.java:80)\n\tat reactor.core.publisher.MonoRetryWhen.subscribeOrReturn(MonoRetryWhen.java:46)\n\tat reactor.core.publisher.Mono.subscribe(Mono.java:4496)\n\tat reactor.core.publisher.MonoSubscribeOn$SubscribeOnSubscriber.run(MonoSubscribeOn.java:126)\n\tat reactor.core.scheduler.WorkerTask.call(WorkerTask.java:84)\n\tat reactor.core.scheduler.WorkerTask.call(WorkerTask.java:37)\n\tat java.base/java.util.concurrent.FutureTask.run(Unknown Source)\n\tat java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source)\n\tat java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)\n\tat java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)\n\tat java.base/java.lang.Thread.run(Unknown Source)\n"
}

exception:

java.lang.NullPointerException: scheduler
    at java.base/java.util.Objects.requireNonNull(Unknown Source)
    at reactor.core.publisher.FluxSubscribeOn.<init>(FluxSubscribeOn.java:48)
    at reactor.core.publisher.Flux.subscribeOn(Flux.java:8882)
    at reactor.core.publisher.Flux.subscribeOn(Flux.java:8829)
    at org.apache.james.events.GroupRegistrationHandler.consumeWorkQueue(GroupRegistrationHandler.java:133)
    at org.apache.james.events.GroupRegistrationHandler.restart(GroupRegistrationHandler.java:168)
    at org.apache.james.events.RabbitMQEventBus.restart(RabbitMQEventBus.java:103)
    at org.apache.james.events.RabbitEventBusConsumerHealthCheck.check(RabbitEventBusConsumerHealthCheck.java:77)
    at org.apache.james.events.RabbitEventBusConsumerHealthCheck.lambda$check$0(RabbitEventBusConsumerHealthCheck.java:60)
    at com.github.fge.lambdas.functions.FunctionChainer.doApply(FunctionChainer.java:20)
    at com.github.fge.lambdas.functions.ThrowingFunction.apply(ThrowingFunction.java:17)
    at reactor.core.publisher.FluxMap$MapSubscriber.onNext(FluxMap.java:106)
    at reactor.core.publisher.SerializedSubscriber.onNext(SerializedSubscriber.java:99)
    at reactor.core.publisher.FluxRetryWhen$RetryWhenMainSubscriber.onNext(FluxRetryWhen.java:177)
    at reactor.core.publisher.Operators$ScalarSubscription.request(Operators.java:2571)
    at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.set(Operators.java:2367)
    at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.onSubscribe(Operators.java:2241)
    at reactor.core.publisher.MonoJust.subscribe(MonoJust.java:55)
    at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:53)
    at reactor.core.publisher.FluxRetryWhen.subscribe(FluxRetryWhen.java:80)
    at reactor.core.publisher.MonoRetryWhen.subscribeOrReturn(MonoRetryWhen.java:46)
    at reactor.core.publisher.Mono.subscribe(Mono.java:4496)
    at reactor.core.publisher.MonoSubscribeOn$SubscribeOnSubscriber.run(MonoSubscribeOn.java:126)
    at reactor.core.scheduler.WorkerTask.call(WorkerTask.java:84)
    at reactor.core.scheduler.WorkerTask.call(WorkerTask.java:37)
    at java.base/java.util.concurrent.FutureTask.run(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)
quantranhong1999 commented 3 months ago

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