summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKamil Trzcinski <ayufan@ayufan.eu>2017-12-03 13:07:07 +0100
committerShinya Maeda <shinya@gitlab.com>2018-03-07 22:36:17 +0900
commitc43521f7fc0e5d6f332709f9bf1730ce5dfd0bf2 (patch)
treeeb966809226eaebd80d58a0ebac12abca0f87341
parentcda4296e9014755443fc70675cd09886594ae134 (diff)
downloadgitlab-ce-rename-commit-status-to-ci-job.tar.gz
Add column migrationrename-commit-status-to-ci-job
-rw-r--r--app/models/ci/build.rb2
-rw-r--r--app/models/ci/job.rb2
-rw-r--r--app/models/ci/pipeline.rb8
-rw-r--r--app/policies/ci/build_policy.rb2
-rw-r--r--app/policies/ci/job_policy.rb9
-rw-r--r--app/policies/commit_status_policy.rb7
-rw-r--r--app/serializers/pipeline_serializer.rb2
-rw-r--r--db/migrate/20171203114527_rename_commit_status_to_ci_job_type.rb51
-rw-r--r--spec/lib/gitlab/import_export/all_models.yml2
9 files changed, 69 insertions, 16 deletions
diff --git a/app/models/ci/build.rb b/app/models/ci/build.rb
index b230b7f47ef..646157e8087 100644
--- a/app/models/ci/build.rb
+++ b/app/models/ci/build.rb
@@ -1,5 +1,5 @@
module Ci
- class Build < CommitStatus
+ class Build < Job
prepend ArtifactMigratable
include TokenAuthenticatable
include AfterCommitQueue
diff --git a/app/models/ci/job.rb b/app/models/ci/job.rb
index 2d46bff21a9..80c10d3eca3 100644
--- a/app/models/ci/job.rb
+++ b/app/models/ci/job.rb
@@ -48,7 +48,7 @@ class Ci::Job < ActiveRecord::Base
}
##
- # We still create some CommitStatuses outside of CreatePipelineService.
+ # We still create some Ci::Job outside of CreatePipelineService.
#
# These are pages deployments and external statuses.
#
diff --git a/app/models/ci/pipeline.rb b/app/models/ci/pipeline.rb
index f1ff84826c0..bc863fdfe17 100644
--- a/app/models/ci/pipeline.rb
+++ b/app/models/ci/pipeline.rb
@@ -24,12 +24,12 @@ module Ci
has_many :pending_builds, -> { pending }, foreign_key: :commit_id, class_name: 'Ci::Build'
has_many :retryable_builds, -> { latest.failed_or_canceled.includes(:project) }, foreign_key: :commit_id, class_name: 'Ci::Build'
- has_many :cancelable_statuses, -> { cancelable }, foreign_key: :commit_id, class_name: 'CommitStatus'
+ has_many :cancelable_jobs, -> { cancelable }, foreign_key: :commit_id, class_name: 'Ci::Job'
has_many :manual_actions, -> { latest.manual_actions.includes(:project) }, foreign_key: :commit_id, class_name: 'Ci::Build'
has_many :artifacts, -> { latest.with_artifacts_not_expired.includes(:project) }, foreign_key: :commit_id, class_name: 'Ci::Build'
has_many :auto_canceled_pipelines, class_name: 'Ci::Pipeline', foreign_key: 'auto_canceled_by_id'
- has_many :auto_canceled_jobs, class_name: 'CommitStatus', foreign_key: 'auto_canceled_by_id'
+ has_many :auto_canceled_jobs, class_name: 'Ci::Job', foreign_key: 'auto_canceled_by_id'
delegate :id, to: :project, prefix: true
delegate :full_path, to: :project, prefix: true
@@ -308,7 +308,7 @@ module Ci
end
def cancelable?
- cancelable_statuses.any?
+ cancelable_jobs.any?
end
def auto_canceled?
@@ -316,7 +316,7 @@ module Ci
end
def cancel_running
- retry_optimistic_lock(cancelable_statuses) do |cancelable|
+ retry_optimistic_lock(cancelable_jobs) do |cancelable|
cancelable.find_each do |job|
yield(job) if block_given?
job.cancel
diff --git a/app/policies/ci/build_policy.rb b/app/policies/ci/build_policy.rb
index 1ab391a5a9d..82d19b68e1b 100644
--- a/app/policies/ci/build_policy.rb
+++ b/app/policies/ci/build_policy.rb
@@ -1,5 +1,5 @@
module Ci
- class BuildPolicy < CommitStatusPolicy
+ class BuildPolicy < JobPolicy
condition(:protected_ref) do
access = ::Gitlab::UserAccess.new(@user, project: @subject.project)
diff --git a/app/policies/ci/job_policy.rb b/app/policies/ci/job_policy.rb
new file mode 100644
index 00000000000..e11c9b1567c
--- /dev/null
+++ b/app/policies/ci/job_policy.rb
@@ -0,0 +1,9 @@
+module Ci
+ class JobPolicy < BasePolicy
+ delegate { @subject.project }
+
+ %w[read create update admin].each do |action|
+ rule { ~can?(:"#{action}_commit_status") }.prevent :"#{action}_build"
+ end
+ end
+end
diff --git a/app/policies/commit_status_policy.rb b/app/policies/commit_status_policy.rb
deleted file mode 100644
index 24b2a4cc7fd..00000000000
--- a/app/policies/commit_status_policy.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-class CommitStatusPolicy < BasePolicy
- delegate { @subject.project }
-
- %w[read create update admin].each do |action|
- rule { ~can?(:"#{action}_commit_status") }.prevent :"#{action}_build"
- end
-end
diff --git a/app/serializers/pipeline_serializer.rb b/app/serializers/pipeline_serializer.rb
index 7181f8a6b04..8674ad686a5 100644
--- a/app/serializers/pipeline_serializer.rb
+++ b/app/serializers/pipeline_serializer.rb
@@ -10,7 +10,7 @@ class PipelineSerializer < BaseSerializer
resource = resource.preload([
:retryable_builds,
- :cancelable_statuses,
+ :cancelable_jobs,
:trigger_requests,
:project,
:manual_actions,
diff --git a/db/migrate/20171203114527_rename_commit_status_to_ci_job_type.rb b/db/migrate/20171203114527_rename_commit_status_to_ci_job_type.rb
new file mode 100644
index 00000000000..b87742d97d5
--- /dev/null
+++ b/db/migrate/20171203114527_rename_commit_status_to_ci_job_type.rb
@@ -0,0 +1,51 @@
+class RenameCommitStatusToCiJobType < ActiveRecord::Migration
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ disable_ddl_transaction!
+
+ def up
+ migrate_column_value(:deployments, :deployable_type, 'CommitStatus', 'Ci::Job')
+ migrate_column_value(:taggings, :taggable_type, 'CommitStatus', 'Ci::Job')
+ migrate_column_value(:ci_builds, :type, 'CommitStatus', 'Ci::Job')
+ end
+
+ def down
+ migrate_column_value(:deployments, :deployable_type, 'Ci::Job', 'CommitStatus')
+ migrate_column_value(:taggings, :taggable_type, 'Ci::Job', 'CommitStatus')
+ migrate_column_value(:ci_builds, :type, 'Ci::Job', 'CommitStatus')
+ end
+
+ private
+
+ def migrate_column_value(table, column, from, to)
+ from = from.demodulize.underscore
+ to = to.demodulize.underscore
+
+ create_partial_index(table, column, from)
+
+ begin
+ update_column_in_batches(table, column, to) do |table, query|
+ query.where(table[column].eq(from))
+ end
+ ensure
+ drop_partial_index(table, column, from)
+ end
+ end
+
+ def index_name(table, column, value)
+ "index_on_#{table}_#{column}_when_#{value}"
+ end
+
+ def create_partial_index(table, column, value)
+ name = index_name(table, column, value)
+ return if index_exists?(table, column, name: name)
+
+ execute("CREATE INDEX CONCURRENTLY #{name} ON #{table} (#{column}) WHERE #{column}='#{value}'")
+ end
+
+ def drop_partial_index(table, column, value)
+ execute("DROP INDEX CONCURRENTLY #{index_name(table, column, value)}")
+ end
+end
diff --git a/spec/lib/gitlab/import_export/all_models.yml b/spec/lib/gitlab/import_export/all_models.yml
index 9ff060e6979..f6c96ca4473 100644
--- a/spec/lib/gitlab/import_export/all_models.yml
+++ b/spec/lib/gitlab/import_export/all_models.yml
@@ -110,7 +110,7 @@ pipelines:
- auto_canceled_jobs
- pending_builds
- retryable_builds
-- cancelable_statuses
+- cancelable_jobs
- manual_actions
- artifacts
- pipeline_schedule