Commit fc897f08 authored by Douwe Maan's avatar Douwe Maan

Merge branch 'zj-backup-restore-object-pools' into 'master'

Restore Object Pools when restoring an object pool

Closes gitaly#1355

See merge request gitlab-org/gitlab-ce!23682
parents 42f45ed2 89a407dc
...@@ -84,6 +84,10 @@ class PoolRepository < ActiveRecord::Base ...@@ -84,6 +84,10 @@ class PoolRepository < ActiveRecord::Base
source_project.repository.raw) source_project.repository.raw)
end end
def inspect
"#<#{self.class.name} id:#{id} state:#{state} disk_path:#{disk_path} source_project: #{source_project.full_path}>"
end
private private
def correct_disk_path def correct_disk_path
......
---
title: Restore Object Pools when restoring an object pool
merge_request: 23682
author:
type: added
...@@ -657,6 +657,7 @@ Restoring database tables: ...@@ -657,6 +657,7 @@ Restoring database tables:
- Loading fixture wikis...[SKIPPING] - Loading fixture wikis...[SKIPPING]
Restoring repositories: Restoring repositories:
- Restoring repository abcd... [DONE] - Restoring repository abcd... [DONE]
- Object pool 1 ...
Deleting tmp directories...[DONE] Deleting tmp directories...[DONE]
``` ```
......
...@@ -4,6 +4,7 @@ require 'yaml' ...@@ -4,6 +4,7 @@ require 'yaml'
module Backup module Backup
class Repository class Repository
include Gitlab::ShellAdapter
attr_reader :progress attr_reader :progress
def initialize(progress) def initialize(progress)
...@@ -75,7 +76,6 @@ module Backup ...@@ -75,7 +76,6 @@ module Backup
def restore def restore
prepare_directories prepare_directories
gitlab_shell = Gitlab::Shell.new
Project.find_each(batch_size: 1000) do |project| Project.find_each(batch_size: 1000) do |project|
progress.print " * #{project.full_path} ... " progress.print " * #{project.full_path} ... "
...@@ -118,6 +118,8 @@ module Backup ...@@ -118,6 +118,8 @@ module Backup
end end
end end
end end
restore_object_pools
end end
protected protected
...@@ -159,5 +161,17 @@ module Backup ...@@ -159,5 +161,17 @@ module Backup
def display_repo_path(project) def display_repo_path(project)
project.hashed_storage?(:repository) ? "#{project.full_path} (#{project.disk_path})" : project.full_path project.hashed_storage?(:repository) ? "#{project.full_path} (#{project.disk_path})" : project.full_path
end 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
end end
...@@ -67,6 +67,19 @@ describe Backup::Repository do ...@@ -67,6 +67,19 @@ describe Backup::Repository do
end end
end 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 end
describe '#prepare_directories', :seed_helper do describe '#prepare_directories', :seed_helper do
......
...@@ -74,6 +74,7 @@ describe 'gitlab:app namespace rake task' do ...@@ -74,6 +74,7 @@ describe 'gitlab:app namespace rake task' do
it 'invokes restoration on match' do it 'invokes restoration on match' do
allow(YAML).to receive(:load_file) allow(YAML).to receive(:load_file)
.and_return({ gitlab_version: gitlab_version }) .and_return({ gitlab_version: gitlab_version })
expect(Rake::Task['gitlab:db:drop_tables']).to receive(:invoke) 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:db:restore']).to receive(:invoke)
expect(Rake::Task['gitlab:backup:repo:restore']).to receive(:invoke) expect(Rake::Task['gitlab:backup:repo:restore']).to receive(:invoke)
......
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