java.lang.IllegalStateException: The content of this Observable is already released With Synchronous API

Hello,

In an environment with large dataset,I’m getting the following exception:

java.lang.IllegalStateException: The content of this Observable (queryRow.191e72b2-e51c-4d6b-ac2c-65200179c642) is already released. Subscribe earlier or tune the CouchbaseEnvironment#autoreleaseAfter() setting.
at com.couchbase.client.core.utils.UnicastAutoReleaseSubject$OnSubscribeAction.call(UnicastAutoReleaseSubject.java:243) ~[core-io-1.6.0.jar:?]
at com.couchbase.client.core.utils.UnicastAutoReleaseSubject$OnSubscribeAction.call(UnicastAutoReleaseSubject.java:207) ~[core-io-1.6.0.jar:?]
at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48) ~[rxjava-1.3.7.jar:1.3.7]
at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30) ~[rxjava-1.3.7.jar:1.3.7]
at rx.Observable.unsafeSubscribe(Observable.java:10327) ~[rxjava-1.3.7.jar:1.3.7]
at rx.internal.operators.OnSubscribeMap.call(OnSubscribeMap.java:48) ~[rxjava-1.3.7.jar:1.3.7]
at rx.internal.operators.OnSubscribeMap.call(OnSubscribeMap.java:33) ~[rxjava-1.3.7.jar:1.3.7]
at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48) ~[rxjava-1.3.7.jar:1.3.7]
at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30) ~[rxjava-1.3.7.jar:1.3.7]
at rx.Observable.unsafeSubscribe(Observable.java:10327) ~[rxjava-1.3.7.jar:1.3.7]
at rx.internal.operators.OperatorZip$Zip.start(OperatorZip.java:202) ~[rxjava-1.3.7.jar:1.3.7]
at rx.internal.operators.OperatorZip$ZipSubscriber.onNext(OperatorZip.java:143) ~[rxjava-1.3.7.jar:1.3.7]
at rx.internal.operators.OperatorZip$ZipSubscriber.onNext(OperatorZip.java:109) ~[rxjava-1.3.7.jar:1.3.7]
at rx.internal.util.ScalarSynchronousObservable$WeakSingleProducer.request(ScalarSynchronousObservable.java:276) ~[rxjava-1.3.7.jar:1.3.7]
at rx.Subscriber.setProducer(Subscriber.java:209) ~[rxjava-1.3.7.jar:1.3.7]
at rx.internal.util.ScalarSynchronousObservable$JustOnSubscribe.call(ScalarSynchronousObservable.java:138) ~[rxjava-1.3.7.jar:1.3.7]
at rx.internal.util.ScalarSynchronousObservable$JustOnSubscribe.call(ScalarSynchronousObservable.java:129) ~[rxjava-1.3.7.jar:1.3.7]
at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48) ~[rxjava-1.3.7.jar:1.3.7]
at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30) ~[rxjava-1.3.7.jar:1.3.7]
at rx.Observable.unsafeSubscribe(Observable.java:10327) ~[rxjava-1.3.7.jar:1.3.7]
at rx.internal.operators.OperatorMerge$MergeSubscriber.onNext(OperatorMerge.java:248) ~[rxjava-1.3.7.jar:1.3.7]
at rx.internal.operators.OperatorMerge$MergeSubscriber.onNext(OperatorMerge.java:148) ~[rxjava-1.3.7.jar:1.3.7]
at rx.internal.operators.OnSubscribeMap$MapSubscriber.onNext(OnSubscribeMap.java:77) ~[rxjava-1.3.7.jar:1.3.7]
at rx.internal.operators.OperatorMerge$MergeSubscriber.emitScalar(OperatorMerge.java:511) ~[rxjava-1.3.7.jar:1.3.7]
at rx.internal.operators.OperatorMerge$MergeSubscriber.tryEmit(OperatorMerge.java:466) ~[rxjava-1.3.7.jar:1.3.7]
at rx.internal.operators.OperatorMerge$MergeSubscriber.onNext(OperatorMerge.java:244) ~[rxjava-1.3.7.jar:1.3.7]
at rx.internal.operators.OperatorMerge$MergeSubscriber.onNext(OperatorMerge.java:148) ~[rxjava-1.3.7.jar:1.3.7]
at rx.internal.operators.OnSubscribeMap$MapSubscriber.onNext(OnSubscribeMap.java:77) ~[rxjava-1.3.7.jar:1.3.7]
at rx.observers.Subscribers$5.onNext(Subscribers.java:235) ~[rxjava-1.3.7.jar:1.3.7]
at rx.internal.operators.OnSubscribeDoOnEach$DoOnEachSubscriber.onNext(OnSubscribeDoOnEach.java:101) ~[rxjava-1.3.7.jar:1.3.7]
at rx.internal.operators.OperatorOnErrorResumeNextViaFunction$4.onNext(OperatorOnErrorResumeNextViaFunction.java:154) ~[rxjava-1.3.7.jar:1.3.7]
at rx.internal.operators.OnSubscribeTimeoutTimedWithFallback$TimeoutMainSubscriber.onNext(OnSubscribeTimeoutTimedWithFallback.java:120) ~[rxjava-1.3.7.jar:1.3.7]
at rx.observers.SafeSubscriber.onNext(SafeSubscriber.java:134) ~[rxjava-1.3.7.jar:1.3.7]
at rx.internal.producers.SingleProducer.request(SingleProducer.java:65) ~[rxjava-1.3.7.jar:1.3.7]
at rx.internal.producers.ProducerArbiter.setProducer(ProducerArbiter.java:126) ~[rxjava-1.3.7.jar:1.3.7]
at rx.internal.operators.OnSubscribeTimeoutTimedWithFallback$TimeoutMainSubscriber.setProducer(OnSubscribeTimeoutTimedWithFallback.java:155) ~[rxjava-1.3.7.jar:1.3.7]
at rx.Subscriber.setProducer(Subscriber.java:205) ~[rxjava-1.3.7.jar:1.3.7]
at rx.subjects.AsyncSubject.onCompleted(AsyncSubject.java:103) ~[rxjava-1.3.7.jar:1.3.7]
at com.couchbase.client.core.endpoint.AbstractGenericHandler.completeResponse(AbstractGenericHandler.java:508) ~[core-io-1.6.0.jar:?]
at com.couchbase.client.core.endpoint.AbstractGenericHandler.access$000(AbstractGenericHandler.java:86) ~[core-io-1.6.0.jar:?]
at com.couchbase.client.core.endpoint.AbstractGenericHandler$1.call(AbstractGenericHandler.java:526) ~[core-io-1.6.0.jar:?]
at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:55) ~[rxjava-1.3.7.jar:1.3.7]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) ~[?:1.8.0_131]
at java.util.concurrent.FutureTask.run(FutureTask.java:266) ~[?:1.8.0_131]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) ~[?:1.8.0_131]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) ~[?:1.8.0_131]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) ~[?:1.8.0_131]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) ~[?:1.8.0_131]
at java.lang.Thread.run(Thread.java:748) ~[?:1.8.0_131]

Reading the documentation I found that this is related to a delay between creating my observable and the observer .But, for my case, I’m using the synchrnous API ( bucket.query(N1qlQuery.simple(query))).
I know that even the synchronous API is using in the background the asynchronous one, but I suppose that the creation of observable/observer is transparent and should not cause this error.
Any help please on this as it is an urgent issue?
Thanks

Anyone please from couchbase team to help on this?

@zizou there are couple reasons why this could happen. A couple questions to clarify:

  • does it happen on every query?
  • how large is the query response and how long does the query take to execute on the server side?
  • can you make sure that GC is not stalling your app so that there is a gap in subscription time? We’ve seen this in the past as well