0

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\
Esperanz0
  • 1,524
  • 13
  • 35
  • 1
    Please read this: https://github.com/ReactiveX/RxJava/blob/2.x/docs/What's-different-in-2.0.md#error-handling – akarnokd Aug 02 '18 at 13:35

2 Answers2

1

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 : )

Esperanz0
  • 1,524
  • 13
  • 35
0

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)

crgarridos
  • 8,758
  • 3
  • 49
  • 61
  • 1
    Missing `onError` implementations are rewarded with `OnErrorNotImplementedException`. `UndeliverableException` happens mostly when the sequence got disposed and a classical blocking API call throws an exception in response to being cancelled. Such errors can no longer be emitted over `onError` and they end up in the global error handler. Without custom handling, these errors are delivered to the uncaught exception handler of the current thread. That, by default, crashes the entire app. – akarnokd Aug 02 '18 at 13:49