1. 04 Apr, 2019 1 commit
    • Sean McGivern's avatar
      Speed up avatar URLs with object storage · ec85deba
      Sean McGivern authored
      With object storage enabled, calling `#filename` on an upload does this:
      
      1. Call the `#filename` method on the CarrierWave object.
      2. Generate the URL for that object.
      3. If the uploader isn't public, do so by generating an authenticated
         URL, including signing that request.
      
      That's all correct behaviour, but for the case where we use `#filename`,
      it's typically to generate a GitLab URL. That URL doesn't need to be
      signed because we do our own auth.
      
      Signing the URLs can be very expensive, especially in batch (say, we
      need to get the avatar URLs for 150 users in one request). It's all
      unnecessary work. If we used the `RecordsUploads` concern, we have
      already recorded a `path` in the database. That `path` is actually
      generated from CarrierWave's `#filename` at upload time, so we don't
      need to recompute it - we can just use it and strip off the prefix if
      it's available.
      
      On a sample users autocomplete URL, at least 10% of the time before this
      change went to signing URLs. After this change, we spend no time in URL
      signing, and still get the correct results.
      ec85deba
  2. 02 Apr, 2019 14 commits
  3. 01 Apr, 2019 25 commits