mirror of
https://github.com/wahyd4/gitlabhq.git
synced 2026-08-25 04:26:08 +10:00
Fix MySQL migration, obtain lock the right way
As suggested by @yorrickpeterse in https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/4581#note_12373882 the locking of the MySQL database wasn't correct.
This commit is contained in:
@@ -20,20 +20,21 @@ class ConvertAwardNoteToEmojiAward < ActiveRecord::Migration
|
||||
def migrate_postgresql
|
||||
connection.transaction do
|
||||
execute 'LOCK notes IN EXCLUSIVE'
|
||||
migrate_notes
|
||||
execute "INSERT INTO award_emoji (awardable_type, awardable_id, user_id, name, created_at, updated_at) (SELECT noteable_type, noteable_id, author_id, note, created_at, updated_at FROM notes WHERE is_award = true)"
|
||||
execute "DELETE FROM notes WHERE is_award = true"
|
||||
remove_column :notes, :is_award, :boolean
|
||||
end
|
||||
end
|
||||
|
||||
def migrate_mysql
|
||||
execute 'LOCK TABLES notes WRITE'
|
||||
migrate_notes
|
||||
execute <<-EOF
|
||||
lock tables notes WRITE, award_emoji WRITE;
|
||||
INSERT INTO award_emoji (awardable_type, awardable_id, user_id, name, created_at, updated_at) (SELECT noteable_type, noteable_id, author_id, note, created_at, updated_at FROM notes WHERE is_award = true);
|
||||
EOF
|
||||
|
||||
execute "DELETE FROM notes WHERE is_award = true"
|
||||
remove_column :notes, :is_award, :boolean
|
||||
ensure
|
||||
execute 'UNLOCK TABLES'
|
||||
end
|
||||
|
||||
def migrate_notes
|
||||
execute "INSERT INTO award_emoji (awardable_type, awardable_id, user_id, name, created_at, updated_at) (SELECT noteable_type, noteable_id, author_id, note, created_at, updated_at FROM notes WHERE is_award = true)"
|
||||
execute "DELETE FROM notes WHERE is_award = true"
|
||||
remove_column :notes, :is_award, :boolean
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user