Handle EE edge cases in issues.closed_at migration
EE seems to have had an outdated schema at some point, leading to some environments not having the right columns in place. This adjusts the migration for `issues.closed_at` so it takes care of those cases, ensuring data can be migrated properly. Fixes https://gitlab.com/gitlab-org/gitlab-ee/issues/4803
This commit is contained in:
parent
bedfc7b103
commit
e26d993f99
|
@ -18,12 +18,21 @@ class MigrateRemainingIssuesClosedAt < ActiveRecord::Migration
|
|||
Gitlab::BackgroundMigration.steal('CopyColumn')
|
||||
Gitlab::BackgroundMigration.steal('CleanupConcurrentTypeChange')
|
||||
|
||||
# It's possible the cleanup job was killed which means we need to manually
|
||||
# migrate any remaining rows.
|
||||
migrate_remaining_rows if migrate_column_type?
|
||||
if migrate_column_type?
|
||||
if closed_at_for_type_change_exists?
|
||||
migrate_remaining_rows
|
||||
else
|
||||
# Due to some EE merge problems some environments may not have the
|
||||
# "closed_at_for_type_change" column. If this is the case we have no
|
||||
# other option than to migrate the data _right now_.
|
||||
change_column_type_concurrently(:issues, :closed_at, :datetime_with_timezone)
|
||||
cleanup_concurrent_column_type_change(:issues, :closed_at)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def down
|
||||
# Previous migrations already revert the changes made here.
|
||||
end
|
||||
|
||||
def migrate_remaining_rows
|
||||
|
@ -39,4 +48,8 @@ class MigrateRemainingIssuesClosedAt < ActiveRecord::Migration
|
|||
# migration, thus we don't need to migrate those environments again.
|
||||
column_for('issues', 'closed_at').type == :datetime # rubocop:disable Migration/Datetime
|
||||
end
|
||||
|
||||
def closed_at_for_type_change_exists?
|
||||
columns('issues').any? { |col| col.name == 'closed_at_for_type_change' }
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue