summaryrefslogtreecommitdiff
path: root/db
diff options
context:
space:
mode:
authorNick Thomas <nick@gitlab.com>2018-09-14 18:21:28 +0100
committerNick Thomas <nick@gitlab.com>2018-10-01 15:34:16 +0100
commit466371a06c6d4d5b206b6fc2b09d7a44d80e8679 (patch)
tree9a1e0398817cd1dae383105edff54652ffc9a846 /db
parentfb48eaba4600c1e0e36afae6ec7638d52265a62c (diff)
downloadgitlab-ce-466371a06c6d4d5b206b6fc2b09d7a44d80e8679.tar.gz
Migrate sensitive web hook data in the background
Diffstat (limited to 'db')
-rw-r--r--db/post_migrate/20180914162043_encrypt_web_hooks_columns.rb33
1 files changed, 33 insertions, 0 deletions
diff --git a/db/post_migrate/20180914162043_encrypt_web_hooks_columns.rb b/db/post_migrate/20180914162043_encrypt_web_hooks_columns.rb
new file mode 100644
index 00000000000..05ec4864a9e
--- /dev/null
+++ b/db/post_migrate/20180914162043_encrypt_web_hooks_columns.rb
@@ -0,0 +1,33 @@
+# frozen_string_literal: true
+
+class EncryptWebHooksColumns < ActiveRecord::Migration
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ BATCH_SIZE = 10000
+ RANGE_SIZE = 100
+ MIGRATION = 'EncryptColumns'
+ COLUMNS = [:token, :url]
+
+ WebHook = ::Gitlab::BackgroundMigration::Models::EncryptColumns::WebHook
+
+ disable_ddl_transaction!
+
+ def up
+ WebHook.each_batch(of: BATCH_SIZE) do |relation, index|
+ delay = index * 2.minutes
+
+ relation.each_batch(of: RANGE_SIZE) do |relation|
+ range = relation.pluck('MIN(id)', 'MAX(id)').first
+ args = [WebHook, COLUMNS, *range]
+
+ BackgroundMigrationWorker.perform_in(delay, MIGRATION, args)
+ end
+ end
+ end
+
+ def down
+ # noop
+ end
+end