nextcloud / nextcloud/talk-android
OfflineFirstConversationsRepository#getRoom#onNext -> UndeliverableException
Open
Nobody has claimed this yet.
1. to develop
- Dominant language
- Kotlin
- Stars
- 739
- Forks
- 321
- Avg merge
- 14h 59m
- Merged PRs (30d)
- 151
Description
from gplay for 21.1.0 RC1
Exception io.reactivex.exceptions.UndeliverableException:
at io.reactivex.plugins.RxJavaPlugins.onError (RxJavaPlugins.java:367)
at io.reactivex.android.schedulers.HandlerScheduler$ScheduledRunnable.run (HandlerScheduler.java:126)
at android.os.Handler.handleCallback (Handler.java:991)
at android.os.Handler.dispatchMessage (Handler.java:102)
at android.os.Looper.loopOnce (Looper.java:232)
at android.os.Looper.loop (Looper.java:317)
at android.app.ActivityThread.main (ActivityThread.java:8934)
at java.lang.reflect.Method.invoke
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:591)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:911)
Caused by android.database.sqlite.SQLiteConstraintException: error code 19 (extended error code 0): not an error
at net.sqlcipher.database.SQLiteStatement.native_execute
at net.sqlcipher.database.SQLiteStatement.execute (SQLiteStatement.java:61)
at androidx.room.driver.SupportSQLiteStatement$SupportOtherAndroidSQLiteStatement.step (SupportSQLiteStatement.android.kt:366)
at androidx.room.EntityInsertAdapter.insert (EntityInsertAdapter.kt:59)
at androidx.room.EntityUpsertAdapter.upsert (EntityUpsertAdapter.kt:75)
at com.nextcloud.talk.data.database.dao.ConversationsDao_Impl.upsertConversations$lambda$1 (ConversationsDao_Impl.kt:354)
at com.nextcloud.talk.data.database.dao.ConversationsDao_Impl.$r8$lambda$Iai0cI3gB6ZVPh_K7dOT6H7y3Nk (Unknown Source)
at com.nextcloud.talk.data.database.dao.ConversationsDao_Impl$$ExternalSyntheticLambda1.invoke (D8$$SyntheticClass)
at androidx.room.util.DBUtil__DBUtil_androidKt$performBlocking$1$invokeSuspend$$inlined$internalPerform$1$1.invokeSuspend (DBUtil.kt:61)
at androidx.room.util.DBUtil__DBUtil_androidKt$performBlocking$1$invokeSuspend$$inlined$internalPerform$1$1.invoke (Unknown Source:8)
at androidx.room.util.DBUtil__DBUtil_androidKt$performBlocking$1$invokeSuspend$$inlined$internalPerform$1$1.invoke (Unknown Source:4)
at androidx.room.driver.SupportSQLitePooledConnection.transaction (SupportSQLiteConnectionPool.android.kt:83)
at androidx.room.driver.SupportSQLitePooledConnection.withTransaction (SupportSQLiteConnectionPool.android.kt:66)
at androidx.room.util.DBUtil__DBUtil_androidKt$performBlocking$1$invokeSuspend$$inlined$internalPerform$1.invokeSuspend (DBUtil.kt:59)
at androidx.room.util.DBUtil__DBUtil_androidKt$performBlocking$1$invokeSuspend$$inlined$internalPerform$1.invoke (Unknown Source:8)
at androidx.room.util.DBUtil__DBUtil_androidKt$performBlocking$1$invokeSuspend$$inlined$internalPerform$1.invoke (Unknown Source:4)
at androidx.room.driver.SupportSQLiteConnectionPool.useConnection (SupportSQLiteConnectionPool.android.kt:42)
at androidx.room.RoomConnectionManager.useConnection (RoomConnectionManager.android.kt:126)
at androidx.room.RoomDatabase.useConnection$room_runtime_release (RoomDatabase.android.kt:593)
at androidx.room.util.DBUtil__DBUtil_androidKt$performBlocking$1.invokeSuspend (DBUtil.android.kt:247)
at androidx.room.util.DBUtil__DBUtil_androidKt$performBlocking$1.invoke (Unknown Source:8)
at androidx.room.util.DBUtil__DBUtil_androidKt$performBlocking$1.invoke (Unknown Source:4)
at androidx.room.coroutines.RunBlockingUninterruptible_androidKt$runBlockingUninterruptible$1$1.invokeSuspend (RunBlockingUninterruptible.android.kt:52)
at androidx.room.coroutines.RunBlockingUninterruptible_androidKt$runBlockingUninterruptible$1$1.invoke (Unknown Source:8)
at androidx.room.coroutines.RunBlockingUninterruptible_androidKt$runBlockingUninterruptible$1$1.invoke (Unknown Source:4)
at kotlinx.coroutines.intrinsics.UndispatchedKt.startCoroutineUndispatched (Undispatched.kt:27)
at kotlinx.coroutines.CoroutineStart.invoke (CoroutineStart.kt:90)
at kotlinx.coroutines.AbstractCoroutine.start (AbstractCoroutine.kt:123)
at kotlinx.coroutines.BuildersKt__Builders_commonKt.launch (Builders.common.kt:52)
at kotlinx.coroutines.BuildersKt.launch (Unknown Source:1)
at androidx.room.coroutines.RunBlockingUninterruptible_androidKt$runBlockingUninterruptible$1.invokeSuspend (RunBlockingUninterruptible.android.kt:51)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith (ContinuationImpl.kt:33)
at kotlinx.coroutines.DispatchedTask.run (DispatchedTask.kt:104)
at kotlinx.coroutines.EventLoopImplBase.processNextEvent (EventLoop.common.kt:277)
at kotlinx.coroutines.BlockingCoroutine.joinBlocking (Builders.kt:95)
at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking (Builders.kt:69)
at kotlinx.coroutines.BuildersKt.runBlocking (Unknown Source:1)
at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking$default (Builders.kt:48)
at kotlinx.coroutines.BuildersKt.runBlocking$default (Unknown Source:1)
at androidx.room.coroutines.RunBlockingUninterruptible_androidKt.runBlockingUninterruptible (RunBlockingUninterruptible.android.kt:45)
at androidx.room.util.DBUtil__DBUtil_androidKt.performBlocking (DBUtil.android.kt:69)
at androidx.room.util.DBUtil.performBlocking (Unknown Source:1)
at com.nextcloud.talk.data.database.dao.ConversationsDao_Impl.upsertConversations (ConversationsDao_Impl.kt:353)
at com.nextcloud.talk.conversationlist.data.network.OfflineFirstConversationsRepository$getRoom$1$1$onNext$1.invokeSuspend (OfflineFirstConversationsRepository.kt:101)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith (ContinuationImpl.kt:33)
at kotlinx.coroutines.DispatchedTask.run (DispatchedTask.kt:104)
at kotlinx.coroutines.EventLoopImplBase.processNextEvent (EventLoop.common.kt:277)
at kotlinx.coroutines.BlockingCoroutine.joinBlocking (Builders.kt:95)
at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking (Builders.kt:69)
at kotlinx.coroutines.BuildersKt.runBlocking (Unknown Source:1)
at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking$default (Builders.kt:48)
at kotlinx.coroutines.BuildersKt.runBlocking$default (Unknown Source:1)
at com.nextcloud.talk.conversationlist.data.network.OfflineFirstConversationsRepository$getRoom$1$1.onNext (OfflineFirstConversationsRepository.kt:98)
at com.nextcloud.talk.conversationlist.data.network.OfflineFirstConversationsRepository$getRoom$1$1.onNext (OfflineFirstConversationsRepository.kt:75)
at io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.drainNormal (ObservableObserveOn.java:201)
at io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.run (ObservableObserveOn.java:255)
at io.reactivex.android.schedulers.HandlerScheduler$ScheduledRunnable.run (HandlerScheduler.java:124)
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start in OfflineFirstConversationsRepository.kt around lines 75, 98, and 101, then inspect the ConversationsDao upsert path shown in the stack trace. Reproduce the reported conversation update and determine why it reaches an UndeliverableException; done means the SQLite constraint failure is handled or prevented without the reported error.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- android, kotlin, sqlite
- Domain
- database, mobile
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 35/100