Replace Pattern with CharMatcher for valid/clean key checks #20528
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.
Description
Replace Pattern with Guava's CharMatcher in the
validKey
andcleanKey
methods.validKey
is in the hot path when adding fields to messages.Motivation and Context
Restoring archives or other activity that re-creates messages in bulk will cause
validKey
to be called very often. In various scenarios, it accounted for 25% of the time spent restoring messages, for example.Benchmarking showed that replacing the
Pattern
with the correspondingCharMatcher
is 3-4x faster due to how inefficientjava.util.regex
is in general.cleanKey
is called rarely and only from pipeline functions, but it can easily be replaced with aCharMatcher
that is derived from the one used invalidKey
, so for consistency I've adapted it too (and added another test case for multiple replacements./nocl refactoring
How Has This Been Tested?
Unit tests for the corresponding methods.
Types of changes
Checklist: