Skip to content

onError in SDK from broken connnection crashes applications #20

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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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