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

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions