diff options
author | Douglas Barbosa Alexandre <dbalexandre@gmail.com> | 2018-12-19 21:10:00 +0000 |
---|---|---|
committer | Douglas Barbosa Alexandre <dbalexandre@gmail.com> | 2018-12-19 21:10:00 +0000 |
commit | 05b16421c75716a86745dce81e70a7e0e0280abe (patch) | |
tree | 135077c7311448ae5a21930967293d9c980f7908 | |
parent | baad9fb8b90764e80ddda3a61873582ad7452aec (diff) | |
parent | 9f80f0405968dff3ec65b59fcc291c0ee87cdf3a (diff) | |
download | gitlab-ce-05b16421c75716a86745dce81e70a7e0e0280abe.tar.gz |
Merge branch 'mk/avoid-read-only-error' into 'master'
Prevent admins from attempting hashed storage migration on read only DB
See merge request gitlab-org/gitlab-ce!23597
-rw-r--r-- | changelogs/unreleased/mk-avoid-read-only-error.yml | 5 | ||||
-rw-r--r-- | lib/tasks/gitlab/storage.rake | 10 | ||||
-rw-r--r-- | spec/tasks/gitlab/storage_rake_spec.rb | 14 |
3 files changed, 25 insertions, 4 deletions
diff --git a/changelogs/unreleased/mk-avoid-read-only-error.yml b/changelogs/unreleased/mk-avoid-read-only-error.yml new file mode 100644 index 00000000000..8641f5db9f0 --- /dev/null +++ b/changelogs/unreleased/mk-avoid-read-only-error.yml @@ -0,0 +1,5 @@ +--- +title: Prevent admins from attempting hashed storage migration on read only DB +merge_request: 23597 +author: +type: fixed diff --git a/lib/tasks/gitlab/storage.rake b/lib/tasks/gitlab/storage.rake index f539b1df955..09dc3aa9882 100644 --- a/lib/tasks/gitlab/storage.rake +++ b/lib/tasks/gitlab/storage.rake @@ -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 diff --git a/spec/tasks/gitlab/storage_rake_spec.rb b/spec/tasks/gitlab/storage_rake_spec.rb index 233076ad6fa..be902d7c679 100644 --- a/spec/tasks/gitlab/storage_rake_spec.rb +++ b/spec/tasks/gitlab/storage_rake_spec.rb @@ -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 |