Fix interactive delays in database migrations with no TTY (#12969)
Fix #12587
This commit is contained in:
		
							parent
							
								
									10e209d8e0
								
							
						
					
					
						commit
						4363d06986
					
				
					 3 changed files with 40 additions and 34 deletions
				
			
		|  | @ -70,20 +70,22 @@ 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. | ||||||
|     say '' |     if $stdout.isatty | ||||||
|     say 'WARNING: This migration may take a *long* time for large instances' |       say '' | ||||||
|     say 'It will *not* lock tables for any significant time, but it may run' |       say 'WARNING: This migration may take a *long* time for large instances' | ||||||
|     say 'for a very long time. We will pause for 10 seconds to allow you to' |       say 'It will *not* lock tables for any significant time, but it may run' | ||||||
|     say 'interrupt this migration if you are not ready.' |       say 'for a very long time. We will pause for 10 seconds to allow you to' | ||||||
|     say '' |       say 'interrupt this migration if you are not ready.' | ||||||
|     say 'This migration has some sections that can be safely interrupted' |       say '' | ||||||
|     say 'and restarted later, and will tell you when those are occurring.' |       say 'This migration has some sections that can be safely interrupted' | ||||||
|     say '' |       say 'and restarted later, and will tell you when those are occurring.' | ||||||
|     say 'For more information, see https://github.com/tootsuite/mastodon/pull/5088' |       say '' | ||||||
|  |       say 'For more information, see https://github.com/tootsuite/mastodon/pull/5088' | ||||||
| 
 | 
 | ||||||
|     10.downto(1) do |i| |       10.downto(1) do |i| | ||||||
|       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 | ||||||
|  |  | ||||||
|  | @ -20,19 +20,21 @@ class FixAccountsUniqueIndex < ActiveRecord::Migration[5.2] | ||||||
|   disable_ddl_transaction! |   disable_ddl_transaction! | ||||||
| 
 | 
 | ||||||
|   def up |   def up | ||||||
|     say '' |     if $stdout.isatty | ||||||
|     say 'WARNING: This migration may take a *long* time for large instances' |       say '' | ||||||
|     say 'It will *not* lock tables for any significant time, but it may run' |       say 'WARNING: This migration may take a *long* time for large instances' | ||||||
|     say 'for a very long time. We will pause for 10 seconds to allow you to' |       say 'It will *not* lock tables for any significant time, but it may run' | ||||||
|     say 'interrupt this migration if you are not ready.' |       say 'for a very long time. We will pause for 10 seconds to allow you to' | ||||||
|     say '' |       say 'interrupt this migration if you are not ready.' | ||||||
|     say 'This migration will irreversibly delete user accounts with duplicate' |       say '' | ||||||
|     say 'usernames. You may use the `rake mastodon:maintenance:find_duplicate_usernames`' |       say 'This migration will irreversibly delete user accounts with duplicate' | ||||||
|     say 'task to manually deal with such accounts before running this migration.' |       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| |       10.downto(1) do |i| | ||||||
|       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 | ||||||
|  |  | ||||||
|  | @ -62,16 +62,18 @@ class MigrateAccountConversations < ActiveRecord::Migration[5.2] | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|   def up |   def up | ||||||
|     say '' |     if $stdout.isatty | ||||||
|     say 'WARNING: This migration may take a *long* time for large instances' |       say '' | ||||||
|     say 'It will *not* lock tables for any significant time, but it may run' |       say 'WARNING: This migration may take a *long* time for large instances' | ||||||
|     say 'for a very long time. We will pause for 10 seconds to allow you to' |       say 'It will *not* lock tables for any significant time, but it may run' | ||||||
|     say 'interrupt this migration if you are not ready.' |       say 'for a very long time. We will pause for 10 seconds to allow you to' | ||||||
|     say '' |       say 'interrupt this migration if you are not ready.' | ||||||
|  |       say '' | ||||||
| 
 | 
 | ||||||
|     10.downto(1) do |i| |       10.downto(1) do |i| | ||||||
|       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 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue