Commit e26d993f authored by Yorick Peterse's avatar Yorick Peterse

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
parent bedfc7b1
...@@ -18,12 +18,21 @@ class MigrateRemainingIssuesClosedAt < ActiveRecord::Migration ...@@ -18,12 +18,21 @@ class MigrateRemainingIssuesClosedAt < ActiveRecord::Migration
Gitlab::BackgroundMigration.steal('CopyColumn') Gitlab::BackgroundMigration.steal('CopyColumn')
Gitlab::BackgroundMigration.steal('CleanupConcurrentTypeChange') Gitlab::BackgroundMigration.steal('CleanupConcurrentTypeChange')
# It's possible the cleanup job was killed which means we need to manually if migrate_column_type?
# migrate any remaining rows. if closed_at_for_type_change_exists?
migrate_remaining_rows if migrate_column_type? 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 end
def down def down
# Previous migrations already revert the changes made here.
end end
def migrate_remaining_rows def migrate_remaining_rows
...@@ -39,4 +48,8 @@ class MigrateRemainingIssuesClosedAt < ActiveRecord::Migration ...@@ -39,4 +48,8 @@ class MigrateRemainingIssuesClosedAt < ActiveRecord::Migration
# migration, thus we don't need to migrate those environments again. # migration, thus we don't need to migrate those environments again.
column_for('issues', 'closed_at').type == :datetime # rubocop:disable Migration/Datetime column_for('issues', 'closed_at').type == :datetime # rubocop:disable Migration/Datetime
end end
def closed_at_for_type_change_exists?
columns('issues').any? { |col| col.name == 'closed_at_for_type_change' }
end
end end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment