Class: Gitlab::Ci::Pipeline::Preloader
- Inherits:
-
Object
- Object
- Gitlab::Ci::Pipeline::Preloader
- Defined in:
- lib/gitlab/ci/pipeline/preloader.rb
Overview
Class for preloading data associated with pipelines such as commit authors.
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize(pipeline) ⇒ Preloader
constructor
A new instance of Preloader.
-
#preload_commit_authors ⇒ Object
This also preloads the author of every commit.
-
#preload_persisted_environments ⇒ Object
This batch loads the associated environments of multiple actions (builds) that can’t use ‘preload` due to the indirect relationship.
- #preload_pipeline_warnings ⇒ Object
-
#preload_ref_commits ⇒ Object
This preloads latest commits for given refs and therefore makes it much less expensive to check if a pipeline is a latest one for given branch.
-
#preload_stages_warnings ⇒ Object
This preloads the number of warnings for every stage, ensuring that Ci::Stage#has_warnings? doesn’t execute any additional queries.
Constructor Details
#initialize(pipeline) ⇒ Preloader
Returns a new instance of Preloader.
28 29 30 |
# File 'lib/gitlab/ci/pipeline/preloader.rb', line 28 def initialize(pipeline) @pipeline = pipeline end |
Class Method Details
.preload!(pipelines) ⇒ Object
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
# File 'lib/gitlab/ci/pipeline/preloader.rb', line 9 def self.preload!(pipelines) ## # This preloads all commits at once, because `Ci::Pipeline#commit` is # using a lazy batch loading, what results in only one batched Gitaly # call. # pipelines.each(&:commit) pipelines.each do |pipeline| self.new(pipeline).tap do |preloader| preloader. preloader.preload_ref_commits preloader.preload_pipeline_warnings preloader.preload_stages_warnings preloader.preload_persisted_environments end end end |
Instance Method Details
#preload_commit_authors ⇒ Object
This also preloads the author of every commit. We’re using “lazy_author” here since “author” immediately loads the data on the first call.
34 35 36 |
# File 'lib/gitlab/ci/pipeline/preloader.rb', line 34 def @pipeline.commit.try(:lazy_author) end |
#preload_persisted_environments ⇒ Object
This batch loads the associated environments of multiple actions (builds) that can’t use ‘preload` due to the indirect relationship.
61 62 63 64 |
# File 'lib/gitlab/ci/pipeline/preloader.rb', line 61 def preload_persisted_environments @pipeline.scheduled_actions.each { |action| action.persisted_environment } @pipeline.manual_actions.each { |action| action.persisted_environment } end |
#preload_pipeline_warnings ⇒ Object
45 46 47 48 49 50 |
# File 'lib/gitlab/ci/pipeline/preloader.rb', line 45 def preload_pipeline_warnings # This preloads the number of warnings for every pipeline, ensuring # that Ci::Pipeline#has_warnings? doesn't execute any additional # queries. @pipeline.number_of_warnings end |
#preload_ref_commits ⇒ Object
This preloads latest commits for given refs and therefore makes it much less expensive to check if a pipeline is a latest one for given branch.
41 42 43 |
# File 'lib/gitlab/ci/pipeline/preloader.rb', line 41 def preload_ref_commits @pipeline.lazy_ref_commit end |
#preload_stages_warnings ⇒ Object
This preloads the number of warnings for every stage, ensuring that Ci::Stage#has_warnings? doesn’t execute any additional queries.
55 56 57 |
# File 'lib/gitlab/ci/pipeline/preloader.rb', line 55 def preload_stages_warnings @pipeline.stages.each { |stage| stage.number_of_warnings } end |