Reputation: 1586
I have few report's from different users they have problem with crashing application.
To be honest I already don't have to much ideas what can happen.
Device is no active for some times for ex. 40 - 60 minutes and then this error.
Thanks for any advice or suggestions.
Error logs:
07-27 18:08:12.558 1883-5804/? E/AndroidRuntime: FATAL EXCEPTION: RxNewThreadScheduler-42\
io.reactivex.exceptions.UndeliverableException: java.io.IOException\
at io.reactivex.plugins.RxJavaPlugins.onError(RxJavaPlugins.java:367)\
at io.reactivex.internal.operators.single.SingleCreate$Emitter.onError(SingleCreate.java:82)\
at com.framelogic.rabbitmq.connection.RabbitMQConnectionImpl.lambda$getChannel$5$RabbitMQConnectionImpl(RabbitMQConnectionImpl.java:141)\
at com.framelogic.rabbitmq.connection.RabbitMQConnectionImpl$$Lambda$3.subscribe(Unknown Source)\
at io.reactivex.internal.operators.single.SingleCreate.subscribeActual(SingleCreate.java:39)\
at io.reactivex.Single.subscribe(Single.java:3310)\
at io.reactivex.internal.operators.single.SingleSubscribeOn$SubscribeOnObserver.run(SingleSubscribeOn.java:89)\
at io.reactivex.Scheduler$DisposeTask.run(Scheduler.java:579)\
at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:66)\
at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:57)\
at java.util.concurrent.FutureTask.run(FutureTask.java:234)\
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:153)\
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:267)\
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)\
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)\
at java.lang.Thread.run(Thread.java:841)\
Caused by: java.io.IOException\
at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:124)\
at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:120)\
at com.rabbitmq.client.impl.AMQChannel.exnWrappingRpc(AMQChannel.java:142)\
at com.rabbitmq.client.impl.ChannelN.open(ChannelN.java:136)\
at com.rabbitmq.client.impl.ChannelManager.createChannel(ChannelManager.java:176)\
at com.rabbitmq.client.impl.AMQConnection.createChannel(AMQConnection.java:559)\
at com.framelogic.rabbitmq.connection.RabbitMQConnectionImpl.lambda$getChannel$5$RabbitMQConnectionImpl(RabbitMQConnectionImpl.java:132)\
at com.framelogic.rabbitmq.connection.RabbitMQConnectionImpl$$Lambda$3.subscribe(Unknown Source)\'a0\
at io.reactivex.internal.operators.single.SingleCreate.subscribeActual(SingleCreate.java:39)\'a0\
at io.reactivex.Single.subscribe(Single.java:3310)\'a0\
at io.reactivex.internal.operators.single.SingleSubscribeOn$SubscribeOnObserver.run(SingleSubscribeOn.java:89)\'a0\
at io.reactivex.Scheduler$DisposeTask.run(Scheduler.java:579)\'a0\
at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:66)\'a0\
at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:57)\'a0\
at java.util.concurrent.FutureTask.run(FutureTask.java:234)\'a0\
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:153)\'a0\
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:267)\'a0\
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)\'a0\
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)\'a0\
at java.lang.Thread.run(Thread.java:841)\'a0\
Caused by: com.rabbitmq.client.ShutdownSignalException: connection error\
at com.rabbitmq.utility.ValueOrException.getValue(ValueOrException.java:66)\
at com.rabbitmq.utility.BlockingValueOrException.uninterruptibleGetValue(BlockingValueOrException.java:36)\
at com.rabbitmq.client.impl.AMQChannel$BlockingRpcContinuation.getReply(AMQChannel.java:443)\
at com.rabbitmq.client.impl.AMQChannel.privateRpc(AMQChannel.java:263)\
at com.rabbitmq.client.impl.AMQChannel.exnWrappingRpc(AMQChannel.java:136)\
at com.rabbitmq.client.impl.ChannelN.open(ChannelN.java:136)\'a0\
at com.rabbitmq.client.impl.ChannelManager.createChannel(ChannelManager.java:176)\'a0\
at com.rabbitmq.client.impl.AMQConnection.createChannel(AMQConnection.java:559)\'a0\
at com.framelogic.rabbitmq.connection.RabbitMQConnectionImpl.lambda$getChannel$5$RabbitMQConnectionImpl(RabbitMQConnectionImpl.java:132)\'a0\
at com.framelogic.rabbitmq.connection.RabbitMQConnectionImpl$$Lambda$3.subscribe(Unknown Source)\'a0\
at io.reactivex.internal.operators.single.SingleCreate.subscribeActual(SingleCreate.java:39)\'a0\
at io.reactivex.Single.subscribe(Single.java:3310)\'a0\
at io.reactivex.internal.operators.single.SingleSubscribeOn$SubscribeOnObserver.run(SingleSubscribeOn.java:89)\'a0\
at io.reactivex.Scheduler$DisposeTask.run(Scheduler.java:579)\'a0\
at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:66)\'a0\
at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:57)\'a0\
at java.util.concurrent.FutureTask.run(FutureTask.java:234)\'a0\
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:153)\'a0\
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:267)\'a0\
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)\'a0\
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)\'a0\
at java.lang.Thread.run(Thread.java:841)\'a0\
Caused by: com.rabbitmq.client.MissedHeartbeatException: Heartbeat missing with heartbeat = 60 seconds\
at com.rabbitmq.client.impl.AMQConnection.handleSocketTimeout(AMQConnection.java:784)\
at com.rabbitmq.client.impl.AMQConnection.readFrame(AMQConnection.java:684)\
at com.rabbitmq.client.impl.AMQConnection.access$300(AMQConnection.java:48)\
at com.rabbitmq.client.impl.AMQConnection$MainLoop.run(AMQConnection.java:603)\
at java.lang.Thread.run(Thread.java:841)\'a0\
Upvotes: 0
Views: 880
Reputation: 1586
Solution:
Implement global rx error handler ( https://github.com/ReactiveX/RxJava/blob/2.x/docs/What's-different-in-2.0.md#error-handling )
// If Java 8 lambdas are supported
RxJavaPlugins.setErrorHandler(e -> { });
// If no Retrolambda or Jack
RxJavaPlugins.setErrorHandler(Functions.<Throwable>emptyConsumer());
Of course this will not fix the problem. This will only prevent application crash if we forget to implement onError() method somewhere.
However everything is better than application crash : )
Upvotes: 1
Reputation: 9263
io.reactivex.exceptions.UndeliverableException
is typically thrown when you are not implementing onError
when you subscribe to your source.
But it just wraps an exception occurred in the scheduler where is executed
You can constate this at the bottom of the trace :
Caused by: com.rabbitmq.client.MissedHeartbeatException: Heartbeat missing with heartbeat = 60 seconds\
If you are not familiarized with stack traces, I recommend you to read about, it's very important for debugging (a good answer here)
Upvotes: 0