Add migration to steal FillStoreUpload
This commit is contained in:
parent
149b632722
commit
16116bb148
2 changed files with 71 additions and 0 deletions
31
db/post_migrate/20181105201455_steal_fill_store_upload.rb
Normal file
31
db/post_migrate/20181105201455_steal_fill_store_upload.rb
Normal file
|
@ -0,0 +1,31 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class StealFillStoreUpload < ActiveRecord::Migration
|
||||
include Gitlab::Database::MigrationHelpers
|
||||
|
||||
DOWNTIME = false
|
||||
BATCH_SIZE = 10_000
|
||||
|
||||
disable_ddl_transaction!
|
||||
|
||||
class Upload < ActiveRecord::Base
|
||||
include EachBatch
|
||||
|
||||
self.table_name = 'uploads'
|
||||
self.inheritance_column = :_type_disabled # Disable STI
|
||||
end
|
||||
|
||||
def up
|
||||
Gitlab::BackgroundMigration.steal('FillStoreUpload')
|
||||
|
||||
Upload.where(store: nil).each_batch(of: BATCH_SIZE) do |batch|
|
||||
range = batch.pluck('MIN(id)', 'MAX(id)').first
|
||||
|
||||
Gitlab::BackgroundMigration::FillStoreUpload.new.perform(*range)
|
||||
end
|
||||
end
|
||||
|
||||
def down
|
||||
# noop
|
||||
end
|
||||
end
|
40
spec/migrations/steal_fill_store_upload_spec.rb
Normal file
40
spec/migrations/steal_fill_store_upload_spec.rb
Normal file
|
@ -0,0 +1,40 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require 'spec_helper'
|
||||
require Rails.root.join('db', 'post_migrate', '20181105201455_steal_fill_store_upload.rb')
|
||||
|
||||
describe StealFillStoreUpload, :migration do
|
||||
let(:uploads) { table(:uploads) }
|
||||
|
||||
describe '#up' do
|
||||
it 'steals the FillStoreUpload background migration' do
|
||||
expect(Gitlab::BackgroundMigration).to receive(:steal).with('FillStoreUpload').and_call_original
|
||||
|
||||
migrate!
|
||||
end
|
||||
|
||||
it 'does not run migration if not needed' do
|
||||
uploads.create(size: 100.kilobytes,
|
||||
uploader: 'AvatarUploader',
|
||||
path: 'uploads/-/system/avatar.jpg',
|
||||
store: 1)
|
||||
|
||||
expect_any_instance_of(Gitlab::BackgroundMigration::FillStoreUpload).not_to receive(:perform)
|
||||
|
||||
migrate!
|
||||
end
|
||||
|
||||
it 'ensures all rows are migrated' do
|
||||
uploads.create(size: 100.kilobytes,
|
||||
uploader: 'AvatarUploader',
|
||||
path: 'uploads/-/system/avatar.jpg',
|
||||
store: nil)
|
||||
|
||||
expect_any_instance_of(Gitlab::BackgroundMigration::FillStoreUpload).to receive(:perform).and_call_original
|
||||
|
||||
expect do
|
||||
migrate!
|
||||
end.to change { uploads.where(store: nil).count }.from(1).to(0)
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Reference in a new issue