summaryrefslogtreecommitdiff
path: root/app/models
diff options
context:
space:
mode:
authorStan Hu <stanhu@gmail.com>2018-01-13 23:18:50 -0800
committerStan Hu <stanhu@gmail.com>2018-01-14 08:11:51 -0800
commit8ddb00adbf73ede641bfa93388e18591c03e6668 (patch)
tree2520430147eb7514e6c373e095763a42fe5079ab /app/models
parent74f2f9b30fb1972a26481072486b358eb943309f (diff)
downloadgitlab-ce-8ddb00adbf73ede641bfa93388e18591c03e6668.tar.gz
Ensure CI pipelines and builds have the correction project associations
This should reduce the number of SQL queries and lookups needed to look up a project of a build and pipeline and vice versa. Before: ``` [1] pry(main)> Ci::Build.reflect_on_association(:project).has_inverse? => false [2] pry(main)> Project.reflect_on_association(:builds).has_inverse? => false [3] pry(main)> Ci::Pipeline.reflect_on_association(:project).has_inverse? => false [4] pry(main)> Project.reflect_on_association(:pipelines).has_inverse? => :project ``` After: ``` [1] pry(main)> Ci::Build.reflect_on_association(:project).has_inverse? => :builds [2] pry(main)> Project.reflect_on_association(:builds).has_inverse? => :project [3] pry(main)> Ci::Pipeline.reflect_on_association(:project).has_inverse? => :pipelines [4] pry(main)> Project.reflect_on_association(:pipelines).has_inverse? => :project ```
Diffstat (limited to 'app/models')
-rw-r--r--app/models/ci/build.rb1
-rw-r--r--app/models/ci/pipeline.rb2
-rw-r--r--app/models/project.rb4
3 files changed, 4 insertions, 3 deletions
diff --git a/app/models/ci/build.rb b/app/models/ci/build.rb
index 6012dbba1b9..df67fb243ad 100644
--- a/app/models/ci/build.rb
+++ b/app/models/ci/build.rb
@@ -8,6 +8,7 @@ module Ci
MissingDependenciesError = Class.new(StandardError)
+ belongs_to :project, inverse_of: :builds
belongs_to :runner
belongs_to :trigger_request
belongs_to :erased_by, class_name: 'User'
diff --git a/app/models/ci/pipeline.rb b/app/models/ci/pipeline.rb
index d4690da3be6..d7153d7b816 100644
--- a/app/models/ci/pipeline.rb
+++ b/app/models/ci/pipeline.rb
@@ -7,7 +7,7 @@ module Ci
include Presentable
include Gitlab::OptimisticLocking
- belongs_to :project
+ belongs_to :project, inverse_of: :pipelines
belongs_to :user
belongs_to :auto_canceled_by, class_name: 'Ci::Pipeline'
belongs_to :pipeline_schedule, class_name: 'Ci::PipelineSchedule'
diff --git a/app/models/project.rb b/app/models/project.rb
index 7ab7df4fdcd..d011b614c69 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -199,13 +199,13 @@ class Project < ActiveRecord::Base
has_many :container_repositories, dependent: :destroy # rubocop:disable Cop/ActiveRecordDependent
has_many :commit_statuses
- has_many :pipelines, class_name: 'Ci::Pipeline'
+ has_many :pipelines, class_name: 'Ci::Pipeline', inverse_of: :project
# Ci::Build objects store data on the file system such as artifact files and
# build traces. Currently there's no efficient way of removing this data in
# bulk that doesn't involve loading the rows into memory. As a result we're
# still using `dependent: :destroy` here.
- has_many :builds, class_name: 'Ci::Build', dependent: :destroy # rubocop:disable Cop/ActiveRecordDependent
+ has_many :builds, class_name: 'Ci::Build', inverse_of: :project, dependent: :destroy # rubocop:disable Cop/ActiveRecordDependent
has_many :build_trace_section_names, class_name: 'Ci::BuildTraceSectionName'
has_many :runner_projects, class_name: 'Ci::RunnerProject'
has_many :runners, through: :runner_projects, source: :runner, class_name: 'Ci::Runner'