diff options
author | Heinrich Lee Yu <heinrich@gitlab.com> | 2018-11-23 00:21:31 +0800 |
---|---|---|
committer | Heinrich Lee Yu <heinrich@gitlab.com> | 2018-11-26 17:41:39 +0800 |
commit | 0047429a97099a43aa0e54ae40c2a9b2d6e7f897 (patch) | |
tree | b44c493b8cbe5c515805c20a7849f638d21ab181 | |
parent | aed88cd40d44ade30f5fe6dc8b572f3ace71f74f (diff) | |
download | gitlab-ce-0047429a97099a43aa0e54ae40c2a9b2d6e7f897.tar.gz |
Cache project HEAD to prevent unnecessary Gitaly calls
-rw-r--r-- | lib/gitlab/cache/ci/project_pipeline_status.rb | 35 |
1 files changed, 9 insertions, 26 deletions
diff --git a/lib/gitlab/cache/ci/project_pipeline_status.rb b/lib/gitlab/cache/ci/project_pipeline_status.rb index 78b0eaac8cd..195531ef94b 100644 --- a/lib/gitlab/cache/ci/project_pipeline_status.rb +++ b/lib/gitlab/cache/ci/project_pipeline_status.rb @@ -9,8 +9,6 @@ module Gitlab class ProjectPipelineStatus attr_accessor :sha, :status, :ref, :project, :loaded - delegate :commit, to: :project - def self.load_for_project(project) new(project).tap do |status| status.load_status @@ -18,33 +16,12 @@ module Gitlab end def self.load_in_batch_for_projects(projects) - cached_results_for_projects(projects).zip(projects).each do |result, project| - project.pipeline_status = new(project, result) + projects.each do |project| + project.pipeline_status = new(project) project.pipeline_status.load_status end end - def self.cached_results_for_projects(projects) - result = Gitlab::Redis::Cache.with do |redis| - redis.multi do - projects.each do |project| - cache_key = cache_key_for_project(project) - redis.exists(cache_key) - redis.hmget(cache_key, :sha, :status, :ref) - end - end - end - - result.each_slice(2).map do |(cache_key_exists, (sha, status, ref))| - pipeline_info = { sha: sha, status: status, ref: ref } - { loaded_from_cache: cache_key_exists, pipeline_info: pipeline_info } - end - end - - def self.cache_key_for_project(project) - "#{Gitlab::Redis::Cache::CACHE_NAMESPACE}:project:#{project.id}:pipeline_status:#{project.commit&.sha}" - end - def self.update_for_pipeline(pipeline) pipeline_info = { sha: pipeline.sha, @@ -132,7 +109,13 @@ module Gitlab end def cache_key - self.class.cache_key_for_project(project) + "#{Gitlab::Redis::Cache::CACHE_NAMESPACE}:project:#{project.id}:pipeline_status:#{commit&.sha}" + end + + def commit + return @commit if defined?(@commit) + + @commit = project.commit end end end |