Skip to content
Snippets Groups Projects
Select Git revision
  • master default protected
  • 12-9-stable
  • 12-7-stable
  • 12-6-stable
  • 12-8-stable
  • github/fork/Kloppi313/patch-1
  • 12-5-stable
  • 12-4-stable
  • github/fork/ramalokesh8477/master
  • 12-1-stable
  • 12-2-stable
  • 12-0-stable
  • 12-3-stable
  • 42-42-stable
  • github/fork/hussamgit398/patch-2
  • 12-3-auto-deploy-20190911
  • 12-3-auto-deploy-20190916
  • 12-3-auto-deploy-20190908
  • 12-3-auto-deploy-20190901
  • 12-3-auto-deploy-20190901-32664
  • v12.10.0.pre
  • v12.9.0
  • v12.9.0-rc42
  • v12.8.7
  • v12.8.6
  • v12.8.5
  • v12.8.4
  • v12.8.3
  • v12.6.8
  • v12.7.7
  • v12.8.2
  • v12.8.1
  • v12.9.0.pre
  • v12.8.0
  • v12.8.0-rc42
  • v12.5.10
  • v12.7.6
  • v12.6.7
  • v12.7.5
  • v12.5.9
40 results

with_uploads.rb

  • Sean McGivern's avatar
    6ecf819f
    Fix an N+1 in avatar URLs · 6ecf819f
    Sean McGivern authored
    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.
    6ecf819f
    History
    Fix an N+1 in avatar URLs
    Sean McGivern authored
    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.