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,6 +70,7 @@ 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. | ||||
|     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' | ||||
|  | @ -85,6 +86,7 @@ class IdsToBigints < ActiveRecord::Migration[5.1] | |||
|         say "Continuing in #{i} second#{i == 1 ? '' : 's'}...", true | ||||
|         sleep 1 | ||||
|       end | ||||
|     end | ||||
| 
 | ||||
|     tables = included_columns.map(&:first).uniq | ||||
|     table_sizes = {} | ||||
|  |  | |||
|  | @ -20,6 +20,7 @@ class FixAccountsUniqueIndex < ActiveRecord::Migration[5.2] | |||
|   disable_ddl_transaction! | ||||
| 
 | ||||
|   def up | ||||
|     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' | ||||
|  | @ -34,6 +35,7 @@ class FixAccountsUniqueIndex < ActiveRecord::Migration[5.2] | |||
|         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 | ||||
| 
 | ||||
|  |  | |||
|  | @ -62,6 +62,7 @@ class MigrateAccountConversations < ActiveRecord::Migration[5.2] | |||
|   end | ||||
| 
 | ||||
|   def up | ||||
|     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' | ||||
|  | @ -73,6 +74,7 @@ class MigrateAccountConversations < ActiveRecord::Migration[5.2] | |||
|         say "Continuing in #{i} second#{i == 1 ? '' : 's'}...", true | ||||
|         sleep 1 | ||||
|       end | ||||
|     end | ||||
| 
 | ||||
|     migrated  = 0 | ||||
|     last_time = Time.zone.now | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue