1. 31 May, 2018 1 commit
    • Stan Hu's avatar
      Eliminate cached N+1 queries for projects in Issue API · ef253a1e
      Stan Hu authored
      In CE, every `Issue` entity is also a `ProjectEntity`, which calls
      `entity&.project.try(:id)` to show the project ID. In an API
      request with 100 issues, this would hit the Rails statement cache 100 times
      for the same project and cause unnecessary overhead as related models would
      also be loaded.
      
      In EE, we call `Issue#supports_weight?` for each issue, which then calls
      `project&.feature_available?(:issue_weights)`. If the project is not
      preloaded, this incurs additional overhead, as each individual Project
      object has to be queried. This can lead to a significant performance hit.
      In loading the CE project with 100 issues, this contributed to at least 22%
      of the load time.
      
      See https://gitlab.com/gitlab-org/gitlab-ce/issues/47031 for why testing this
      is a bit tricky.
      ef253a1e
  2. 30 May, 2018 39 commits