Prevent admins from attempting hashed storage migration on read only DB
This commit is contained in:
parent
baad9fb8b9
commit
9f80f04059
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Prevent admins from attempting hashed storage migration on read only DB
|
||||
merge_request: 23597
|
||||
author:
|
||||
type: fixed
|
|
@ -2,6 +2,12 @@ namespace :gitlab do
|
|||
namespace :storage do
|
||||
desc 'GitLab | Storage | Migrate existing projects to Hashed Storage'
|
||||
task migrate_to_hashed: :environment do
|
||||
if Gitlab::Database.read_only?
|
||||
warn 'This task requires database write access. Exiting.'
|
||||
|
||||
next
|
||||
end
|
||||
|
||||
storage_migrator = Gitlab::HashedStorage::Migrator.new
|
||||
helper = Gitlab::HashedStorage::RakeHelper
|
||||
|
||||
|
@ -9,7 +15,7 @@ namespace :gitlab do
|
|||
project = Project.with_unmigrated_storage.find_by(id: helper.range_from)
|
||||
|
||||
unless project
|
||||
puts "There are no projects requiring storage migration with ID=#{helper.range_from}"
|
||||
warn "There are no projects requiring storage migration with ID=#{helper.range_from}"
|
||||
|
||||
next
|
||||
end
|
||||
|
@ -23,7 +29,7 @@ namespace :gitlab do
|
|||
legacy_projects_count = Project.with_unmigrated_storage.count
|
||||
|
||||
if legacy_projects_count == 0
|
||||
puts 'There are no projects requiring storage migration. Nothing to do!'
|
||||
warn 'There are no projects requiring storage migration. Nothing to do!'
|
||||
|
||||
next
|
||||
end
|
||||
|
|
|
@ -46,6 +46,16 @@ describe 'rake gitlab:storage:*' do
|
|||
describe 'gitlab:storage:migrate_to_hashed' do
|
||||
let(:task) { 'gitlab:storage:migrate_to_hashed' }
|
||||
|
||||
context 'read-only database' do
|
||||
it 'does nothing' do
|
||||
expect(Gitlab::Database).to receive(:read_only?).and_return(true)
|
||||
|
||||
expect(Project).not_to receive(:with_unmigrated_storage)
|
||||
|
||||
expect { run_rake_task(task) }.to output(/This task requires database write access. Exiting./).to_stderr
|
||||
end
|
||||
end
|
||||
|
||||
context '0 legacy projects' do
|
||||
it 'does nothing' do
|
||||
expect(StorageMigratorWorker).not_to receive(:perform_async)
|
||||
|
@ -92,7 +102,7 @@ describe 'rake gitlab:storage:*' do
|
|||
stub_env('ID_FROM', 99999)
|
||||
stub_env('ID_TO', 99999)
|
||||
|
||||
expect { run_rake_task(task) }.to output(/There are no projects requiring storage migration with ID=99999/).to_stdout
|
||||
expect { run_rake_task(task) }.to output(/There are no projects requiring storage migration with ID=99999/).to_stderr
|
||||
end
|
||||
|
||||
it 'displays a message when project exists but its already migrated' do
|
||||
|
@ -100,7 +110,7 @@ describe 'rake gitlab:storage:*' do
|
|||
stub_env('ID_FROM', project.id)
|
||||
stub_env('ID_TO', project.id)
|
||||
|
||||
expect { run_rake_task(task) }.to output(/There are no projects requiring storage migration with ID=#{project.id}/).to_stdout
|
||||
expect { run_rake_task(task) }.to output(/There are no projects requiring storage migration with ID=#{project.id}/).to_stderr
|
||||
end
|
||||
|
||||
it 'enqueues migration when project can be found' do
|
||||
|
|
Loading…
Reference in New Issue