Skip to content

[mapillary_tools] Handle SQLite database errors gracefully in cache reads#813

Merged
caglarpir merged 1 commit intomainfrom
sqlite-cache-error-handling-v2
Mar 4, 2026
Merged

[mapillary_tools] Handle SQLite database errors gracefully in cache reads#813
caglarpir merged 1 commit intomainfrom
sqlite-cache-error-handling-v2

Conversation

@caglarpir
Copy link
Contributor

The cache read operations could crash if the SQLite database file becomes corrupted or encounters disk I/O errors. This change adds exception handling to gracefully return None when DatabaseError exceptions occur, allowing the application to continue without the cache rather than failing entirely.

Summary:
- Fix sqlite3.OperationalError: disk I/O error in the file handle cache from crashing the entire upload process
  - PersistentCache.get() now catches sqlite3.DatabaseError and returns None (cache miss) instead of propagating the exception
  - Cache failures are logged as warnings so they remain visible for debugging

  Context

  The upload file handle cache is a SQLite database that stores server-returned handles for already-uploaded images. It is purely an optimization to skip re-uploading — if the cache is
  unavailable, the server's fetch_offset endpoint confirms prior uploads at the cost of one extra HTTP round-trip per image.

  Previously, any SQLite error during cache lookup (disk I/O error, corrupt database, etc.) propagated up through _continue_or_fail which treated it as a fatal error, aborting the upload of all
   remaining images. This was observed on Windows with 4 concurrent upload workers rapidly opening/closing SQLite connections to the same cache file.
@meta-cla meta-cla bot added the cla signed label Feb 23, 2026
@caglarpir caglarpir merged commit 31993c6 into main Mar 4, 2026
16 checks passed
@caglarpir caglarpir deleted the sqlite-cache-error-handling-v2 branch March 4, 2026 08:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant