Trying to debug a situation where RiotX was failing to send decryptable messages to Riot/Web (https://github.com/matrix-org/riot-web-rageshakes/issues/1943), my best guess is that the following exceptions stopped RiotX calculating the current device list for a given room, and so failed to encrypt to the right targets:
11-19 11:27:23.964Z NetworkConnection(ioException=com.squareup.moshi.JsonEncodingException: Use JsonReader.setLenient(true) to accept malformed JSON at path $)
at im.vector.matrix.android.internal.network.Request.execute(Request.kt:41)
at im.vector.matrix.android.internal.network.Request$execute$1.invokeSuspend(Unknown Source:11)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
at kotlinx.coroutines.DispatchedTask.run(Dispatched.kt:241)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:214)
at android.os.HandlerThread.run(HandlerThread.java:67)
Caused by: com.squareup.moshi.JsonEncodingException: Use JsonReader.setLenient(true) to accept malformed JSON at path $
at com.squareup.moshi.JsonReader.syntaxError(JsonReader.java:233)
at com.squareup.moshi.JsonUtf8Reader.checkLenient(JsonUtf8Reader.java:1051)
at com.squareup.moshi.JsonUtf8Reader.doPeek(JsonUtf8Reader.java:366)
at com.squareup.moshi.JsonUtf8Reader.peek(JsonUtf8Reader.java:193)
at com.squareup.moshi.JsonAdapter$2.fromJson(JsonAdapter.java:134)
at com.squareup.moshi.JsonAdapter.fromJson(JsonAdapter.java:41)
at im.vector.matrix.android.internal.network.RetrofitExtensionsKt.toFailure(RetrofitExtensions.kt:96)
at im.vector.matrix.android.internal.network.RetrofitExtensionsKt.toFailure(RetrofitExtensions.kt:76)
at im.vector.matrix.android.internal.network.Request.execute(Request.kt:37)
... 7 more
11-19 11:27:23.964Z 2408 E/ /DeviceListManager: ##doKeyDownloadForUsers(): error
NetworkConnection(ioException=com.squareup.moshi.JsonEncodingException: Use JsonReader.setLenient(true) to accept malformed JSON at path $)
at im.vector.matrix.android.internal.network.Request.execute(Request.kt:41)
at im.vector.matrix.android.internal.network.Request$execute$1.invokeSuspend(Unknown Source:11)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
at kotlinx.coroutines.DispatchedTask.run(Dispatched.kt:241)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:214)
at android.os.HandlerThread.run(HandlerThread.java:67)
Caused by: com.squareup.moshi.JsonEncodingException: Use JsonReader.setLenient(true) to accept malformed JSON at path $
at com.squareup.moshi.JsonReader.syntaxError(JsonReader.java:233)
at com.squareup.moshi.JsonUtf8Reader.checkLenient(JsonUtf8Reader.java:1051)
at com.squareup.moshi.JsonUtf8Reader.doPeek(JsonUtf8Reader.java:366)
at com.squareup.moshi.JsonUtf8Reader.peek(JsonUtf8Reader.java:193)
at com.squareup.moshi.JsonAdapter$2.fromJson(JsonAdapter.java:134)
at com.squareup.moshi.JsonAdapter.fromJson(JsonAdapter.java:41)
at im.vector.matrix.android.internal.network.RetrofitExtensionsKt.toFailure(RetrofitExtensions.kt:96)
at im.vector.matrix.android.internal.network.RetrofitExtensionsKt.toFailure(RetrofitExtensions.kt:76)
at im.vector.matrix.android.internal.network.Request.execute(Request.kt:37)
... 7 more
11-19 11:27:23.987Z NetworkConnection(ioException=com.squareup.moshi.JsonEncodingException: Use JsonReader.setLenient(true) to accept malformed JSON at path $)
at im.vector.matrix.android.internal.network.Request.execute(Request.kt:41)
at im.vector.matrix.android.internal.network.Request$execute$1.invokeSuspend(Unknown Source:11)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
at kotlinx.coroutines.DispatchedTask.run(Dispatched.kt:241)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:214)
at android.os.HandlerThread.run(HandlerThread.java:67)
Caused by: com.squareup.moshi.JsonEncodingException: Use JsonReader.setLenient(true) to accept malformed JSON at path $
at com.squareup.moshi.JsonReader.syntaxError(JsonReader.java:233)
at com.squareup.moshi.JsonUtf8Reader.checkLenient(JsonUtf8Reader.java:1051)
at com.squareup.moshi.JsonUtf8Reader.doPeek(JsonUtf8Reader.java:366)
at com.squareup.moshi.JsonUtf8Reader.peek(JsonUtf8Reader.java:193)
at com.squareup.moshi.JsonAdapter$2.fromJson(JsonAdapter.java:134)
at com.squareup.moshi.JsonAdapter.fromJson(JsonAdapter.java:41)
at im.vector.matrix.android.internal.network.RetrofitExtensionsKt.toFailure(RetrofitExtensions.kt:96)
at im.vector.matrix.android.internal.network.RetrofitExtensionsKt.toFailure(RetrofitExtensions.kt:76)
at im.vector.matrix.android.internal.network.Request.execute(Request.kt:37)
... 7 more
11-19 11:27:23.989Z 2408 E/ /DeviceListManager: ## refreshOutdatedDeviceLists() : ERROR updating device keys for users [@andrewm:amorgan.xyz, @matthew:matrix.org, @jryans:matrix.org, @valere35:matrix.org]
NetworkConnection(ioException=com.squareup.moshi.JsonEncodingException: Use JsonReader.setLenient(true) to accept malformed JSON at path $)
at im.vector.matrix.android.internal.network.Request.execute(Request.kt:41)
at im.vector.matrix.android.internal.network.Request$execute$1.invokeSuspend(Unknown Source:11)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
at kotlinx.coroutines.DispatchedTask.run(Dispatched.kt:241)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:214)
at android.os.HandlerThread.run(HandlerThread.java:67)
Caused by: com.squareup.moshi.JsonEncodingException: Use JsonReader.setLenient(true) to accept malformed JSON at path $
at com.squareup.moshi.JsonReader.syntaxError(JsonReader.java:233)
at com.squareup.moshi.JsonUtf8Reader.checkLenient(JsonUtf8Reader.java:1051)
at com.squareup.moshi.JsonUtf8Reader.doPeek(JsonUtf8Reader.java:366)
at com.squareup.moshi.JsonUtf8Reader.peek(JsonUtf8Reader.java:193)
at com.squareup.moshi.JsonAdapter$2.fromJson(JsonAdapter.java:134)
at com.squareup.moshi.JsonAdapter.fromJson(JsonAdapter.java:41)
at im.vector.matrix.android.internal.network.RetrofitExtensionsKt.toFailure(RetrofitExtensions.kt:96)
at im.vector.matrix.android.internal.network.RetrofitExtensionsKt.toFailure(RetrofitExtensions.kt:76)
at im.vector.matrix.android.internal.network.Request.execute(Request.kt:37)
... 7 more
Separately, the lack of logging here makes it almost impossible to see what's gone wrong - we should be logging the results of trying to keep our device lists accurate, so we can see when/how it fails.
Trying to debug a situation where RiotX was failing to send decryptable messages to Riot/Web (https://github.com/matrix-org/riot-web-rageshakes/issues/1943), my best guess is that the following exceptions stopped RiotX calculating the current device list for a given room, and so failed to encrypt to the right targets:
Separately, the lack of logging here makes it almost impossible to see what's gone wrong - we should be logging the results of trying to keep our device lists accurate, so we can see when/how it fails.