[PLAT-6799] Improve metadata performance with async file I/O #1133
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.
Goal
To reduce the overhead of adding metadata by performing filesystem I/O on a background queue.
Changeset
Metadata is now serialized to a JSON encoded C string in memory that is read at crash time.
File writing now occurs asynchronously on a dedicated serial
dispatch_queue
to free up the calling thread and avoid provoking filesystem contention.Storage for the
isLaunching
property now goes through the KV-store (on the main thread) so that it can be accurately read at next start-up in the event of a crash (to computelastRunInfo
)Testing
A unit test case has been added to verify that interrupted metadata updates do not result in invalid JSON being added to crash reports.
Ran successful full E2E on CI