diff options
author | Kamil Trzciński <ayufan@ayufan.eu> | 2019-08-14 16:35:27 +0300 |
---|---|---|
committer | Kamil Trzciński <ayufan@ayufan.eu> | 2019-08-14 16:35:27 +0300 |
commit | d03bb35528c773684d59abdc3cb48f33ba3414c0 (patch) | |
tree | 70a184a30585125cc5166232ece292b204645076 | |
parent | 24f93807ccca38597db37e8e60216f97e46cc5e0 (diff) |
Make `Ci::Group` to be efficient
-rw-r--r-- | app/models/ci/group.rb | 7 | ||||
-rw-r--r-- | app/models/concerns/has_status.rb | 2 | ||||
-rw-r--r-- | app/services/ci/process_pipeline_service.rb | 2 | ||||
-rw-r--r-- | lib/gitlab/ci/status/grouped_statuses.rb | 9 |
4 files changed, 15 insertions, 5 deletions
diff --git a/app/models/ci/group.rb b/app/models/ci/group.rb index 9b2c3c807ac..ef7f1e8ba5a 100644 --- a/app/models/ci/group.rb +++ b/app/models/ci/group.rb @@ -9,6 +9,7 @@ module Ci # class Group include StaticModel + include Gitlab::Utils::StrongMemoize attr_reader :stage, :name, :jobs @@ -21,7 +22,11 @@ module Ci end def status - @status ||= commit_statuses.status + strong_memoize(:status) do + Gitlab::Ci::Status::GroupedStatuses + .new(@jobs) + .one[:status] + end end def detailed_status(current_user) diff --git a/app/models/concerns/has_status.rb b/app/models/concerns/has_status.rb index bc6aed53343..60a6afbee79 100644 --- a/app/models/concerns/has_status.rb +++ b/app/models/concerns/has_status.rb @@ -21,7 +21,7 @@ module HasStatus def status Gitlab::Ci::Status::GroupedStatuses .new(all) - .one&.dig(:status) + .one[:status] end def started_at diff --git a/app/services/ci/process_pipeline_service.rb b/app/services/ci/process_pipeline_service.rb index bc40b698ba6..f7db9ec6a55 100644 --- a/app/services/ci/process_pipeline_service.rb +++ b/app/services/ci/process_pipeline_service.rb @@ -2,6 +2,8 @@ module Ci class ProcessPipelineService < BaseService + include Gitlab::Utils::StrongMemoize + attr_reader :pipeline def execute(pipeline, trigger_build_ids = nil) diff --git a/lib/gitlab/ci/status/grouped_statuses.rb b/lib/gitlab/ci/status/grouped_statuses.rb index 4b5f2e13160..af1c2d53f9e 100644 --- a/lib/gitlab/ci/status/grouped_statuses.rb +++ b/lib/gitlab/ci/status/grouped_statuses.rb @@ -12,8 +12,11 @@ module Gitlab def one(**query) validate_keys!(query.keys) - item_hash = find_one(data_hash, query) - status_for_key(query, item_hash) if item_hash + if item_hash = find_one(data_hash, query) + status_for_key(query, item_hash) + else + {} + end end def group(*keys) @@ -42,7 +45,7 @@ module Gitlab # we request allow_failure when # we don't have column_names, or such column does exist columns << :allow_failure if !subject.respond_to?(:column_names) || subject.column_names.include?('allow_failure') - + subject .pluck(*columns) .map { |attrs| columns.zip(attrs).to_h } |