Add migration to steal FillStoreUpload

This commit is contained in:
Toon Claes 2018-11-05 21:26:40 +01:00
parent 149b632722
commit 16116bb148
2 changed files with 71 additions and 0 deletions

View 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

View 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