Commit 9f80f040 authored by Michael Kozono's avatar Michael Kozono Committed by Douglas Barbosa Alexandre

Prevent admins from attempting hashed storage migration on read only DB

parent baad9fb8
---
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 ...@@ -2,6 +2,12 @@ namespace :gitlab do
namespace :storage do namespace :storage do
desc 'GitLab | Storage | Migrate existing projects to Hashed Storage' desc 'GitLab | Storage | Migrate existing projects to Hashed Storage'
task migrate_to_hashed: :environment do 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 storage_migrator = Gitlab::HashedStorage::Migrator.new
helper = Gitlab::HashedStorage::RakeHelper helper = Gitlab::HashedStorage::RakeHelper
...@@ -9,7 +15,7 @@ namespace :gitlab do ...@@ -9,7 +15,7 @@ namespace :gitlab do
project = Project.with_unmigrated_storage.find_by(id: helper.range_from) project = Project.with_unmigrated_storage.find_by(id: helper.range_from)
unless project 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 next
end end
...@@ -23,7 +29,7 @@ namespace :gitlab do ...@@ -23,7 +29,7 @@ namespace :gitlab do
legacy_projects_count = Project.with_unmigrated_storage.count legacy_projects_count = Project.with_unmigrated_storage.count
if legacy_projects_count == 0 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 next
end end
......
...@@ -46,6 +46,16 @@ describe 'rake gitlab:storage:*' do ...@@ -46,6 +46,16 @@ describe 'rake gitlab:storage:*' do
describe 'gitlab:storage:migrate_to_hashed' do describe 'gitlab:storage:migrate_to_hashed' do
let(:task) { 'gitlab:storage:migrate_to_hashed' } 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 context '0 legacy projects' do
it 'does nothing' do it 'does nothing' do
expect(StorageMigratorWorker).not_to receive(:perform_async) expect(StorageMigratorWorker).not_to receive(:perform_async)
...@@ -92,7 +102,7 @@ describe 'rake gitlab:storage:*' do ...@@ -92,7 +102,7 @@ describe 'rake gitlab:storage:*' do
stub_env('ID_FROM', 99999) stub_env('ID_FROM', 99999)
stub_env('ID_TO', 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 end
it 'displays a message when project exists but its already migrated' do it 'displays a message when project exists but its already migrated' do
...@@ -100,7 +110,7 @@ describe 'rake gitlab:storage:*' do ...@@ -100,7 +110,7 @@ describe 'rake gitlab:storage:*' do
stub_env('ID_FROM', project.id) stub_env('ID_FROM', project.id)
stub_env('ID_TO', 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 end
it 'enqueues migration when project can be found' do it 'enqueues migration when project can be found' do
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment