Skip to content

onError in SDK from broken connnection crashes applications #20

@tannerpreiss

Description

@tannerpreiss

The following log output occurs when connecting to a server that returns "MQ for the server instance is not healthy". The SDK is not handling this error gracefully and therefore crashing the application using the SDK

I/System.out: [recv] {"kind":"error","payload":{"msg":"connection failure","cause":"MQ for the server instance is not healthy"},"version":14}
I/Choreographer: Skipped 72 frames!  The application may be doing too much work on its main thread.
I/System.out: [send] [true] {"closure":1,"kind":"sub","payload":{"path":["rooms","*"]},"version":14}
E/CLOSED: 1000 
E/AndroidRuntime: FATAL EXCEPTION: RxCachedThreadScheduler-2
                  Process: com.ibm.chat, PID: 10326
                  java.lang.IllegalStateException: Exception thrown on Scheduler.Worker thread. Add `onError` handling.
                      at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:60)
                      at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:428)
                      at java.util.concurrent.FutureTask.run(FutureTask.java:237)
                      at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:272)
                      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
                      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
                      at java.lang.Thread.run(Thread.java:761)
                   Caused by: rx.exceptions.OnErrorNotImplementedException: java.io.IOException: closed
                      at rx.Observable$27.onError(Observable.java:7535)
                      at rx.observers.SafeSubscriber._onError(SafeSubscriber.java:154)
                      at rx.observers.SafeSubscriber.onError(SafeSubscriber.java:111)
                      at rx.internal.operators.OperatorSubscribeOn$1$1$1.onError(OperatorSubscribeOn.java:71)
                      at rx.internal.operators.OperatorMap$1.onError(OperatorMap.java:49)
                      at rx.internal.operators.OperatorMap$1.onNext(OperatorMap.java:58)
                      at rx.internal.util.ScalarSynchronousObservable$1.call(ScalarSynchronousObservable.java:46)
                      at rx.internal.util.ScalarSynchronousObservable$1.call(ScalarSynchronousObservable.java:35)
                      at rx.Observable$2.call(Observable.java:162)
                      at rx.Observable$2.call(Observable.java:154)
                      at rx.Observable.unsafeSubscribe(Observable.java:7710)
                      at rx.internal.operators.OperatorSubscribeOn$1$1.call(OperatorSubscribeOn.java:62)
                      at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:55)
                      at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:428) 
                      at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
                      at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:272) 
                      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) 
                      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607) 
                      at java.lang.Thread.run(Thread.java:761) 
                   Caused by: java.lang.RuntimeException: java.io.IOException: closed
                      at rx.exceptions.Exceptions.propagate(Exceptions.java:53)
                      at com.ibm.csync.internals.websocket.OkHttpWebSocketConnection.lambda$sendMessage$43(OkHttpWebSocketConnection.java:74)
                      at com.ibm.csync.internals.websocket.OkHttpWebSocketConnection.access$lambda$0(OkHttpWebSocketConnection.java:0)
                      at com.ibm.csync.internals.websocket.OkHttpWebSocketConnection$$Lambda$1.call(Unknown Source)
                      at rx.internal.operators.OperatorMap$1.onNext(OperatorMap.java:55)
                      at rx.internal.util.ScalarSynchronousObservable$1.call(ScalarSynchronousObservable.java:46) 
                      at rx.internal.util.ScalarSynchronousObservable$1.call(ScalarSynchronousObservable.java:35) 
                      at rx.Observable$2.call(Observable.java:162) 
                      at rx.Observable$2.call(Observable.java:154) 
                      at rx.Observable.unsafeSubscribe(Observable.java:7710) 
                      at rx.internal.operators.OperatorSubscribeOn$1$1.call(OperatorSubscribeOn.java:62) 
                      at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:55) 
                      at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:428) 
                      at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
                      at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:272) 
                      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) 
                      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607) 
                      at java.lang.Thread.run(Thread.java:761) 
                   Caused by: java.io.IOException: closed
                      at okhttp3.internal.ws.WebSocketWriter.writeMessageFrameSynchronized(WebSocketWriter.java:178)
                      at okhttp3.internal.ws.WebSocketWriter.access$600(WebSocketWriter.java:47)
                      at okhttp3.internal.ws.WebSocketWriter$FrameSink.close(WebSocketWriter.java:271)
                      at okio.RealBufferedSink.close(RealBufferedSink.java:241)
                      at okhttp3.internal.ws.RealWebSocket.sendMessage(RealWebSocket.java:131)
                      at com.ibm.csync.internals.websocket.OkHttpWebSocketConnection$LockingWebSocket.sendMessage(OkHttpWebSocketConnection.java:148)
                      at com.ibm.csync.internals.websocket.OkHttpWebSocketConnection.lambda$sendMessage$43(OkHttpWebSocketConnection.java:71)
                      at com.ibm.csync.internals.websocket.OkHttpWebSocketConnection.access$lambda$0(OkHttpWebSocketConnection.java:0) 
                      at com.ibm.csync.internals.websocket.OkHttpWebSocketConnection$$Lambda$1.call(Unknown Source) 
                      at rx.internal.operators.OperatorMap$1.onNext(OperatorMap.java:55) 
                      at rx.internal.util.ScalarSynchronousObservable$1.call(ScalarSynchronousObservable.java:46) 
                      at rx.internal.util.ScalarSynchronousObservable$1.call(ScalarSynchronousObservable.java:35) 
                      at rx.Observable$2.call(Observable.java:162) 
                      at rx.Observable$2.call(Observable.java:154) 
                      at rx.Observable.unsafeSubscribe(Observable.java:7710) 
                      at rx.internal.operators.OperatorSubscribeOn$1$1.call(OperatorSubscribeOn.java:62) 
                      at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:55) 
                      at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:428) 
                      at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
                      at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:272) 
                      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) 
                      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607) 
                      at java.lang.Thread.run(Thread.java:761) 
                   Caused by: rx.exceptions.OnErrorThrowable$OnNextValue: OnError while emitting onNext value: okhttp3.RequestBody$2.class
                      at rx.internal.operators.OperatorMap$1.onNext(OperatorMap.java:58)
                      at rx.internal.util.ScalarSynchronousObservable$1.call(ScalarSynchronousObservable.java:46) 
                      at rx.internal.util.ScalarSynchronousObservable$1.call(ScalarSynchronousObservable.java:35) 
                      at rx.Observable$2.call(Observable.java:162) 
                      at rx.Observable$2.call(Observable.java:154) 
                      at rx.Observable.unsafeSubscribe(Observable.java:7710) 
                      at rx.internal.operators.OperatorSubscribeOn$1$1.call(OperatorSubscribeOn.java:62) 
                      at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:55) 
                      at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:428) 
                      at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
                      at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:272) 
                      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) 
                      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607) 
                      at java.lang.Thread.run(Thread.java:761) 
I/Process: Sending signal. PID: 10326 SIG: 9

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions