Fix interactive delays in database migrations with no TTY (#12969)

Fix #12587
This commit is contained in:
Eugen Rochko 2020-01-27 11:04:42 +01:00 committed by GitHub
parent 10e209d8e0
commit 4363d06986
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 40 additions and 34 deletions

View file

@ -70,6 +70,7 @@ class IdsToBigints < ActiveRecord::Migration[5.1]
included_columns << [:deprecated_preview_cards, :id] if table_exists?(:deprecated_preview_cards) included_columns << [:deprecated_preview_cards, :id] if table_exists?(:deprecated_preview_cards)
# Print out a warning that this will probably take a while. # Print out a warning that this will probably take a while.
if $stdout.isatty
say '' say ''
say 'WARNING: This migration may take a *long* time for large instances' say 'WARNING: This migration may take a *long* time for large instances'
say 'It will *not* lock tables for any significant time, but it may run' say 'It will *not* lock tables for any significant time, but it may run'
@ -85,6 +86,7 @@ class IdsToBigints < ActiveRecord::Migration[5.1]
say "Continuing in #{i} second#{i == 1 ? '' : 's'}...", true say "Continuing in #{i} second#{i == 1 ? '' : 's'}...", true
sleep 1 sleep 1
end end
end
tables = included_columns.map(&:first).uniq tables = included_columns.map(&:first).uniq
table_sizes = {} table_sizes = {}

View file

@ -20,6 +20,7 @@ class FixAccountsUniqueIndex < ActiveRecord::Migration[5.2]
disable_ddl_transaction! disable_ddl_transaction!
def up def up
if $stdout.isatty
say '' say ''
say 'WARNING: This migration may take a *long* time for large instances' say 'WARNING: This migration may take a *long* time for large instances'
say 'It will *not* lock tables for any significant time, but it may run' say 'It will *not* lock tables for any significant time, but it may run'
@ -34,6 +35,7 @@ class FixAccountsUniqueIndex < ActiveRecord::Migration[5.2]
say "Continuing in #{i} second#{i == 1 ? '' : 's'}...", true say "Continuing in #{i} second#{i == 1 ? '' : 's'}...", true
sleep 1 sleep 1
end end
end
duplicates = Account.connection.select_all('SELECT string_agg(id::text, \',\') AS ids FROM accounts GROUP BY lower(username), lower(domain) HAVING count(*) > 1').to_hash duplicates = Account.connection.select_all('SELECT string_agg(id::text, \',\') AS ids FROM accounts GROUP BY lower(username), lower(domain) HAVING count(*) > 1').to_hash

View file

@ -62,6 +62,7 @@ class MigrateAccountConversations < ActiveRecord::Migration[5.2]
end end
def up def up
if $stdout.isatty
say '' say ''
say 'WARNING: This migration may take a *long* time for large instances' say 'WARNING: This migration may take a *long* time for large instances'
say 'It will *not* lock tables for any significant time, but it may run' say 'It will *not* lock tables for any significant time, but it may run'
@ -73,6 +74,7 @@ class MigrateAccountConversations < ActiveRecord::Migration[5.2]
say "Continuing in #{i} second#{i == 1 ? '' : 's'}...", true say "Continuing in #{i} second#{i == 1 ? '' : 's'}...", true
sleep 1 sleep 1
end end
end
migrated = 0 migrated = 0
last_time = Time.zone.now last_time = Time.zone.now