diff options
author | Sean McGivern <sean@gitlab.com> | 2018-04-19 17:22:23 +0100 |
---|---|---|
committer | Sean McGivern <sean@gitlab.com> | 2018-06-05 14:57:19 +0100 |
commit | 6ecf819f73ae28547e1b816780de0d85c3a653cf (patch) | |
tree | f81c50bb4e8a1984530e130e61871173fc73d4b9 /app/models/personal_snippet.rb | |
parent | e11a1001dcdc1ea5c65845fb0897b861b5c0b92d (diff) | |
download | gitlab-ce-6ecf819f73ae28547e1b816780de0d85c3a653cf.tar.gz |
Fix an N+1 in avatar URLs
This is tricky: the query was being run in
`ObjectStorage::Extension::RecordsUploads#retrieve_from_store!`, but we can't
just add batch loading there, because the `#upload=` method there would use the
result immediately, making the batch only have one item.
Instead, we can pre-emptively add an item to the batch whenever an avatarable
object is initialized, and then reuse that batch item in
`#retrieve_from_store!`. However, this also has problems:
1. There is a lot of logic in `Avatarable#retrieve_upload_from_batch`.
2. Some of that logic constructs a 'fake' model for the batch key. This should
be fine, because of ActiveRecord's override of `#==`, but it relies on that
staying the same.
Diffstat (limited to 'app/models/personal_snippet.rb')
-rw-r--r-- | app/models/personal_snippet.rb | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/app/models/personal_snippet.rb b/app/models/personal_snippet.rb index 82c1c4de3a0..355624fd552 100644 --- a/app/models/personal_snippet.rb +++ b/app/models/personal_snippet.rb @@ -1,2 +1,3 @@ class PersonalSnippet < Snippet + include WithUploads end |