[Security] Make AccessDecisionManager much faster #49670
Closed
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.
When you are using a lot of voters, you need better caching. With inspiration from #43066 by @jderusse I managed to squeeze some more performance from the
AccessDecisionManager
.I do about 7000 calls to
AccessDecisionManager::getVoters()
. It takes me 369ms.With this PR, it takes about 30ms.
The trick is that I don't loop over all Voters all the time. If I seen the object and attribute before then I just returns the voters I previously calculated.
Performance:
When do benchmark on an application with 40 voters I got:
I would love a few more set of eyes on this PR.