Add error handling to cache store future operations#499
Open
wangfan00001 wants to merge 1 commit intoBaseflow:developfrom
Open
Add error handling to cache store future operations#499wangfan00001 wants to merge 1 commit intoBaseflow:developfrom
wangfan00001 wants to merge 1 commit intoBaseflow:developfrom
Conversation
- Add catchError handler to properly propagate errors to completer - Ensure _futureCache cleanup on both success and error paths
6354c60 to
c303009
Compare
centy
pushed a commit
to centy/flutter_cache_manager
that referenced
this pull request
Apr 11, 2026
…nc errors - Atomic file writes: Modified putFile, putFileStream (in cache_manager.dart) and _saveFileAndPostUpdates (in web_helper.dart) to write data into a .tmp file first. The file is only atomically renamed to its final path upon successful completion. This prevents partially written or 0-byte files from lingering if the app is killed, crashes, or runs out of disk space during a write. - Zero-byte cache protection: Updated _manageResponse (in web_helper.dart) to detect successful downloads that yield 0 bytes (e.g. backend error returning empty body with 200 OK) and delete the file without registering it in the SQLite cache DB. - FileSystemIO directory optimization: Fixed createFile in ile_system_io.dart to reuse the existing Directory reference instead of creating a new Directory object which was immediately discarded. - Integrated PR Baseflow#499: Added a catchError block to _getCacheDataFromDatabase(key).then(...) in cache_store.dart. This ensures the Completer resolves properly (with an error) and cleans up _futureCache, preventing a memory leak and a hung Future when DB or FileSystem exceptions occur during data retrieval. - Integrated PR Baseflow#487: Added an empty file check (length > 0) in json_cache_info_repository.dart before decoding JSON to prevent FormatException crashes when the JSON metadata file is empty (e.g. after a disk full interruption). - Added comprehensive tests: Covered atomic file operation errors and 0-byte download handling in cache_manager_test.dart and web_helper_test.dart.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
✨ What kind of change does this PR introduce? (Bug fix, feature, docs update...)
Bug fix
When database operations in the
retrieveCacheDatamethod encounter exceptions, error callbacks are not properly executed. Specifically:_getCacheDataFromDatabaseor related async operations throw exceptions, theCompleteris not handled correctly_futureCachemay not be properly cleaned up, causing memory leaks🆕 What is the new behavior (if this is a feature change)?
After the fix:
catchErrorhandler to properly catch and propagate exceptions to thecompleter_futureCachein both success and error paths💥 Does this PR introduce a breaking change?
No
🐛 Recommendations for testing
_fileExistsmethod throws exceptions_cacheInfoRepositoryaccess fails_futureCacheis properly cleaned up in exception cases📝 Links to relevant issues/docs
N/A
🤔 Checklist before submitting