summaryrefslogtreecommitdiff
path: root/db/post_migrate/20190528180441_enqueue_reset_merge_status.rb
diff options
context:
space:
mode:
authorOswaldo Ferreira <oswaldo@gitlab.com>2019-05-28 18:28:12 -0300
committerOswaldo Ferreira <oswaldo@gitlab.com>2019-05-31 15:21:20 -0300
commitf3efec202986f820eaa1dc76db34b095e73a99f6 (patch)
tree9a60f451cc22c917083976f63d6d2b288f679557 /db/post_migrate/20190528180441_enqueue_reset_merge_status.rb
parentc7e5d046a54cd10145ea81983a7e3ceb94755f79 (diff)
downloadgitlab-ce-f3efec202986f820eaa1dc76db34b095e73a99f6.tar.gz
Reset merge status from mergeable MRs
Adds migrations to reset the merge_status of opened, mergeable MRs. That's required by https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/28513 so we're able to sync the status update along merge-ref, without leaving MRs with a stale merge-ref.
Diffstat (limited to 'db/post_migrate/20190528180441_enqueue_reset_merge_status.rb')
-rw-r--r--db/post_migrate/20190528180441_enqueue_reset_merge_status.rb30
1 files changed, 30 insertions, 0 deletions
diff --git a/db/post_migrate/20190528180441_enqueue_reset_merge_status.rb b/db/post_migrate/20190528180441_enqueue_reset_merge_status.rb
new file mode 100644
index 00000000000..1b668d85bac
--- /dev/null
+++ b/db/post_migrate/20190528180441_enqueue_reset_merge_status.rb
@@ -0,0 +1,30 @@
+# frozen_string_literal: true
+
+# See http://doc.gitlab.com/ce/development/migration_style_guide.html
+# for more information on how to write migrations for GitLab.
+
+class EnqueueResetMergeStatus < ActiveRecord::Migration[5.1]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+ BATCH_SIZE = 10_000
+ MIGRATION = 'ResetMergeStatus'
+ DELAY_INTERVAL = 5.minutes.to_i
+
+ disable_ddl_transaction!
+
+ def up
+ say 'Scheduling `ResetMergeStatus` jobs'
+
+ # We currently have around 135_000 opened, mergeable MRs in GitLab.com. This iteration
+ # will schedule around 13 batches of 10_000 MRs, which should take around 1 hour to
+ # complete.
+ relation = MergeRequest.where(state: 'opened', merge_status: 'can_be_merged')
+
+ relation.each_batch(of: BATCH_SIZE) do |batch, index|
+ range = batch.pluck('MIN(id)', 'MAX(id)').first
+
+ BackgroundMigrationWorker.perform_in(index * DELAY_INTERVAL, MIGRATION, range)
+ end
+ end
+end