Skip to content

Add unique index on configuration for batched_background_migrations

Krasimir Angelov requested to merge 292874-unique-batched-migrations into master

What does this MR do?

After some discussion in !62634 (merged) we decided that unique index on batched_background_migrations (job_class_name, table_name, column_name, job_arguments) will be needed. This MR creates this index.

We also remove the existing index_batched_migrations_on_job_table_and_column_name as it is redundnat now, the new index will serve the same purpose.

Database migrations

Up

$ bundle exec rails db:migrate:up VERSION=20210609013512
== 20210609013512 AddUniqueIndexForBatchedBackgroundMigrations: migrating =====
-- transaction_open?()
   -> 0.0000s
-- index_exists?(:batched_background_migrations, [:job_class_name, :table_name, :column_name, :job_arguments], {:unique=>true, :name=>"index_batched_background_migrations_on_unique_configuration", :algorithm=>:concurrently})
   -> 0.0033s
-- execute("SET statement_timeout TO 0")
   -> 0.0007s
-- add_index(:batched_background_migrations, [:job_class_name, :table_name, :column_name, :job_arguments], {:unique=>true, :name=>"index_batched_background_migrations_on_unique_configuration", :algorithm=>:concurrently})
   -> 0.0048s
-- execute("RESET ALL")
   -> 0.0007s
-- transaction_open?()
   -> 0.0000s
-- indexes(:batched_background_migrations)
   -> 0.0017s
-- remove_index(:batched_background_migrations, {:algorithm=>:concurrently, :name=>"index_batched_migrations_on_job_table_and_column_name"})
   -> 0.0045s
== 20210609013512 AddUniqueIndexForBatchedBackgroundMigrations: migrated (0.0179s)

Down

$ bundle exec rails db:migrate:down VERSION=20210609013512
== 20210609013512 AddUniqueIndexForBatchedBackgroundMigrations: reverting =====
-- transaction_open?()
   -> 0.0000s
-- index_exists?(:batched_background_migrations, [:job_class_name, :table_name, :column_name], {:name=>"index_batched_migrations_on_job_table_and_column_name", :algorithm=>:concurrently})
   -> 0.0026s
-- execute("SET statement_timeout TO 0")
   -> 0.0007s
-- add_index(:batched_background_migrations, [:job_class_name, :table_name, :column_name], {:name=>"index_batched_migrations_on_job_table_and_column_name", :algorithm=>:concurrently})
   -> 0.0037s
-- execute("RESET ALL")
   -> 0.0005s
-- transaction_open?()
   -> 0.0000s
-- indexes(:batched_background_migrations)
   -> 0.0014s
-- remove_index(:batched_background_migrations, {:algorithm=>:concurrently, :name=>"index_batched_background_migrations_on_unique_configuration"})
   -> 0.0025s
== 20210609013512 AddUniqueIndexForBatchedBackgroundMigrations: reverted (0.0130s) 

Index creation

From postgres.ai:

exec CREATE UNIQUE INDEX CONCURRENTLY "index_batched_background_migrations_on_unique_configuration" ON "batched_background_migrations" ("job_class_name", "table_name", "column_name", "job_arguments")
Session: webui-i4495

The query has been executed. Duration: 14.012 ms

Redundant index

We can see that the new index is used once it created, so the old one is not needed anymore.

Does this MR meet the acceptance criteria?

Conformity

Availability and Testing

Security

Does this MR contain changes to processing or storing of credentials or tokens, authorization and authentication methods or other items described in the security review guidelines? If not, then delete this Security section.

  • Label as security and @ mention @gitlab-com/gl-security/appsec
  • The MR includes necessary changes to maintain consistency between UI, API, email, or other methods
  • Security reports checked/validated by a reviewer from the AppSec team

Related to #292874 (closed)

Edited by Krasimir Angelov

Merge request reports