Fix undefined array key in DeduplicationHandler with concurrent access #2020
+9
−2
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.
Problem
When multiple requests write to the deduplication store file simultaneously, partially written lines can be read by concurrent processes. This causes
Undefined array key 1andUndefined array key 2errors on thelist($timestamp, $level, $message) = explode(':', $store[$i], 3)line inisDuplicate().Solution
isDuplicate()— if a line doesn't have all 3 expected parts afterexplode(), it's skipped instead of causing an error. Worst case: a duplicate notification is sent (acceptable trade-off).LOCK_EXflag tofile_put_contents()when appending to the deduplication store, reducing the chance of partially written lines.Related
Fixes #1950
As suggested by @Seldaek in #1950 (comment)