diff --git a/db/post_migrate/20190124200344_migrate_storage_migrator_sidekiq_queue.rb b/db/post_migrate/20190124200344_migrate_storage_migrator_sidekiq_queue.rb new file mode 100644 index 0000000000000000000000000000000000000000..193bd5718318d451c686c190bc887d5ed062ddb8 --- /dev/null +++ b/db/post_migrate/20190124200344_migrate_storage_migrator_sidekiq_queue.rb @@ -0,0 +1,18 @@ +# 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 MigrateStorageMigratorSidekiqQueue < ActiveRecord::Migration[5.0] + include Gitlab::Database::MigrationHelpers + + DOWNTIME = false + + def up + sidekiq_queue_migrate 'storage_migrator', to: 'hashed_storage:hashed_storage_migrator' + end + + def down + sidekiq_queue_migrate 'hashed_storage:hashed_storage_migrator', to: 'storage_migrator' + end +end diff --git a/db/schema.rb b/db/schema.rb index cd502d06bf434fe76e41674f29cf35b6256fe24d..859f007dbe1c00f9ccb40a6ffcf1e23808dd923d 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20190115054216) do +ActiveRecord::Schema.define(version: 20190124200344) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" diff --git a/spec/migrations/migrate_storage_migrator_sidekiq_queue_spec.rb b/spec/migrations/migrate_storage_migrator_sidekiq_queue_spec.rb new file mode 100644 index 0000000000000000000000000000000000000000..f8cf76cb339947cf27fda1b2bfc7741d40a92c77 --- /dev/null +++ b/spec/migrations/migrate_storage_migrator_sidekiq_queue_spec.rb @@ -0,0 +1,47 @@ +require 'spec_helper' +require Rails.root.join('db', 'post_migrate', '20190124200344_migrate_storage_migrator_sidekiq_queue.rb') + +describe MigrateStorageMigratorSidekiqQueue, :sidekiq, :redis do + include Gitlab::Database::MigrationHelpers + + context 'when there are jobs in the queues' do + it 'correctly migrates queue when migrating up' do + Sidekiq::Testing.disable! do + stubbed_worker(queue: :storage_migrator).perform_async(1, 5) + + described_class.new.up + + expect(sidekiq_queue_length('storage_migrator')).to eq 0 + expect(sidekiq_queue_length('hashed_storage:hashed_storage_migrator')).to eq 1 + end + end + + it 'correctly migrates queue when migrating down' do + Sidekiq::Testing.disable! do + stubbed_worker(queue: :'hashed_storage:hashed_storage_migrator').perform_async(1, 5) + + described_class.new.down + + expect(sidekiq_queue_length('storage_migrator')).to eq 1 + expect(sidekiq_queue_length('hashed_storage:hashed_storage_migrator')).to eq 0 + end + end + end + + context 'when there are no jobs in the queues' do + it 'does not raise error when migrating up' do + expect { described_class.new.up }.not_to raise_error + end + + it 'does not raise error when migrating down' do + expect { described_class.new.down }.not_to raise_error + end + end + + def stubbed_worker(queue:) + Class.new do + include Sidekiq::Worker + sidekiq_options queue: queue + end + end +end