Skip to content

Comments

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

Open
caglarpir wants to merge 1 commit intomainfrom
sqlite-cache-error-handling-v2
Open

[mapillary_tools] Handle SQLite database errors gracefully in cache reads#813
caglarpir wants to merge 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
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