Finish any remaining jobs for issues.closed_at

In the event of Sidekiq jobs getting lost there may be some rows left to
migrate. This migration ensures any remaining jobs are completed and
that all data has been migrated.

This fixes https://gitlab.com/gitlab-org/gitlab-ce/issues/41595
This commit is contained in:
Yorick Peterse 2018-02-01 16:23:32 +01:00
parent 5b73e0eb35
commit f01e9c1ef6
No known key found for this signature in database
GPG Key ID: EDD30D2BEB691AC9
3 changed files with 48 additions and 1 deletions

View File

@ -0,0 +1,5 @@
---
title: Finish any remaining jobs for issues.closed_at
merge_request:
author:
type: other

View File

@ -0,0 +1,42 @@
# See http://doc.gitlab.com/ce/development/migration_style_guide.html
# for more information on how to write migrations for GitLab.
class MigrateRemainingIssuesClosedAt < ActiveRecord::Migration
include Gitlab::Database::MigrationHelpers
# Set this constant to true if this migration requires downtime.
DOWNTIME = false
disable_ddl_transaction!
class Issue < ActiveRecord::Base
self.table_name = 'issues'
include EachBatch
end
def up
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?
end
def down
end
def migrate_remaining_rows
Issue.where('closed_at_for_type_change IS NULL AND closed_at IS NOT NULL').each_batch do |batch|
batch.update_all('closed_at_for_type_change = closed_at')
end
cleanup_concurrent_column_type_change(:issues, :closed_at)
end
def migrate_column_type?
# Some environments may have already executed the previous version of this
# migration, thus we don't need to migrate those environments again.
column_for('issues', 'closed_at').type == :datetime # rubocop:disable Migration/Datetime
end
end

View File

@ -11,7 +11,7 @@
#
# It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 20180115201419) do
ActiveRecord::Schema.define(version: 20180201145907) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"