Closed quantranhong1999 closed 3 months ago
You have the stacktrace?
Protip: after some time advanced jvm truncates the stacktrace upon NPE. So look for earlier logs?
{
"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)
Why
Upon James performance test, we disrupt RabbitMQ service. Then likely
RabbitEventBusConsumerHealthCheck
tried to trigger theRabbitMQEventBus
restart.Somehow
NullPointerException
is thrown. Likely we pointed to a null Scheduler inRabbitMQEventBus
.DoD: investigate and fix.