diff options
author | Grzegorz Bizon <grzesiek.bizon@gmail.com> | 2017-07-17 14:02:12 +0200 |
---|---|---|
committer | Grzegorz Bizon <grzesiek.bizon@gmail.com> | 2017-07-17 14:02:12 +0200 |
commit | e41d42d6a2f5775b8f165cb00617dc956d3ca097 (patch) | |
tree | c4d988640e90bdfde79bb8349723236cce1f902d /spec | |
parent | af41bd41e9c018eaac4ba9f1e6165aeea894f824 (diff) | |
download | gitlab-ce-e41d42d6a2f5775b8f165cb00617dc956d3ca097.tar.gz |
Simplify background migrations stealing code
Simply re-raise an exception when it occurs, but guarantee that no
background migration is lost in the process.
Diffstat (limited to 'spec')
-rw-r--r-- | spec/lib/gitlab/background_migration_spec.rb | 68 |
1 files changed, 9 insertions, 59 deletions
diff --git a/spec/lib/gitlab/background_migration_spec.rb b/spec/lib/gitlab/background_migration_spec.rb index 64f59c72cec..cfa59280139 100644 --- a/spec/lib/gitlab/background_migration_spec.rb +++ b/spec/lib/gitlab/background_migration_spec.rb @@ -62,32 +62,14 @@ describe Gitlab::BackgroundMigration do allow(queue[1]).to receive(:delete).and_return(true) end - context 'when standard error is being raised' do - it 'recovers from an exception and retries the migration' do - expect(migration).to receive(:perform).with(10, 20) - .and_raise(StandardError, 'Migration error') - .exactly(4).times.ordered - expect(migration).to receive(:perform).with(20, 30) - .once.ordered - expect(Rails.logger).to receive(:warn) - .with(/Retrying background migration/).exactly(3).times - - described_class.steal('Foo') - end - end - - context 'when top level exception is being raised' do - it 'enqueues the migration again and reraises the error' do - allow(migration).to receive(:perform).with(10, 20) - .and_raise(Exception, 'Migration error').once + it 'enqueues the migration again and re-raises the error' do + allow(migration).to receive(:perform).with(10, 20) + .and_raise(Exception, 'Migration error').once - expect(BackgroundMigrationWorker).to receive(:perform_async) - .with('Foo', [10, 20]).once + expect(BackgroundMigrationWorker).to receive(:perform_async) + .with('Foo', [10, 20]).once - expect(Rails.logger).not_to receive(:warn) - expect { described_class.steal('Foo') } - .to raise_error(Exception) - end + expect { described_class.steal('Foo') }.to raise_error(Exception) end end end @@ -131,42 +113,10 @@ describe Gitlab::BackgroundMigration do stub_const("#{described_class.name}::Foo", migration) end - context 'when retries count is not specified' do - it 'performs a background migration' do - expect(migration).to receive(:perform).with(10, 20).once - - described_class.perform('Foo', [10, 20]) - end - end - - context 'when retries count is zero' do - it 'perform a background migration only once' do - expect(migration).to receive(:perform).with(10, 20) - .and_raise(StandardError).once + it 'performs a background migration' do + expect(migration).to receive(:perform).with(10, 20).once - expect { described_class.perform('Foo', [10, 20], retries: 0) } - .to raise_error(StandardError) - end - end - - context 'when retries count is one' do - it 'retries a background migration when needed' do - expect(migration).to receive(:perform).with(10, 20) - .and_raise(StandardError).twice - - expect { described_class.perform('Foo', [10, 20], retries: 1) } - .to raise_error(StandardError) - end - end - - context 'when retries count is larger than zero' do - it 'retries a background migration when needed' do - expect(migration).to receive(:perform).with(10, 20) - .and_raise(StandardError).exactly(4).times - - expect { described_class.perform('Foo', [10, 20], retries: 3) } - .to raise_error(StandardError) - end + described_class.perform('Foo', [10, 20]) end end end |