From 61a964376ff1f553fb19b55fe6c21b4cf9745f92 Mon Sep 17 00:00:00 2001 From: Furkan Ayhan Date: Tue, 21 Nov 2023 11:04:50 +0100 Subject: [PATCH 1/5] Add auto_cancel_on_new_commit to ci_pipeline_metadata and remove a const This is the first step of supporting workflow:auto_cancel:on_new_commit. In this change, we are adding a new column auto_cancel_on_new_commit to the ci_pipeline_metadata table. Also, we are removing the NOT NULL constraint of the name column because now a ci_pipeline_metadata row can be created without a name. Changelog: added --- app/models/ci/pipeline_metadata.rb | 8 +++++++- ...ipeline_metadata_name_not_null_constraint.rb | 17 +++++++++++++++++ ...cel_on_new_commit_to_ci_pipeline_metadata.rb | 9 +++++++++ db/schema_migrations/20231121092109 | 1 + db/schema_migrations/20231121092128 | 1 + db/structure.sql | 2 +- spec/models/ci/pipeline_metadata_spec.rb | 10 +++++++++- 7 files changed, 45 insertions(+), 3 deletions(-) create mode 100644 db/migrate/20231121092109_remove_ci_pipeline_metadata_name_not_null_constraint.rb create mode 100644 db/migrate/20231121092128_add_auto_cancel_on_new_commit_to_ci_pipeline_metadata.rb create mode 100644 db/schema_migrations/20231121092109 create mode 100644 db/schema_migrations/20231121092128 diff --git a/app/models/ci/pipeline_metadata.rb b/app/models/ci/pipeline_metadata.rb index 2bd206c5ca5d87..26aeb91cfb5627 100644 --- a/app/models/ci/pipeline_metadata.rb +++ b/app/models/ci/pipeline_metadata.rb @@ -4,11 +4,17 @@ module Ci class PipelineMetadata < Ci::ApplicationRecord self.primary_key = :pipeline_id + enum auto_cancel_on_new_commit: { + interruptible: nil, + conservative: 0, + none: 1 + }, _prefix: true + belongs_to :pipeline, class_name: "Ci::Pipeline", inverse_of: :pipeline_metadata belongs_to :project, class_name: "Project", inverse_of: :pipeline_metadata validates :pipeline, presence: true validates :project, presence: true - validates :name, presence: true, length: { minimum: 1, maximum: 255 } + validates :name, length: { minimum: 1, maximum: 255 }, allow_nil: true end end diff --git a/db/migrate/20231121092109_remove_ci_pipeline_metadata_name_not_null_constraint.rb b/db/migrate/20231121092109_remove_ci_pipeline_metadata_name_not_null_constraint.rb new file mode 100644 index 00000000000000..2ae83918d464da --- /dev/null +++ b/db/migrate/20231121092109_remove_ci_pipeline_metadata_name_not_null_constraint.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +class RemoveCiPipelineMetadataNameNotNullConstraint < Gitlab::Database::Migration[2.2] + milestone '16.7' + + disable_ddl_transaction! + + CONSTRAINT_NAME = 'check_25d23931f1' + + def up + remove_not_null_constraint :ci_pipeline_metadata, :name, constraint_name: CONSTRAINT_NAME + end + + def down + add_not_null_constraint :ci_pipeline_metadata, :name, validate: false, constraint_name: CONSTRAINT_NAME + end +end diff --git a/db/migrate/20231121092128_add_auto_cancel_on_new_commit_to_ci_pipeline_metadata.rb b/db/migrate/20231121092128_add_auto_cancel_on_new_commit_to_ci_pipeline_metadata.rb new file mode 100644 index 00000000000000..38f08e7c00c0e7 --- /dev/null +++ b/db/migrate/20231121092128_add_auto_cancel_on_new_commit_to_ci_pipeline_metadata.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +class AddAutoCancelOnNewCommitToCiPipelineMetadata < Gitlab::Database::Migration[2.2] + milestone '16.7' + + def change + add_column :ci_pipeline_metadata, :auto_cancel_on_new_commit, :smallint + end +end diff --git a/db/schema_migrations/20231121092109 b/db/schema_migrations/20231121092109 new file mode 100644 index 00000000000000..94d937167f7c66 --- /dev/null +++ b/db/schema_migrations/20231121092109 @@ -0,0 +1 @@ +22f8ce9668370446060d834b4a1fc8fe45fb5497a8bd9fc0fa7a0dc674416d2d \ No newline at end of file diff --git a/db/schema_migrations/20231121092128 b/db/schema_migrations/20231121092128 new file mode 100644 index 00000000000000..aabcab23245685 --- /dev/null +++ b/db/schema_migrations/20231121092128 @@ -0,0 +1 @@ +cb2ecf9b5e917a422f2372edf088ee0568cd1ecfd5d39288b5c641cf1594ad11 \ No newline at end of file diff --git a/db/structure.sql b/db/structure.sql index f2ec5f79486004..55f27f57062ffc 100644 --- a/db/structure.sql +++ b/db/structure.sql @@ -14217,7 +14217,7 @@ CREATE TABLE ci_pipeline_metadata ( project_id bigint NOT NULL, pipeline_id bigint NOT NULL, name text, - CONSTRAINT check_25d23931f1 CHECK ((name IS NOT NULL)), + auto_cancel_on_new_commit smallint, CONSTRAINT check_9d3665463c CHECK ((char_length(name) <= 255)) ); diff --git a/spec/models/ci/pipeline_metadata_spec.rb b/spec/models/ci/pipeline_metadata_spec.rb index 977c90bcc2a43f..7fa1c111cec47e 100644 --- a/spec/models/ci/pipeline_metadata_spec.rb +++ b/spec/models/ci/pipeline_metadata_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe Ci::PipelineMetadata do +RSpec.describe Ci::PipelineMetadata, feature_category: :pipeline_composition do it { is_expected.to belong_to(:project) } it { is_expected.to belong_to(:pipeline) } @@ -10,5 +10,13 @@ it { is_expected.to validate_length_of(:name).is_at_least(1).is_at_most(255) } it { is_expected.to validate_presence_of(:project) } it { is_expected.to validate_presence_of(:pipeline) } + + it do + is_expected.to define_enum_for( + :auto_cancel_on_new_commit + ).with_values( + interruptible: nil, conservative: 0, none: 1 + ).with_prefix + end end end -- GitLab From 02e3a3b8294d368a03ab82419375f9abb8234a98 Mon Sep 17 00:00:00 2001 From: Furkan Ayhan Date: Thu, 23 Nov 2023 11:23:26 +0100 Subject: [PATCH 2/5] Change how we store auto_cancel_on_new_commit --- app/models/ci/pipeline_metadata.rb | 4 ++-- ...8_add_auto_cancel_on_new_commit_to_ci_pipeline_metadata.rb | 2 +- db/structure.sql | 2 +- spec/models/ci/pipeline_metadata_spec.rb | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/models/ci/pipeline_metadata.rb b/app/models/ci/pipeline_metadata.rb index 26aeb91cfb5627..ebbf5b0e392f2b 100644 --- a/app/models/ci/pipeline_metadata.rb +++ b/app/models/ci/pipeline_metadata.rb @@ -5,9 +5,9 @@ class PipelineMetadata < Ci::ApplicationRecord self.primary_key = :pipeline_id enum auto_cancel_on_new_commit: { - interruptible: nil, conservative: 0, - none: 1 + interruptible: 1, + none: 2 }, _prefix: true belongs_to :pipeline, class_name: "Ci::Pipeline", inverse_of: :pipeline_metadata diff --git a/db/migrate/20231121092128_add_auto_cancel_on_new_commit_to_ci_pipeline_metadata.rb b/db/migrate/20231121092128_add_auto_cancel_on_new_commit_to_ci_pipeline_metadata.rb index 38f08e7c00c0e7..d0fb62bca2b773 100644 --- a/db/migrate/20231121092128_add_auto_cancel_on_new_commit_to_ci_pipeline_metadata.rb +++ b/db/migrate/20231121092128_add_auto_cancel_on_new_commit_to_ci_pipeline_metadata.rb @@ -4,6 +4,6 @@ class AddAutoCancelOnNewCommitToCiPipelineMetadata < Gitlab::Database::Migration milestone '16.7' def change - add_column :ci_pipeline_metadata, :auto_cancel_on_new_commit, :smallint + add_column :ci_pipeline_metadata, :auto_cancel_on_new_commit, :smallint, default: 0, null: false end end diff --git a/db/structure.sql b/db/structure.sql index 55f27f57062ffc..5ae28d6aae9f17 100644 --- a/db/structure.sql +++ b/db/structure.sql @@ -14217,7 +14217,7 @@ CREATE TABLE ci_pipeline_metadata ( project_id bigint NOT NULL, pipeline_id bigint NOT NULL, name text, - auto_cancel_on_new_commit smallint, + auto_cancel_on_new_commit smallint DEFAULT 0 NOT NULL, CONSTRAINT check_9d3665463c CHECK ((char_length(name) <= 255)) ); diff --git a/spec/models/ci/pipeline_metadata_spec.rb b/spec/models/ci/pipeline_metadata_spec.rb index 7fa1c111cec47e..0e95f20ab31005 100644 --- a/spec/models/ci/pipeline_metadata_spec.rb +++ b/spec/models/ci/pipeline_metadata_spec.rb @@ -15,7 +15,7 @@ is_expected.to define_enum_for( :auto_cancel_on_new_commit ).with_values( - interruptible: nil, conservative: 0, none: 1 + conservative: 0, interruptible: 1, none: 2 ).with_prefix end end -- GitLab From 356ce40502ac06a4add30681d4bff86aefbb3814 Mon Sep 17 00:00:00 2001 From: Furkan Ayhan Date: Thu, 23 Nov 2023 16:18:41 +0100 Subject: [PATCH 3/5] Convert from none to disabled --- app/models/ci/pipeline_metadata.rb | 2 +- spec/models/ci/pipeline_metadata_spec.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/models/ci/pipeline_metadata.rb b/app/models/ci/pipeline_metadata.rb index ebbf5b0e392f2b..5457fb899b0808 100644 --- a/app/models/ci/pipeline_metadata.rb +++ b/app/models/ci/pipeline_metadata.rb @@ -7,7 +7,7 @@ class PipelineMetadata < Ci::ApplicationRecord enum auto_cancel_on_new_commit: { conservative: 0, interruptible: 1, - none: 2 + disabled: 2 }, _prefix: true belongs_to :pipeline, class_name: "Ci::Pipeline", inverse_of: :pipeline_metadata diff --git a/spec/models/ci/pipeline_metadata_spec.rb b/spec/models/ci/pipeline_metadata_spec.rb index 0e95f20ab31005..2db7a2c23e91f2 100644 --- a/spec/models/ci/pipeline_metadata_spec.rb +++ b/spec/models/ci/pipeline_metadata_spec.rb @@ -15,7 +15,7 @@ is_expected.to define_enum_for( :auto_cancel_on_new_commit ).with_values( - conservative: 0, interruptible: 1, none: 2 + conservative: 0, interruptible: 1, disabled: 2 ).with_prefix end end -- GitLab From 5a0d3951eaa823928e61bf1951f6714da70932d7 Mon Sep 17 00:00:00 2001 From: Furkan Ayhan Date: Tue, 28 Nov 2023 13:24:00 +0100 Subject: [PATCH 4/5] Add enable_lock_retries to the migration --- ...2128_add_auto_cancel_on_new_commit_to_ci_pipeline_metadata.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/db/migrate/20231121092128_add_auto_cancel_on_new_commit_to_ci_pipeline_metadata.rb b/db/migrate/20231121092128_add_auto_cancel_on_new_commit_to_ci_pipeline_metadata.rb index d0fb62bca2b773..9b698c83553594 100644 --- a/db/migrate/20231121092128_add_auto_cancel_on_new_commit_to_ci_pipeline_metadata.rb +++ b/db/migrate/20231121092128_add_auto_cancel_on_new_commit_to_ci_pipeline_metadata.rb @@ -1,6 +1,7 @@ # frozen_string_literal: true class AddAutoCancelOnNewCommitToCiPipelineMetadata < Gitlab::Database::Migration[2.2] + enable_lock_retries! milestone '16.7' def change -- GitLab From f211cc3ff37e3560fb18a93565f794c98a1fc2fd Mon Sep 17 00:00:00 2001 From: Furkan Ayhan Date: Tue, 28 Nov 2023 15:43:15 +0100 Subject: [PATCH 5/5] Remove validate from down --- ...2109_remove_ci_pipeline_metadata_name_not_null_constraint.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/db/migrate/20231121092109_remove_ci_pipeline_metadata_name_not_null_constraint.rb b/db/migrate/20231121092109_remove_ci_pipeline_metadata_name_not_null_constraint.rb index 2ae83918d464da..de1d4c1bcc9a35 100644 --- a/db/migrate/20231121092109_remove_ci_pipeline_metadata_name_not_null_constraint.rb +++ b/db/migrate/20231121092109_remove_ci_pipeline_metadata_name_not_null_constraint.rb @@ -12,6 +12,6 @@ def up end def down - add_not_null_constraint :ci_pipeline_metadata, :name, validate: false, constraint_name: CONSTRAINT_NAME + add_not_null_constraint :ci_pipeline_metadata, :name, constraint_name: CONSTRAINT_NAME end end -- GitLab