Maildir: avoid race conditions when email are deleted while reading #6
+8
−1
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.
As the list of email is generated before all emails can be iterated, there is always a chance that another program accesses the Maildir and decides to delete a file.
In my use case we iterate over a directory scanning for the most recently received mail, and have a daily cleanup job remove older mails. Expectedly whenever the cleanup job runs our script fails to complete, since the script needs to scan and parse 30k mails, and the cleanup job only needs to delete files (so it always overtakes the scanning script).
The solution is to ignore only "No such file or directory" errors when opening a mail, and if this error occurs directly go to the next message. All other errors are reported back to the user as before.
I've considered the following alternatives:
Hence I deemed both alternatives non-feasible.