Skip to content

When an MQTT connection dies, it fails with a NPE and never reconnects #1181

@ctron

Description

@ctron

Assuming there is successfully connected MQTT connection, which then just dies. In the log you can see a NPE (`NullPointerException') and the client never reconnects.

2021-04-28 12:50:12,161 ERROR [io.sma.rea.mes.mqtt] (vert.x-eventloop-thread-0) SRMSG17103: An error has been caught while sending a MQTT message to the broker: java.lang.NullPointerException
Full exception stack trace
2021-04-28 12:50:12,161 ERROR [io.sma.rea.mes.mqtt] (vert.x-eventloop-thread-0) SRMSG17103: An error has been caught while sending a MQTT message to the broker: java.lang.NullPointerException
	at io.vertx.mqtt.impl.MqttClientImpl.write(MqttClientImpl.java:785)
	at io.vertx.mqtt.impl.MqttClientImpl.disconnect(MqttClientImpl.java:298)
	at io.vertx.mqtt.impl.MqttClientImpl.disconnect(MqttClientImpl.java:279)
	at io.vertx.mutiny.mqtt.MqttClient.disconnectAndForget(MqttClient.java:564)
	at io.smallrye.reactive.messaging.mqtt.MqttSink.lambda$new$4(MqttSink.java:78)
	at io.smallrye.context.impl.wrappers.SlowContextualRunnable.run(SlowContextualRunnable.java:19)
	at io.smallrye.mutiny.operators.multi.MultiOnCompletionInvoke$MultiOnCompletionInvokeProcessor.onCompletion(MultiOnCompletionInvoke.java:36)
	at io.smallrye.mutiny.operators.multi.MultiFlatMapOp$FlatMapMainSubscriber.handleTerminationIfDone(MultiFlatMapOp.java:514)
	at io.smallrye.mutiny.operators.multi.MultiFlatMapOp$FlatMapMainSubscriber.ifDoneOrCancelled(MultiFlatMapOp.java:486)
	at io.smallrye.mutiny.operators.multi.MultiFlatMapOp$FlatMapMainSubscriber.drainLoop(MultiFlatMapOp.java:286)
	at io.smallrye.mutiny.operators.multi.MultiFlatMapOp$FlatMapMainSubscriber.drain(MultiFlatMapOp.java:266)
	at io.smallrye.mutiny.operators.multi.MultiFlatMapOp$FlatMapMainSubscriber.onCompletion(MultiFlatMapOp.java:220)
	at io.smallrye.mutiny.operators.multi.MultiFlatMapOp$FlatMapMainSubscriber.handleTerminationIfDone(MultiFlatMapOp.java:514)
	at io.smallrye.mutiny.operators.multi.MultiFlatMapOp$FlatMapMainSubscriber.ifDoneOrCancelled(MultiFlatMapOp.java:486)
	at io.smallrye.mutiny.operators.multi.MultiFlatMapOp$FlatMapMainSubscriber.drainLoop(MultiFlatMapOp.java:286)
	at io.smallrye.mutiny.operators.multi.MultiFlatMapOp$FlatMapMainSubscriber.drain(MultiFlatMapOp.java:266)
	at io.smallrye.mutiny.operators.multi.MultiFlatMapOp$FlatMapMainSubscriber.onCompletion(MultiFlatMapOp.java:220)
	at io.smallrye.mutiny.subscription.MultiSubscriber.onComplete(MultiSubscriber.java:83)
	at io.smallrye.mutiny.subscription.SafeSubscriber.onComplete(SafeSubscriber.java:167)
	at io.smallrye.mutiny.helpers.HalfSerializer.onComplete(HalfSerializer.java:75)
	at io.smallrye.mutiny.helpers.StrictMultiSubscriber.onCompletion(StrictMultiSubscriber.java:95)
	at io.smallrye.mutiny.subscription.MultiSubscriber.onComplete(MultiSubscriber.java:83)
	at io.smallrye.mutiny.streams.utils.ConnectableProcessor.onComplete(ConnectableProcessor.java:129)
	at org.eclipse.microprofile.reactive.streams.operators.CompletionSubscriber$1DefaultCompletionSubscriber.onComplete(CompletionSubscriber.java:95)
	at org.eclipse.microprofile.reactive.streams.operators.CompletionSubscriber$1DefaultCompletionSubscriber.onComplete(CompletionSubscriber.java:95)
	at io.smallrye.mutiny.subscription.SafeSubscriber.onComplete(SafeSubscriber.java:167)
	at io.smallrye.mutiny.helpers.HalfSerializer.onComplete(HalfSerializer.java:75)
	at io.smallrye.mutiny.helpers.StrictMultiSubscriber.onCompletion(StrictMultiSubscriber.java:95)
	at io.smallrye.mutiny.subscription.MultiSubscriber.onComplete(MultiSubscriber.java:83)
	at io.smallrye.mutiny.subscription.SafeSubscriber.onComplete(SafeSubscriber.java:167)
	at io.smallrye.mutiny.helpers.HalfSerializer.onComplete(HalfSerializer.java:75)
	at io.smallrye.mutiny.helpers.StrictMultiSubscriber.onCompletion(StrictMultiSubscriber.java:95)
	at io.smallrye.mutiny.operators.multi.MultiFlatMapOp$FlatMapMainSubscriber.handleTerminationIfDone(MultiFlatMapOp.java:514)
	at io.smallrye.mutiny.operators.multi.MultiFlatMapOp$FlatMapMainSubscriber.ifDoneOrCancelled(MultiFlatMapOp.java:486)
	at io.smallrye.mutiny.operators.multi.MultiFlatMapOp$FlatMapMainSubscriber.drainLoop(MultiFlatMapOp.java:286)
	at io.smallrye.mutiny.operators.multi.MultiFlatMapOp$FlatMapMainSubscriber.drain(MultiFlatMapOp.java:266)
	at io.smallrye.mutiny.operators.multi.MultiFlatMapOp$FlatMapMainSubscriber.onCompletion(MultiFlatMapOp.java:220)
	at io.smallrye.mutiny.subscription.MultiSubscriber.onComplete(MultiSubscriber.java:83)
	at io.smallrye.mutiny.subscription.SafeSubscriber.onComplete(SafeSubscriber.java:167)
	at io.smallrye.mutiny.helpers.HalfSerializer.onComplete(HalfSerializer.java:75)
	at io.smallrye.mutiny.helpers.StrictMultiSubscriber.onCompletion(StrictMultiSubscriber.java:95)
	at io.smallrye.mutiny.subscription.MultiSubscriber.onComplete(MultiSubscriber.java:83)
	at io.smallrye.mutiny.streams.utils.ConnectableProcessor.onComplete(ConnectableProcessor.java:129)
	at io.smallrye.mutiny.streams.utils.WrappedProcessor.onComplete(WrappedProcessor.java:54)
	at io.smallrye.mutiny.helpers.HalfSerializer.onComplete(HalfSerializer.java:75)
	at io.smallrye.mutiny.helpers.StrictMultiSubscriber.onCompletion(StrictMultiSubscriber.java:95)
	at io.smallrye.mutiny.operators.multi.MultiOperatorProcessor.onCompletion(MultiOperatorProcessor.java:74)
	at io.smallrye.mutiny.subscription.MultiSubscriber.onComplete(MultiSubscriber.java:83)
	at io.smallrye.mutiny.subscription.SafeSubscriber.onComplete(SafeSubscriber.java:167)
	at io.smallrye.mutiny.subscription.SafeSubscriber.onComplete(SafeSubscriber.java:167)
	at io.smallrye.mutiny.helpers.HalfSerializer.onComplete(HalfSerializer.java:75)
	at io.smallrye.mutiny.helpers.StrictMultiSubscriber.onCompletion(StrictMultiSubscriber.java:95)
	at io.smallrye.mutiny.subscription.MultiSubscriber.onComplete(MultiSubscriber.java:83)
	at io.smallrye.mutiny.subscription.SafeSubscriber.onComplete(SafeSubscriber.java:167)
	at io.smallrye.mutiny.helpers.HalfSerializer.onComplete(HalfSerializer.java:75)
	at io.smallrye.mutiny.helpers.StrictMultiSubscriber.onCompletion(StrictMultiSubscriber.java:95)
	at io.smallrye.mutiny.operators.multi.MultiFlatMapOp$FlatMapMainSubscriber.handleTerminationIfDone(MultiFlatMapOp.java:514)
	at io.smallrye.mutiny.operators.multi.MultiFlatMapOp$FlatMapMainSubscriber.ifDoneOrCancelled(MultiFlatMapOp.java:486)
	at io.smallrye.mutiny.operators.multi.MultiFlatMapOp$FlatMapMainSubscriber.drainLoop(MultiFlatMapOp.java:286)
	at io.smallrye.mutiny.operators.multi.MultiFlatMapOp$FlatMapMainSubscriber.drain(MultiFlatMapOp.java:266)
	at io.smallrye.mutiny.operators.multi.MultiFlatMapOp$FlatMapMainSubscriber.onCompletion(MultiFlatMapOp.java:220)
	at io.smallrye.mutiny.subscription.MultiSubscriber.onComplete(MultiSubscriber.java:83)
	at io.smallrye.mutiny.subscription.SafeSubscriber.onComplete(SafeSubscriber.java:167)
	at io.smallrye.mutiny.helpers.HalfSerializer.onComplete(HalfSerializer.java:75)
	at io.smallrye.mutiny.helpers.StrictMultiSubscriber.onCompletion(StrictMultiSubscriber.java:95)
	at io.smallrye.mutiny.subscription.MultiSubscriber.onComplete(MultiSubscriber.java:83)
	at io.smallrye.mutiny.streams.utils.ConnectableProcessor.onComplete(ConnectableProcessor.java:129)
	at io.smallrye.mutiny.streams.utils.WrappedProcessor.onComplete(WrappedProcessor.java:54)
	at io.smallrye.mutiny.helpers.HalfSerializer.onComplete(HalfSerializer.java:75)
	at io.smallrye.mutiny.helpers.StrictMultiSubscriber.onCompletion(StrictMultiSubscriber.java:95)
	at io.smallrye.mutiny.operators.multi.MultiOperatorProcessor.onCompletion(MultiOperatorProcessor.java:74)
	at io.smallrye.mutiny.subscription.MultiSubscriber.onComplete(MultiSubscriber.java:83)
	at io.smallrye.mutiny.subscription.SafeSubscriber.onComplete(SafeSubscriber.java:167)
	at io.smallrye.mutiny.subscription.SafeSubscriber.onComplete(SafeSubscriber.java:167)
	at io.smallrye.mutiny.subscription.SafeSubscriber.onComplete(SafeSubscriber.java:167)
	at io.smallrye.mutiny.helpers.HalfSerializer.onComplete(HalfSerializer.java:75)
	at io.smallrye.mutiny.helpers.StrictMultiSubscriber.onCompletion(StrictMultiSubscriber.java:95)
	at io.smallrye.mutiny.subscription.MultiSubscriber.onComplete(MultiSubscriber.java:83)
	at io.smallrye.mutiny.operators.multi.multicast.MultiPublishOp$PublishSubscriber.isEmptyOrCompleted(MultiPublishOp.java:315)
	at io.smallrye.mutiny.operators.multi.multicast.MultiPublishOp$PublishSubscriber.drain(MultiPublishOp.java:381)
	at io.smallrye.mutiny.operators.multi.multicast.MultiPublishOp$PublishSubscriber.onCompletion(MultiPublishOp.java:195)
	at io.smallrye.mutiny.subscription.MultiSubscriber.onComplete(MultiSubscriber.java:83)
	at io.smallrye.mutiny.subscription.SafeSubscriber.onComplete(SafeSubscriber.java:167)
	at io.smallrye.mutiny.helpers.HalfSerializer.onComplete(HalfSerializer.java:75)
	at io.smallrye.mutiny.helpers.StrictMultiSubscriber.onCompletion(StrictMultiSubscriber.java:95)
	at io.smallrye.mutiny.subscription.MultiSubscriber.onComplete(MultiSubscriber.java:83)
	at io.smallrye.mutiny.subscription.SafeSubscriber.onComplete(SafeSubscriber.java:167)
	at io.smallrye.mutiny.helpers.HalfSerializer.onComplete(HalfSerializer.java:75)
	at io.smallrye.mutiny.helpers.StrictMultiSubscriber.onCompletion(StrictMultiSubscriber.java:95)
	at io.smallrye.mutiny.operators.multi.MultiFlatMapOp$FlatMapMainSubscriber.handleTerminationIfDone(MultiFlatMapOp.java:514)
	at io.smallrye.mutiny.operators.multi.MultiFlatMapOp$FlatMapMainSubscriber.ifDoneOrCancelled(MultiFlatMapOp.java:486)
	at io.smallrye.mutiny.operators.multi.MultiFlatMapOp$FlatMapMainSubscriber.drainLoop(MultiFlatMapOp.java:286)
	at io.smallrye.mutiny.operators.multi.MultiFlatMapOp$FlatMapMainSubscriber.drain(MultiFlatMapOp.java:266)
	at io.smallrye.mutiny.operators.multi.MultiFlatMapOp$FlatMapMainSubscriber.onCompletion(MultiFlatMapOp.java:220)
	at io.smallrye.mutiny.subscription.MultiSubscriber.onComplete(MultiSubscriber.java:83)
	at io.smallrye.mutiny.subscription.SafeSubscriber.onComplete(SafeSubscriber.java:167)
	at io.smallrye.mutiny.helpers.HalfSerializer.onComplete(HalfSerializer.java:75)
	at io.smallrye.mutiny.helpers.StrictMultiSubscriber.onCompletion(StrictMultiSubscriber.java:95)
	at io.smallrye.mutiny.subscription.MultiSubscriber.onComplete(MultiSubscriber.java:83)
	at io.smallrye.mutiny.streams.utils.ConnectableProcessor.onComplete(ConnectableProcessor.java:129)
	at io.smallrye.mutiny.streams.utils.WrappedProcessor.onComplete(WrappedProcessor.java:54)
	at io.smallrye.mutiny.helpers.HalfSerializer.onComplete(HalfSerializer.java:75)
	at io.smallrye.mutiny.helpers.StrictMultiSubscriber.onCompletion(StrictMultiSubscriber.java:95)
	at io.smallrye.mutiny.operators.multi.MultiOperatorProcessor.onCompletion(MultiOperatorProcessor.java:74)
	at io.smallrye.mutiny.subscription.MultiSubscriber.onComplete(MultiSubscriber.java:83)
	at io.smallrye.mutiny.subscription.SafeSubscriber.onComplete(SafeSubscriber.java:167)
	at io.smallrye.mutiny.subscription.SafeSubscriber.onComplete(SafeSubscriber.java:167)
	at io.smallrye.mutiny.subscription.SafeSubscriber.onComplete(SafeSubscriber.java:167)
	at io.smallrye.mutiny.helpers.HalfSerializer.onComplete(HalfSerializer.java:75)
	at io.smallrye.mutiny.helpers.StrictMultiSubscriber.onCompletion(StrictMultiSubscriber.java:95)
	at io.smallrye.mutiny.operators.multi.MultiOperatorProcessor.onCompletion(MultiOperatorProcessor.java:74)
	at io.smallrye.mutiny.operators.multi.MultiOperatorProcessor.onCompletion(MultiOperatorProcessor.java:74)
	at io.smallrye.mutiny.operators.multi.MultiOnCancellationInvoke$MultiOnCancellationInvokeProcessor.onCompletion(MultiOnCancellationInvoke.java:36)
	at io.smallrye.mutiny.subscription.MultiSubscriber.onComplete(MultiSubscriber.java:83)
	at io.smallrye.mutiny.operators.uni.UniOnItemTransformToMulti$FlatMapPublisherSubscriber.onComplete(UniOnItemTransformToMulti.java:69)
	at io.smallrye.mutiny.helpers.HalfSerializer.onComplete(HalfSerializer.java:75)
	at io.smallrye.mutiny.helpers.StrictMultiSubscriber.onCompletion(StrictMultiSubscriber.java:95)
	at io.smallrye.mutiny.subscription.MultiSubscriber.onComplete(MultiSubscriber.java:83)
	at io.smallrye.mutiny.operators.uni.UniOnItemTransformToMulti$FlatMapPublisherSubscriber.onComplete(UniOnItemTransformToMulti.java:69)
	at io.smallrye.mutiny.helpers.HalfSerializer.onComplete(HalfSerializer.java:75)
	at io.smallrye.mutiny.helpers.StrictMultiSubscriber.onCompletion(StrictMultiSubscriber.java:95)
	at io.smallrye.mutiny.operators.multi.MultiOperatorProcessor.onCompletion(MultiOperatorProcessor.java:74)
	at io.smallrye.mutiny.operators.multi.MultiOperatorProcessor.onCompletion(MultiOperatorProcessor.java:74)
	at io.smallrye.mutiny.subscription.MultiSubscriber.onComplete(MultiSubscriber.java:83)
	at io.smallrye.mutiny.operators.multi.processors.BroadcastProcessor$BroadcastSubscription.onComplete(BroadcastProcessor.java:225)
	at io.smallrye.mutiny.operators.multi.processors.BroadcastProcessor.onComplete(BroadcastProcessor.java:164)
	at io.smallrye.reactive.messaging.mqtt.Clients$ClientHolder.lambda$new$0(Clients.java:64)
	at io.vertx.mqtt.impl.MqttClientImpl.handleClosed(MqttClientImpl.java:806)
	at io.vertx.mqtt.impl.MqttClientImpl.lambda$null$1(MqttClientImpl.java:234)
	at io.vertx.core.net.impl.ConnectionBase.handleClosed(ConnectionBase.java:353)
	at io.vertx.core.net.impl.NetSocketImpl.handleClosed(NetSocketImpl.java:346)
	at io.vertx.core.net.impl.VertxHandler.lambda$channelInactive$3(VertxHandler.java:153)
	at io.vertx.core.impl.ContextImpl.executeTask(ContextImpl.java:366)
	at io.vertx.core.impl.EventLoopContext.execute(EventLoopContext.java:43)
	at io.vertx.core.impl.ContextImpl.executeFromIO(ContextImpl.java:229)
	at io.vertx.core.impl.ContextImpl.executeFromIO(ContextImpl.java:221)
	at io.vertx.core.net.impl.VertxHandler.channelInactive(VertxHandler.java:153)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:262)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:248)
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelInactive(AbstractChannelHandlerContext.java:241)
	at io.netty.channel.ChannelInboundHandlerAdapter.channelInactive(ChannelInboundHandlerAdapter.java:81)
	at io.netty.handler.timeout.IdleStateHandler.channelInactive(IdleStateHandler.java:277)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:262)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:248)
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelInactive(AbstractChannelHandlerContext.java:241)
	at io.netty.handler.codec.ByteToMessageDecoder.channelInputClosed(ByteToMessageDecoder.java:389)
	at io.netty.handler.codec.ByteToMessageDecoder.channelInactive(ByteToMessageDecoder.java:354)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:262)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:248)
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelInactive(AbstractChannelHandlerContext.java:241)
	at io.netty.handler.stream.ChunkedWriteHandler.channelInactive(ChunkedWriteHandler.java:138)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:262)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:248)
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelInactive(AbstractChannelHandlerContext.java:241)
	at io.netty.handler.codec.ByteToMessageDecoder.channelInputClosed(ByteToMessageDecoder.java:389)
	at io.netty.handler.codec.ByteToMessageDecoder.channelInactive(ByteToMessageDecoder.java:354)
	at io.netty.handler.ssl.SslHandler.channelInactive(SslHandler.java:1106)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:262)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:248)
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelInactive(AbstractChannelHandlerContext.java:241)
	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelInactive(DefaultChannelPipeline.java:1405)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:262)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:248)
	at io.netty.channel.DefaultChannelPipeline.fireChannelInactive(DefaultChannelPipeline.java:901)
	at io.netty.channel.AbstractChannel$AbstractUnsafe$8.run(AbstractChannel.java:818)
	at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:164)
	at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:472)
	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:497)
	at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989)
	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
	at java.base/java.lang.Thread.run(Thread.java:832)

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions