Skip to content

Add Gitlab::AvatarCache and cache lookups by email [RUN ALL RSPEC] [RUN AS-IF-FOSS]

Robert May requested to merge cached-avatars into master

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:

image

Avatars loaded from cache:

image

Does this MR meet the acceptance criteria?

Conformity

Availability and Testing

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
Edited by 🤖 GitLab Bot 🤖

Merge request reports