Cache project HEAD to prevent unnecessary Gitaly calls
This commit is contained in:
parent
aed88cd40d
commit
0047429a97
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue