diff options
author | Rubén Dávila <ruben@gitlab.com> | 2017-10-05 08:14:34 -0500 |
---|---|---|
committer | Rubén Dávila <ruben@gitlab.com> | 2017-10-05 08:26:24 -0500 |
commit | 6e0a4fc10e745f8d8be65f8ee420c75d36057c16 (patch) | |
tree | 14aebfd4b8635dc18ea8f0984c9ac770001a949b /db | |
parent | dd139e65b53f30eae2d8bb50dff180e8eab11fe4 (diff) | |
download | gitlab-ce-6e0a4fc10e745f8d8be65f8ee420c75d36057c16.tar.gz |
Convert migrations to generate subkeys to a background migration
Diffstat (limited to 'db')
3 files changed, 26 insertions, 62 deletions
diff --git a/db/post_migrate/20171002161539_create_gpg_key_subkeys_for_existing_gpg_keys.rb b/db/post_migrate/20171002161539_create_gpg_key_subkeys_for_existing_gpg_keys.rb deleted file mode 100644 index 04c81ea684f..00000000000 --- a/db/post_migrate/20171002161539_create_gpg_key_subkeys_for_existing_gpg_keys.rb +++ /dev/null @@ -1,61 +0,0 @@ -# See http://doc.gitlab.com/ce/development/migration_style_guide.html -# for more information on how to write migrations for GitLab. - -class CreateGpgKeySubkeysForExistingGpgKeys < ActiveRecord::Migration - disable_ddl_transaction! - - DOWNTIME = false - - class GpgKey < ActiveRecord::Base - self.table_name = 'gpg_keys' - - include EachBatch - include ShaAttribute - - sha_attribute :primary_keyid - sha_attribute :fingerprint - - has_many :subkeys, class_name: 'GpgKeySubkey' - end - - class GpgKeySubkey < ActiveRecord::Base - self.table_name = 'gpg_key_subkeys' - - include ShaAttribute - - sha_attribute :keyid - sha_attribute :fingerprint - end - - def up - GpgKey.with_subkeys.each_batch do |batch| - batch.each do |gpg_key| - next if gpg_key.subkeys.any? - - create_subkeys(gpg_key) && update_signatures(gpg_key) - end - end - end - - def down - end - - private - - def create_subkeys(gpg_key) - gpg_subkeys = Gitlab::Gpg.subkeys_from_key(gpg_key.key) - - gpg_subkeys[gpg_key.primary_keyid.upcase]&.each do |subkey_data| - gpg_key.subkeys.build(keyid: subkey_data[:keyid], fingerprint: subkey_data[:fingerprint]) - end - - # Improve latency by doing all INSERTs in a single call - GpgKey.transaction do - gpg_key.save! - end - end - - def update_signatures(gpg_key) - InvalidGpgSignatureUpdateWorker.perform_async(gpg_key.id) - end -end diff --git a/db/post_migrate/20171005130944_schedule_create_gpg_key_subkeys_from_gpg_keys.rb b/db/post_migrate/20171005130944_schedule_create_gpg_key_subkeys_from_gpg_keys.rb new file mode 100644 index 00000000000..c8bbfbccc08 --- /dev/null +++ b/db/post_migrate/20171005130944_schedule_create_gpg_key_subkeys_from_gpg_keys.rb @@ -0,0 +1,25 @@ +# See http://doc.gitlab.com/ce/development/migration_style_guide.html +# for more information on how to write migrations for GitLab. + +class ScheduleCreateGpgKeySubkeysFromGpgKeys < ActiveRecord::Migration + disable_ddl_transaction! + + DOWNTIME = false + + class GpgKey < ActiveRecord::Base + self.table_name = 'gpg_keys' + end + + def up + GpgKey.select(:id).in_batches do |relation| + jobs = relation.pluck(:id).map do |id| + ['CreateGpgKeySubkeysFromGpgKeys', [id]] + end + + BackgroundMigrationWorker.perform_bulk(jobs) + end + end + + def down + end +end diff --git a/db/schema.rb b/db/schema.rb index 3bcfbcc3fd1..3a69e3d3056 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20171004121444) do +ActiveRecord::Schema.define(version: 20171005130944) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" |