From 30c35b2528fb4d12cc6ec0a615776ad401e91d22 Mon Sep 17 00:00:00 2001 From: Maxime Orefice <morefice@gitlab.com> Date: Mon, 4 Dec 2023 10:12:08 +0100 Subject: [PATCH] Add unique indexes to ci_job_artifacts This commit adds 2 new indexes to prepare ci_job_artifacts to be partitioned. Changelog: added --- ...e_index_id_partition_id_to_ci_job_artifact.rb | 16 ++++++++++++++++ ...filte_type_partition_id_to_ci_job_artifact.rb | 16 ++++++++++++++++ db/schema_migrations/20231204090310 | 1 + db/schema_migrations/20231204090413 | 1 + db/structure.sql | 4 ++++ 5 files changed, 38 insertions(+) create mode 100644 db/post_migrate/20231204090310_add_unique_index_id_partition_id_to_ci_job_artifact.rb create mode 100644 db/post_migrate/20231204090413_add_unique_index_job_id_filte_type_partition_id_to_ci_job_artifact.rb create mode 100644 db/schema_migrations/20231204090310 create mode 100644 db/schema_migrations/20231204090413 diff --git a/db/post_migrate/20231204090310_add_unique_index_id_partition_id_to_ci_job_artifact.rb b/db/post_migrate/20231204090310_add_unique_index_id_partition_id_to_ci_job_artifact.rb new file mode 100644 index 0000000000000..9d6aef6987757 --- /dev/null +++ b/db/post_migrate/20231204090310_add_unique_index_id_partition_id_to_ci_job_artifact.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +class AddUniqueIndexIdPartitionIdToCiJobArtifact < Gitlab::Database::Migration[2.2] + milestone '16.7' + disable_ddl_transaction! + TABLE_NAME = :ci_job_artifacts + INDEX_NAME = :index_ci_job_artifacts_on_id_partition_id_unique + + def up + add_concurrent_index(TABLE_NAME, %i[id partition_id], unique: true, name: INDEX_NAME) + end + + def down + remove_concurrent_index_by_name(TABLE_NAME, INDEX_NAME) + end +end diff --git a/db/post_migrate/20231204090413_add_unique_index_job_id_filte_type_partition_id_to_ci_job_artifact.rb b/db/post_migrate/20231204090413_add_unique_index_job_id_filte_type_partition_id_to_ci_job_artifact.rb new file mode 100644 index 0000000000000..ad02456b1b9de --- /dev/null +++ b/db/post_migrate/20231204090413_add_unique_index_job_id_filte_type_partition_id_to_ci_job_artifact.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +class AddUniqueIndexJobIdFilteTypePartitionIdToCiJobArtifact < Gitlab::Database::Migration[2.2] + milestone '16.7' + disable_ddl_transaction! + TABLE_NAME = :ci_job_artifacts + INDEX_NAME = :idx_ci_job_artifacts_on_job_id_file_type_and_partition_id_uniq + + def up + add_concurrent_index(TABLE_NAME, %i[job_id file_type partition_id], unique: true, name: INDEX_NAME) + end + + def down + remove_concurrent_index_by_name(TABLE_NAME, INDEX_NAME) + end +end diff --git a/db/schema_migrations/20231204090310 b/db/schema_migrations/20231204090310 new file mode 100644 index 0000000000000..665a35d90e12d --- /dev/null +++ b/db/schema_migrations/20231204090310 @@ -0,0 +1 @@ +eae9f28293f6d4de373d6f78c8c1995369ceb91cc922aa63b590c37a289523a1 \ No newline at end of file diff --git a/db/schema_migrations/20231204090413 b/db/schema_migrations/20231204090413 new file mode 100644 index 0000000000000..6f9dd659329d0 --- /dev/null +++ b/db/schema_migrations/20231204090413 @@ -0,0 +1 @@ +97d2e9828fd963ca329ba63970ee3c52e733555aa2a42bf444a0bc9243b1b7a1 \ No newline at end of file diff --git a/db/structure.sql b/db/structure.sql index 270c6508743cc..8954f7213918e 100644 --- a/db/structure.sql +++ b/db/structure.sql @@ -31408,6 +31408,8 @@ CREATE INDEX idx_award_emoji_on_user_emoji_name_awardable_type_awardable_id ON a CREATE INDEX idx_build_artifacts_size_refreshes_state_updated_at ON project_build_artifacts_size_refreshes USING btree (state, updated_at); +CREATE UNIQUE INDEX idx_ci_job_artifacts_on_job_id_file_type_and_partition_id_uniq ON ci_job_artifacts USING btree (job_id, file_type, partition_id); + CREATE INDEX idx_ci_pipelines_artifacts_locked ON ci_pipelines USING btree (ci_ref_id, id) WHERE (locked = 1); CREATE INDEX idx_compliance_security_policies_on_policy_configuration_id ON compliance_framework_security_policies USING btree (policy_configuration_id); @@ -32118,6 +32120,8 @@ CREATE INDEX index_ci_job_artifacts_on_file_store ON ci_job_artifacts USING btre CREATE INDEX index_ci_job_artifacts_on_file_type_for_devops_adoption ON ci_job_artifacts USING btree (file_type, project_id, created_at) WHERE (file_type = ANY (ARRAY[5, 6, 8, 23])); +CREATE UNIQUE INDEX index_ci_job_artifacts_on_id_partition_id_unique ON ci_job_artifacts USING btree (id, partition_id); + CREATE INDEX index_ci_job_artifacts_on_id_project_id_and_created_at ON ci_job_artifacts USING btree (project_id, created_at, id); CREATE INDEX index_ci_job_artifacts_on_id_project_id_and_file_type ON ci_job_artifacts USING btree (project_id, file_type, id); -- GitLab