about summary refs log tree commit diff
diff options
context:
space:
mode:
authorEugen Rochko <eugen@zeonfederated.com>2020-01-27 11:04:42 +0100
committerGitHub <noreply@github.com>2020-01-27 11:04:42 +0100
commit4363d06986bb2df1bb15db54df41ddf1d9682afb (patch)
tree0e18654ed8ea11755c4f3236a45254ab63197dca
parent10e209d8e0601ded06e05df573e76935e175cb1c (diff)
Fix interactive delays in database migrations with no TTY (#12969)
Fix #12587
-rw-r--r--db/migrate/20170918125918_ids_to_bigints.rb28
-rw-r--r--db/migrate/20180528141303_fix_accounts_unique_index.rb28
-rw-r--r--db/migrate/20181024224956_migrate_account_conversations.rb22
3 files changed, 42 insertions, 36 deletions
diff --git a/db/migrate/20170918125918_ids_to_bigints.rb b/db/migrate/20170918125918_ids_to_bigints.rb
index 8e19468db..bcb2e9eca 100644
--- a/db/migrate/20170918125918_ids_to_bigints.rb
+++ b/db/migrate/20170918125918_ids_to_bigints.rb
@@ -70,20 +70,22 @@ class IdsToBigints < ActiveRecord::Migration[5.1]
     included_columns << [:deprecated_preview_cards, :id] if table_exists?(:deprecated_preview_cards)
 
     # Print out a warning that this will probably take a while.
-    say ''
-    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 'for a very long time. We will pause for 10 seconds to allow you to'
-    say 'interrupt this migration if you are not ready.'
-    say ''
-    say 'This migration has some sections that can be safely interrupted'
-    say 'and restarted later, and will tell you when those are occurring.'
-    say ''
-    say 'For more information, see https://github.com/tootsuite/mastodon/pull/5088'
+    if $stdout.isatty
+      say ''
+      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 'for a very long time. We will pause for 10 seconds to allow you to'
+      say 'interrupt this migration if you are not ready.'
+      say ''
+      say 'This migration has some sections that can be safely interrupted'
+      say 'and restarted later, and will tell you when those are occurring.'
+      say ''
+      say 'For more information, see https://github.com/tootsuite/mastodon/pull/5088'
 
-    10.downto(1) do |i|
-      say "Continuing in #{i} second#{i == 1 ? '' : 's'}...", true
-      sleep 1
+      10.downto(1) do |i|
+        say "Continuing in #{i} second#{i == 1 ? '' : 's'}...", true
+        sleep 1
+      end
     end
 
     tables = included_columns.map(&:first).uniq
diff --git a/db/migrate/20180528141303_fix_accounts_unique_index.rb b/db/migrate/20180528141303_fix_accounts_unique_index.rb
index bbbf28d81..5d7b3c463 100644
--- a/db/migrate/20180528141303_fix_accounts_unique_index.rb
+++ b/db/migrate/20180528141303_fix_accounts_unique_index.rb
@@ -20,19 +20,21 @@ class FixAccountsUniqueIndex < ActiveRecord::Migration[5.2]
   disable_ddl_transaction!
 
   def up
-    say ''
-    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 'for a very long time. We will pause for 10 seconds to allow you to'
-    say 'interrupt this migration if you are not ready.'
-    say ''
-    say 'This migration will irreversibly delete user accounts with duplicate'
-    say 'usernames. You may use the `rake mastodon:maintenance:find_duplicate_usernames`'
-    say 'task to manually deal with such accounts before running this migration.'
-
-    10.downto(1) do |i|
-      say "Continuing in #{i} second#{i == 1 ? '' : 's'}...", true
-      sleep 1
+    if $stdout.isatty
+      say ''
+      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 'for a very long time. We will pause for 10 seconds to allow you to'
+      say 'interrupt this migration if you are not ready.'
+      say ''
+      say 'This migration will irreversibly delete user accounts with duplicate'
+      say 'usernames. You may use the `rake mastodon:maintenance:find_duplicate_usernames`'
+      say 'task to manually deal with such accounts before running this migration.'
+
+      10.downto(1) do |i|
+        say "Continuing in #{i} second#{i == 1 ? '' : 's'}...", true
+        sleep 1
+      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
diff --git a/db/migrate/20181024224956_migrate_account_conversations.rb b/db/migrate/20181024224956_migrate_account_conversations.rb
index 9f6c94fd1..12e0a70fa 100644
--- a/db/migrate/20181024224956_migrate_account_conversations.rb
+++ b/db/migrate/20181024224956_migrate_account_conversations.rb
@@ -62,16 +62,18 @@ class MigrateAccountConversations < ActiveRecord::Migration[5.2]
   end
 
   def up
-    say ''
-    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 'for a very long time. We will pause for 10 seconds to allow you to'
-    say 'interrupt this migration if you are not ready.'
-    say ''
-
-    10.downto(1) do |i|
-      say "Continuing in #{i} second#{i == 1 ? '' : 's'}...", true
-      sleep 1
+    if $stdout.isatty
+      say ''
+      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 'for a very long time. We will pause for 10 seconds to allow you to'
+      say 'interrupt this migration if you are not ready.'
+      say ''
+
+      10.downto(1) do |i|
+        say "Continuing in #{i} second#{i == 1 ? '' : 's'}...", true
+        sleep 1
+      end
     end
 
     migrated  = 0