5f35ea146a
The concurrency issue originates from inserts on `user_interacted_projects` from the app while running the post-deploy migration. This change comes with a strategy to lock the table while removing duplicates and creating the unique index (and similar for FK constraints). Also, we'll have a non-unique index until the post-deploy migration is finished to speed up queries during that time. Closes #44205.
20 lines
502 B
Ruby
20 lines
502 B
Ruby
class CreateUserInteractedProjectsTable < ActiveRecord::Migration
|
|
include Gitlab::Database::MigrationHelpers
|
|
|
|
DOWNTIME = false
|
|
|
|
INDEX_NAME = 'user_interacted_projects_non_unique_index'
|
|
|
|
def up
|
|
create_table :user_interacted_projects, id: false do |t|
|
|
t.references :user, null: false
|
|
t.references :project, null: false
|
|
end
|
|
|
|
add_index :user_interacted_projects, [:project_id, :user_id], name: INDEX_NAME
|
|
end
|
|
|
|
def down
|
|
drop_table :user_interacted_projects
|
|
end
|
|
end
|