Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

IllegalStateException and InterruptedIOException when syncing a lot of articles #1139

Closed
mx-psi opened this issue Mar 13, 2021 · 2 comments
Closed

Comments

@mx-psi
Copy link

mx-psi commented Mar 13, 2021

Issue details

I imported my Pocket data (~17k articles) on the wallabag.it instance, which caused several errors in the Android app while syncing them.

Duplicate?

Have you searched the issues of this repository if your issue is already known? yes/no

Actual behaviour

I am using the wallabag.it instance. I imported my Pocket data, which is about 17k articles. The app works fine with the articles synced, but while syncing the articles I got several Java exceptions in two different Android devices. Below you can see the two different kinds of stack traces I got.

IllegalStateException
Erreur inconnue
java.lang.IllegalStateException: Couldn't read row 0, col 0 from CursorWindow.  Make sure the Cursor is initialized correctly before accessing data from it.
Pile d'erreur :
java.lang.IllegalStateException: Couldn't read row 0, col 0 from CursorWindow.  Make sure the Cursor is initialized correctly before accessing data from it.
	at android.database.CursorWindow.nativeGetLong(Native Method)
	at android.database.CursorWindow.getLong(CursorWindow.java:511)
	at android.database.AbstractWindowedCursor.getLong(AbstractWindowedCursor.java:75)
	at org.greenrobot.greendao.AbstractDao.loadCurrent(AbstractDao.java:541)
	at org.greenrobot.greendao.AbstractDao.loadUnique(AbstractDao.java:172)
	at org.greenrobot.greendao.AbstractDao.loadUniqueAndCloseCursor(AbstractDao.java:159)
	at org.greenrobot.greendao.AbstractDao.load(AbstractDao.java:148)
	at fr.gaulupeau.apps.Poche.data.dao.entities.Article.getArticleContent(Article.java:180)
	at fr.gaulupeau.apps.Poche.data.dao.entities.Article.getContent(Article.java:147)
	at fr.gaulupeau.apps.Poche.service.workers.ArticleUpdater.processArticle(ArticleUpdater.java:310)
	at fr.gaulupeau.apps.Poche.service.workers.ArticleUpdater.processArticles(ArticleUpdater.java:255)
	at fr.gaulupeau.apps.Poche.service.workers.ArticleUpdater.performUpdate(ArticleUpdater.java:198)
	at fr.gaulupeau.apps.Poche.service.workers.ArticleUpdater.update(ArticleUpdater.java:127)
	at fr.gaulupeau.apps.Poche.service.workers.ArticleUpdateWorker.updateArticles(ArticleUpdateWorker.java:77)
	at fr.gaulupeau.apps.Poche.service.workers.ArticleUpdateWorker.update(ArticleUpdateWorker.java:37)
	at fr.gaulupeau.apps.Poche.service.tasks.UpdateArticlesTask.run(UpdateArticlesTask.java:17)
	at fr.gaulupeau.apps.Poche.service.tasks.ActionRequestTask.run(ActionRequestTask.java:25)
	at fr.gaulupeau.apps.Poche.service.-$$Lambda$0cveUIqKhxWljSld0gpOhfhYfj0.run(lambda)
	at fr.gaulupeau.apps.Poche.service.TaskService.run(TaskService.java:162)
	at fr.gaulupeau.apps.Poche.service.TaskService.lambda$PgumDII_lptJcUDKRD70B1M_ER8(TaskService.java)
	at fr.gaulupeau.apps.Poche.service.-$$Lambda$TaskService$PgumDII_lptJcUDKRD70B1M_ER8.run(lambda)
	at java.lang.Thread.run(Thread.java:776)
InterruptedIOException
Erreur inconnue
java.io.InterruptedIOException
Pile d'erreur :
java.io.InterruptedIOException
	at okhttp3.internal.http2.Http2Stream.waitForIo$okhttp(Http2Stream.kt:662)
	at okhttp3.internal.http2.Http2Stream.takeHeaders(Http2Stream.kt:140)
	at okhttp3.internal.http2.Http2ExchangeCodec.readResponseHeaders(Http2ExchangeCodec.kt:96)
	at okhttp3.internal.connection.Exchange.readResponseHeaders(Exchange.kt:106)
	at okhttp3.internal.http.CallServerInterceptor.intercept(CallServerInterceptor.kt:79)
	at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
	at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.kt:34)
	at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
	at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.kt:95)
	at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
	at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.kt:83)
	at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
	at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.kt:76)
	at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
	at wallabag.apiwrapper.TokenRefreshingInterceptor.intercept(TokenRefreshingInterceptor.java:65)
	at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
	at okhttp3.internal.connection.RealCall.getResponseWithInterceptorChain$okhttp(RealCall.kt:201)
	at okhttp3.internal.connection.RealCall.execute(RealCall.kt:154)
	at retrofit2.OkHttpCall.execute(OkHttpCall.java:188)
	at retrofit2.DefaultCallAdapterFactory$ExecutorCallbackCall.execute(DefaultCallAdapterFactory.java:104)
	at wallabag.apiwrapper.WallabagService.execAndCheckBody(WallabagService.java:1499)
	at wallabag.apiwrapper.WallabagService.lambda$getArticles$0$WallabagService(WallabagService.java:218)
	at wallabag.apiwrapper.-$$Lambda$WallabagService$PrzoUvX9wnRBX2jTxVqPJ-eD3zU.run(Unknown Source:4)
	at wallabag.apiwrapper.NotFoundPolicy.call(NotFoundPolicy.java:140)
	at wallabag.apiwrapper.NotFoundPolicy.call(NotFoundPolicy.java:133)
	at wallabag.apiwrapper.NotFoundPolicy.call(NotFoundPolicy.java:128)
	at wallabag.apiwrapper.WallabagService.getArticles(WallabagService.java:218)
	at wallabag.apiwrapper.ArticlesQueryBuilder.execute(ArticlesQueryBuilder.java:282)
	at wallabag.apiwrapper.ArticlesPageIterator.hasNext(ArticlesPageIterator.java:80)
	at fr.gaulupeau.apps.Poche.service.workers.ArticleUpdater.performUpdate(ArticleUpdater.java:183)
	at fr.gaulupeau.apps.Poche.service.workers.ArticleUpdater.update(ArticleUpdater.java:127)
	at fr.gaulupeau.apps.Poche.service.workers.ArticleUpdateWorker.updateArticles(ArticleUpdateWorker.java:77)
	at fr.gaulupeau.apps.Poche.service.workers.ArticleUpdateWorker.update(ArticleUpdateWorker.java:37)
	at fr.gaulupeau.apps.Poche.service.tasks.UpdateArticlesTask.run(UpdateArticlesTask.java:17)
	at fr.gaulupeau.apps.Poche.service.tasks.ActionRequestTask.run(ActionRequestTask.java:25)
	at fr.gaulupeau.apps.Poche.service.-$$Lambda$0cveUIqKhxWljSld0gpOhfhYfj0.run(Unknown Source:2)
	at fr.gaulupeau.apps.Poche.service.TaskService.run(TaskService.java:162)
	at fr.gaulupeau.apps.Poche.service.TaskService.lambda$PgumDII_lptJcUDKRD70B1M_ER8(Unknown Source:0)
	at fr.gaulupeau.apps.Poche.service.-$$Lambda$TaskService$PgumDII_lptJcUDKRD70B1M_ER8.run(Unknown Source:2)
	at java.lang.Thread.run(Thread.java:919)

The InterruptedIOException happened three times, roughly every two minutes, same error each time, and only on the OnePlus device (see below for details). It only happened while the app was running in the background: staying inside the app made the sync complete successfully.

The IllegalStateException happened once on the Huawei device. I can't say for certain if the app was running in the background or not.

Expected behaviour

The app should sync without errors.

Steps to reproduce the issue

I haven't been able to reproduce the errors again but I am guessing it has to do with syncing large amounts of information with the server.

Environment details

As stated above the errors happened in two devices

First device (OnePlus)

  • wallabag app version: Version 2.4.2
  • wallabag app installation source (e.g. Gplay, F-Droid, manual): F-Droid
  • Android OS version: LineageOS 17 (Android 10)
  • Android ROM (e.g. stock, LineageOS, SlimRom,…): LineageOS 17
  • Android hardware: OnePlus 6T
  • wallabag server version: Unknown, I am using the wallabag.it instance.
  • Do you have Two-Factor-Authentication enabled?: yes/no

Second device (Huawei)

  • wallabag app version: Version 2.4.2
  • wallabag app installation source (e.g. Gplay, F-Droid, manual): F-Droid
  • Android OS version: EMUI 5.0.4 (Android 7.0)
  • Android ROM (e.g. stock, LineageOS, SlimRom,…): stock
  • Android hardware: Huawei BTV-DL09
  • wallabag server version: Unknown, I am using the wallabag.it instance.
  • Do you have Two-Factor-Authentication enabled?: yes/no

Logs

wallabag server

Using the wallabag.it instance so I don't have access to them. I give my consent for the logs to be checked if need be.

Web server

Using the wallabag.it instance so I don't have access to them.

Your experience with wallabag Android app

I am quite happy that the app keeps working like a charm with several thousand articles :) Thanks for the good work and the effort put into making the app!!

@di72nn
Copy link
Member

di72nn commented Apr 1, 2021

Thanks for the report!

The first error is known as #413.
Most likely caused by very large articles (not the number of articles).

The second error is tracked as #1126.
Most likely caused by us not handling background restrictions. Current workaround is to perform the initial sync with the app being in foreground and the screen turned on.

@di72nn di72nn closed this as completed Apr 1, 2021
@mx-psi
Copy link
Author

mx-psi commented Apr 2, 2021

Awesome, thanks for having a look, hope the report was useful even if it was a duplicate :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants