From 0047429a97099a43aa0e54ae40c2a9b2d6e7f897 Mon Sep 17 00:00:00 2001 From: Heinrich Lee Yu Date: Fri, 23 Nov 2018 00:21:31 +0800 Subject: Cache project HEAD to prevent unnecessary Gitaly calls --- lib/gitlab/cache/ci/project_pipeline_status.rb | 35 +++++++------------------- 1 file changed, 9 insertions(+), 26 deletions(-) (limited to 'lib') 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 -- cgit v1.2.1