Remove progress estimate from MigrateAccountConversations (#9168)

This commit is contained in:
Eugen Rochko 2018-10-30 21:09:33 +01:00 committed by GitHub
parent 7800e1af7e
commit f2290e311b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -14,17 +14,15 @@ class MigrateAccountConversations < ActiveRecord::Migration[5.2]
sleep 1 sleep 1
end end
total = estimate_rows(local_direct_statuses) + estimate_rows(notifications_about_direct_statuses) migrated = 0
migrated = 0 last_time = Time.zone.now
started_time = Time.zone.now
last_time = Time.zone.now
local_direct_statuses.includes(:account, mentions: :account).find_each do |status| local_direct_statuses.includes(:account, mentions: :account).find_each do |status|
AccountConversation.add_status(status.account, status) AccountConversation.add_status(status.account, status)
migrated += 1 migrated += 1
if Time.zone.now - last_time > 1 if Time.zone.now - last_time > 1
say_progress(migrated, total, started_time) say_progress(migrated)
last_time = Time.zone.now last_time = Time.zone.now
end end
end end
@ -34,7 +32,7 @@ class MigrateAccountConversations < ActiveRecord::Migration[5.2]
migrated += 1 migrated += 1
if Time.zone.now - last_time > 1 if Time.zone.now - last_time > 1
say_progress(migrated, total, started_time) say_progress(migrated)
last_time = Time.zone.now last_time = Time.zone.now
end end
end end
@ -45,24 +43,8 @@ class MigrateAccountConversations < ActiveRecord::Migration[5.2]
private private
def estimate_rows(query) def say_progress(migrated)
result = exec_query("EXPLAIN #{query.to_sql}").first say "Migrated #{migrated} rows", true
result['QUERY PLAN'].scan(/ rows=([\d]+)/).first&.first&.to_i || 0
end
def say_progress(migrated, total, started_time)
status = "Migrated #{migrated} rows"
percentage = 100.0 * migrated / total
status += " (~#{sprintf('%.2f', percentage)}%, "
remaining_time = (100.0 - percentage) * (Time.zone.now - started_time) / percentage
status += "#{(remaining_time / 60).to_i}:"
status += sprintf('%02d', remaining_time.to_i % 60)
status += ' remaining)'
say status, true
end end
def local_direct_statuses def local_direct_statuses