Skip to content

Sync fails with databaseError whenever the server returns library contents (HTTP 200) #126

Open

Description

@gtauzin

Brief summary

Sync with a self-hosted sync server never completes. Every sync that receives a non-empty response
fails with SyncResult: databaseError: true. Android treats this as a hard error and does not
retry, and nothing is written to the device — the library stays empty.

Uploads work: data added on the device reaches the server and is stored correctly. Downloads never
apply.

Observed pattern across both of my devices:

  • Server responds 204 No Content (nothing changed) → sync succeeds
  • Server responds 200 with library contents → sync fails with databaseError: true

The server returns HTTP 200 and a well-formed body; the failure occurs on the device after the
response is received. Response times of 3.8s and 24.2s both failed identically, so it is not a
timeout.

Server: KotatsuApp/kotatsu-syncserver @ master, MariaDB 11.8, HTTPS via a reverse proxy.

Account data held server-side:

favourites 54 (52 not soft-deleted)
manga 97
tags 190
favourite categories 4
history entries 82

GET /resource/favourites for this account returns 58,011 bytes of JSON.

logcat

W SyncManager: failed sync operation JobId=100000 .../io.github.landwarderer.futon.sync u0
  [io.github.landwarderer.futon.favourites] OTHER ExpectedIn=-27s STANDBY-EXEMPTED(TOP)
  Reason=AutoSync, SyncResult: databaseError: true stats []
E SyncManager: not retrying sync operation because the error is a hard error:
  JobId=100000 .../io.github.landwarderer.futon.sync u0
  [io.github.landwarderer.futon.favourites] OTHER Reason=AutoSync Retries=1

Identical output for io.github.landwarderer.futon.history.

No stack trace is available: on a release build the exception is not written to logcat, so logcat
contains no entry from the app itself. There is nothing in the crash buffer and nothing in
dumpsys dropbox.

adb shell dumpsys content — after enabling both authorities:

Authority                                Syncable  Enabled  Tot  Fail  Time  Last Sync
io.github.landwarderer.futon.favourites  1         true     2    2     31s   USER FAILURE
io.github.landwarderer.futon.history     1         true     2    2     30s   USER FAILURE

Sync Statistics
  Today:   Success (0) Failure (4 for 61.9s avg=15.4s)
  Day-1:   Success (0) Failure (58 for 169.8s avg=2.9s)
  Week-3:  Success (0) Failure (35 for 246.4s avg=7.0s)
  Week-11: Success (0) Failure (15 for 33.1s avg=2.2s)
  Week-29: Success (0) Failure (4 for 7.0s avg=1.7s)

Zero successful syncs on this account, going back 29 weeks.

Server access log for the same two attempts

POST /resource/favourites 200 in 24241ms
POST /resource/history    200 in 20946ms
POST /resource/favourites 200 in  3835ms
POST /resource/history    200 in  3005ms

I captured the 58 KB response body and can attach it if useful.

Steps to reproduce

  1. Host KotatsuApp/kotatsu-syncserver and point Futon at it (Settings → Services →
    Synchronization settings → Server address)
  2. Sign in, and upload a library of this size from one device — uploads succeed, and the data is
    verifiably stored server-side
  3. On a second device with an empty library, sign in to the same account and sync
  4. The server responds 200 with the full library; the sync fails and nothing is written locally

Reproducible on demand: two consecutive manual syncs produced the same result.

Futon version

9.8.1

Android version

12

Device

Onyx Boox Note Air 3C

Acknowledgements

  • This is not a duplicate of an existing issue. Please look through the list of open issues before creating a new one.
  • This is not an issue with a specific manga source. Otherwise, you have to proceed from parsers repository.
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

    bugSomething isn't working

    Type

    No type

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions