Add Gitlab::AvatarCache and cache lookups by email [RUN ALL RSPEC] [RUN AS-IF-FOSS]
What does this MR do?
I stumbled across an old issue with an N+1 query, and then discovered that we kinda do this anywhere we look up an avatar by email address.
This MR introduces a new, small cache specifically for avatars. This is based on a Redis hash around each email address, as each call to the avatar helper can request varying sizes etc, and we want to easily expire them all when a user updates their avatar.
Right now this has a default expiry of 7 days but theoretically there's no reason why this can't just be a permanent cache
It'll definitely improve #20782 (closed) but will also have a nice little impact in various other places too, removing a lot of queries to the users
table.
Related #20782 (closed)
Screenshots (strongly suggested)
Will fix this rather wonky purple line:
Avatars loaded from cache:
Does this MR meet the acceptance criteria?
Conformity
-
Changelog entry -
Documentation (if required) -
Code review guidelines -
Merge request performance guidelines -
Style guides -
Database guides -
Separation of EE specific content
Availability and Testing
-
Review and add/update tests for this feature/bug. Consider all test levels. See the Test Planning Process. -
Tested in all supported browsers -
Informed Infrastructure department of a default or new setting change, if applicable per definition of done
Security
If this MR contains changes to processing or storing of credentials or tokens, authorization and authentication methods and other items described in the security review guidelines:
-
Label as security and @ mention @gitlab-com/gl-security/appsec
-
The MR includes necessary changes to maintain consistency between UI, API, email, or other methods -
Security reports checked/validated by a reviewer from the AppSec team