Fix file cache store delete_matched
to work on keys longer than allowed filename size
#49694
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.
Fixes #49690.
For file cache store we url-encode keys to not to clash to with the file system path separators, like
/
. When the resulting key is longer than the FS max file name length, we split it into parts. But this splitting can be done incorrectly and made in-between the encode-sequence, while it should be done only on the boundaries.Example: for key
foo%20bar
splitting into['foo%2', '0bar']
is incorrect, should be['foo', '%20bar']
or['foo%20', 'bar']
.Then when we use
delete_matched
, we traverse the FS directories and try to decode dir names and get an error if we previously made a split in the incorrect place.