diff --git a/app/models/pool_repository.rb b/app/models/pool_repository.rb index dbde00b55840fa9cbfe5267aefafeb6b656efc7b..47da0209c2f5db515f874a71a5e0e93afeea6f46 100644 --- a/app/models/pool_repository.rb +++ b/app/models/pool_repository.rb @@ -84,6 +84,10 @@ class PoolRepository < ActiveRecord::Base source_project.repository.raw) end + def inspect + "#<#{self.class.name} id:#{id} state:#{state} disk_path:#{disk_path} source_project: #{source_project.full_path}>" + end + private def correct_disk_path diff --git a/changelogs/unreleased/zj-backup-restore-object-pools.yml b/changelogs/unreleased/zj-backup-restore-object-pools.yml new file mode 100644 index 0000000000000000000000000000000000000000..26e1d49aa044aa53f6326333509018210a510f2d --- /dev/null +++ b/changelogs/unreleased/zj-backup-restore-object-pools.yml @@ -0,0 +1,5 @@ +--- +title: Restore Object Pools when restoring an object pool +merge_request: 23682 +author: +type: added diff --git a/doc/raketasks/backup_restore.md b/doc/raketasks/backup_restore.md index a63656fafefedabb16a12c2da44705b6a73bb65f..57bc71d29031012d89c6b9149315a4895595537a 100644 --- a/doc/raketasks/backup_restore.md +++ b/doc/raketasks/backup_restore.md @@ -657,6 +657,7 @@ Restoring database tables: - Loading fixture wikis...[SKIPPING] Restoring repositories: - Restoring repository abcd... [DONE] +- Object pool 1 ... Deleting tmp directories...[DONE] ``` diff --git a/lib/backup/repository.rb b/lib/backup/repository.rb index c8a5377bfa07ceb2dbf19ade7a681759a9e464c1..184c7418e75252126a9cbdf9a35b488d711be34f 100644 --- a/lib/backup/repository.rb +++ b/lib/backup/repository.rb @@ -4,6 +4,7 @@ require 'yaml' module Backup class Repository + include Gitlab::ShellAdapter attr_reader :progress def initialize(progress) @@ -75,7 +76,6 @@ module Backup def restore prepare_directories - gitlab_shell = Gitlab::Shell.new Project.find_each(batch_size: 1000) do |project| progress.print " * #{project.full_path} ... " @@ -118,6 +118,8 @@ module Backup end end end + + restore_object_pools end protected @@ -159,5 +161,17 @@ module Backup def display_repo_path(project) project.hashed_storage?(:repository) ? "#{project.full_path} (#{project.disk_path})" : project.full_path end + + def restore_object_pools + PoolRepository.includes(:source_project).find_each do |pool| + progress.puts " - Object pool #{pool.disk_path}..." + + pool.source_project ||= pool.member_projects.first.root_of_fork_network + pool.state = 'none' + pool.save + + pool.schedule + end + end end end diff --git a/spec/lib/backup/repository_spec.rb b/spec/lib/backup/repository_spec.rb index fdeea814bb2662161ab1f4a4b6af13b6c05b0801..5ace5c5b1a28baf621479b6ec8cd2a30c580850e 100644 --- a/spec/lib/backup/repository_spec.rb +++ b/spec/lib/backup/repository_spec.rb @@ -67,6 +67,19 @@ describe Backup::Repository do end end end + + context 'restoring object pools' do + it 'schedules restoring of the pool' do + pool_repository = create(:pool_repository, :failed) + pool_repository.delete_object_pool + + subject.restore + + pool_repository.reload + expect(pool_repository).not_to be_failed + expect(pool_repository.object_pool.exists?).to be(true) + end + end end describe '#prepare_directories', :seed_helper do diff --git a/spec/tasks/gitlab/backup_rake_spec.rb b/spec/tasks/gitlab/backup_rake_spec.rb index 8c4360d4cf06f81c8f95dd5d603771ff47102904..3b8f7f5fe7ddd9db93bbb6e9fbbba84bc887bf32 100644 --- a/spec/tasks/gitlab/backup_rake_spec.rb +++ b/spec/tasks/gitlab/backup_rake_spec.rb @@ -74,6 +74,7 @@ describe 'gitlab:app namespace rake task' do it 'invokes restoration on match' do allow(YAML).to receive(:load_file) .and_return({ gitlab_version: gitlab_version }) + expect(Rake::Task['gitlab:db:drop_tables']).to receive(:invoke) expect(Rake::Task['gitlab:backup:db:restore']).to receive(:invoke) expect(Rake::Task['gitlab:backup:repo:restore']).to receive(:invoke)