Skip to content
代码片段 群组 项目
提交 67dc43db 编辑于 作者: Douwe Maan's avatar Douwe Maan
浏览文件

Merge branch 'gitaly-disk-access-2' into 'master'

Find and mark more Git disk access locations

See merge request gitlab-org/gitlab-ce!19363
No related branches found
No related tags found
无相关合并请求
显示
89 个添加52 个删除
...@@ -412,7 +412,10 @@ def sanitize_repo_path(project, message) ...@@ -412,7 +412,10 @@ def sanitize_repo_path(project, message)
exports_path = File.join(Settings.shared['path'], 'tmp/project_exports') exports_path = File.join(Settings.shared['path'], 'tmp/project_exports')
filtered_message = message.strip.gsub(exports_path, "[REPO EXPORT PATH]") filtered_message = message.strip.gsub(exports_path, "[REPO EXPORT PATH]")
disk_path = Gitlab.config.repositories.storages[project.repository_storage].legacy_disk_path disk_path = Gitlab::GitalyClient::StorageSettings.allow_disk_access do
Gitlab.config.repositories.storages[project.repository_storage].legacy_disk_path
end
filtered_message.gsub(disk_path.chomp('/'), "[REPOS PATH]") filtered_message.gsub(disk_path.chomp('/'), "[REPOS PATH]")
end end
......
module Backup
Error = Class.new(StandardError)
end
...@@ -44,7 +44,7 @@ def dump ...@@ -44,7 +44,7 @@ def dump
end end
report_success(success) report_success(success)
abort 'Backup failed' unless success raise Backup::Error, 'Backup failed' unless success
end end
def restore def restore
...@@ -72,7 +72,7 @@ def restore ...@@ -72,7 +72,7 @@ def restore
end end
report_success(success) report_success(success)
abort 'Restore failed' unless success abort Backup::Error, 'Restore failed' unless success
end end
protected protected
......
...@@ -26,7 +26,7 @@ def dump ...@@ -26,7 +26,7 @@ def dump
unless status.zero? unless status.zero?
puts output puts output
abort 'Backup failed' raise Backup::Error, 'Backup failed'
end end
run_pipeline!([%W(tar --exclude=lost+found -C #{@backup_files_dir} -cf - .), %w(gzip -c -1)], out: [backup_tarball, 'w', 0600]) run_pipeline!([%W(tar --exclude=lost+found -C #{@backup_files_dir} -cf - .), %w(gzip -c -1)], out: [backup_tarball, 'w', 0600])
...@@ -39,7 +39,11 @@ def dump ...@@ -39,7 +39,11 @@ def dump
def restore def restore
backup_existing_files_dir backup_existing_files_dir
run_pipeline!([%w(gzip -cd), %W(tar --unlink-first --recursive-unlink -C #{app_files_dir} -xf -)], in: backup_tarball) run_pipeline!([%w(gzip -cd), %W(#{tar} --unlink-first --recursive-unlink -C #{app_files_dir} -xf -)], in: backup_tarball)
end
def tar
system(*%w[gtar --version], out: '/dev/null') ? 'gtar' : 'tar'
end end
def backup_existing_files_dir def backup_existing_files_dir
...@@ -61,7 +65,7 @@ def backup_existing_files_dir ...@@ -61,7 +65,7 @@ def backup_existing_files_dir
def run_pipeline!(cmd_list, options = {}) def run_pipeline!(cmd_list, options = {})
status_list = Open3.pipeline(*cmd_list, options) status_list = Open3.pipeline(*cmd_list, options)
abort 'Backup failed' unless status_list.compact.all?(&:success?) raise Backup::Error, 'Backup failed' unless status_list.compact.all?(&:success?)
end end
end end
end end
...@@ -27,7 +27,7 @@ def pack ...@@ -27,7 +27,7 @@ def pack
progress.puts "done".color(:green) progress.puts "done".color(:green)
else else
puts "creating archive #{tar_file} failed".color(:red) puts "creating archive #{tar_file} failed".color(:red)
abort 'Backup failed' raise Backup::Error, 'Backup failed'
end end
upload upload
...@@ -52,7 +52,7 @@ def upload ...@@ -52,7 +52,7 @@ def upload
progress.puts "done".color(:green) progress.puts "done".color(:green)
else else
puts "uploading backup to #{remote_directory} failed".color(:red) puts "uploading backup to #{remote_directory} failed".color(:red)
abort 'Backup failed' raise Backup::Error, 'Backup failed'
end end
end end
...@@ -66,7 +66,7 @@ def cleanup ...@@ -66,7 +66,7 @@ def cleanup
progress.puts "done".color(:green) progress.puts "done".color(:green)
else else
puts "deleting tmp directory '#{dir}' failed".color(:red) puts "deleting tmp directory '#{dir}' failed".color(:red)
abort 'Backup failed' raise Backup::Error, 'Backup failed'
end end
end end
end end
......
...@@ -17,7 +17,10 @@ def dump ...@@ -17,7 +17,10 @@ def dump
Project.find_each(batch_size: 1000) do |project| Project.find_each(batch_size: 1000) do |project|
progress.print " * #{display_repo_path(project)} ... " progress.print " * #{display_repo_path(project)} ... "
path_to_project_repo = path_to_repo(project)
path_to_project_repo = Gitlab::GitalyClient::StorageSettings.allow_disk_access do
path_to_repo(project)
end
path_to_project_bundle = path_to_bundle(project) path_to_project_bundle = path_to_bundle(project)
# Create namespace dir or hashed path if missing # Create namespace dir or hashed path if missing
...@@ -51,7 +54,9 @@ def dump ...@@ -51,7 +54,9 @@ def dump
end end
wiki = ProjectWiki.new(project) wiki = ProjectWiki.new(project)
path_to_wiki_repo = path_to_repo(wiki) path_to_wiki_repo = Gitlab::GitalyClient::StorageSettings.allow_disk_access do
path_to_repo(wiki)
end
path_to_wiki_bundle = path_to_bundle(wiki) path_to_wiki_bundle = path_to_bundle(wiki)
if File.exist?(path_to_wiki_repo) if File.exist?(path_to_wiki_repo)
...@@ -111,7 +116,9 @@ def restore_custom_hooks(project) ...@@ -111,7 +116,9 @@ def restore_custom_hooks(project)
# TODO: Need to find a way to do this for gitaly # TODO: Need to find a way to do this for gitaly
# Gitaly migration issue: https://gitlab.com/gitlab-org/gitaly/issues/1195 # Gitaly migration issue: https://gitlab.com/gitlab-org/gitaly/issues/1195
in_path(path_to_tars(project)) do |dir| in_path(path_to_tars(project)) do |dir|
path_to_project_repo = path_to_repo(project) path_to_project_repo = Gitlab::GitalyClient::StorageSettings.allow_disk_access do
path_to_repo(project)
end
cmd = %W(tar -xf #{path_to_tars(project, dir)} -C #{path_to_project_repo} #{dir}) cmd = %W(tar -xf #{path_to_tars(project, dir)} -C #{path_to_project_repo} #{dir})
output, status = Gitlab::Popen.popen(cmd) output, status = Gitlab::Popen.popen(cmd)
......
...@@ -109,7 +109,7 @@ def initialize(storage, relative_path, gl_repository) ...@@ -109,7 +109,7 @@ def initialize(storage, relative_path, gl_repository)
end end
def ==(other) def ==(other)
path == other.path [storage, relative_path] == [other.storage, other.relative_path]
end end
def path def path
......
...@@ -26,10 +26,6 @@ def bundle_to_disk ...@@ -26,10 +26,6 @@ def bundle_to_disk
@shared.error(e) @shared.error(e)
false false
end end
def path_to_repo
@project.repository.path_to_repo
end
end end
end end
end end
...@@ -22,12 +22,8 @@ def project_filename ...@@ -22,12 +22,8 @@ def project_filename
"project.wiki.bundle" "project.wiki.bundle"
end end
def path_to_repo
@wiki.repository.path_to_repo
end
def wiki_repository_exists? def wiki_repository_exists?
File.exist?(@wiki.repository.path_to_repo) && !@wiki.repository.empty? @wiki.repository.exists? && !@wiki.repository.empty?
end end
end end
end end
......
...@@ -128,10 +128,12 @@ def warn_user_is_not_gitlab ...@@ -128,10 +128,12 @@ def warn_user_is_not_gitlab
end end
def all_repos def all_repos
Gitlab.config.repositories.storages.each_value do |repository_storage| Gitlab::GitalyClient::StorageSettings.allow_disk_access do
IO.popen(%W(find #{repository_storage.legacy_disk_path} -mindepth 2 -type d -name *.git)) do |find| Gitlab.config.repositories.storages.each_value do |repository_storage|
find.each_line do |path| IO.popen(%W(find #{repository_storage.legacy_disk_path} -mindepth 2 -type d -name *.git)) do |find|
yield path.chomp find.each_line do |path|
yield path.chomp
end
end end
end end
end end
......
...@@ -12,7 +12,7 @@ namespace :gitlab do ...@@ -12,7 +12,7 @@ namespace :gitlab do
namespaces = Namespace.pluck(:path) namespaces = Namespace.pluck(:path)
namespaces << HASHED_REPOSITORY_NAME # add so that it will be ignored namespaces << HASHED_REPOSITORY_NAME # add so that it will be ignored
Gitlab.config.repositories.storages.each do |name, repository_storage| Gitlab.config.repositories.storages.each do |name, repository_storage|
git_base_path = repository_storage.legacy_disk_path git_base_path = Gitlab::GitalyClient::StorageSettings.allow_disk_access { repository_storage.legacy_disk_path }
all_dirs = Dir.glob(git_base_path + '/*') all_dirs = Dir.glob(git_base_path + '/*')
puts git_base_path.color(:yellow) puts git_base_path.color(:yellow)
...@@ -54,7 +54,8 @@ namespace :gitlab do ...@@ -54,7 +54,8 @@ namespace :gitlab do
move_suffix = "+orphaned+#{Time.now.to_i}" move_suffix = "+orphaned+#{Time.now.to_i}"
Gitlab.config.repositories.storages.each do |name, repository_storage| Gitlab.config.repositories.storages.each do |name, repository_storage|
repo_root = repository_storage.legacy_disk_path repo_root = Gitlab::GitalyClient::StorageSettings.allow_disk_access { repository_storage.legacy_disk_path }
# Look for global repos (legacy, depth 1) and normal repos (depth 2) # Look for global repos (legacy, depth 1) and normal repos (depth 2)
IO.popen(%W(find #{repo_root} -mindepth 1 -maxdepth 2 -name *.git)) do |find| IO.popen(%W(find #{repo_root} -mindepth 1 -maxdepth 2 -name *.git)) do |find|
find.each_line do |path| find.each_line do |path|
......
...@@ -87,11 +87,13 @@ ...@@ -87,11 +87,13 @@
def wiki_exists?(project) def wiki_exists?(project)
wiki = ProjectWiki.new(project) wiki = ProjectWiki.new(project)
File.exist?(wiki.repository.path_to_repo) && !wiki.repository.empty? wiki.repository.exists? && !wiki.repository.empty?
end end
def project_hook_exists?(project) def project_hook_exists?(project)
Gitlab::Git::Hook.new('post-receive', project.repository.raw_repository).exists? Gitlab::GitalyClient::StorageSettings.allow_disk_access do
Gitlab::Git::Hook.new('post-receive', project.repository.raw_repository).exists?
end
end end
def click_import_project_tab def click_import_project_tab
......
...@@ -46,7 +46,9 @@ ...@@ -46,7 +46,9 @@
end end
it 'calls tar command with unlink' do it 'calls tar command with unlink' do
expect(subject).to receive(:run_pipeline!).with([%w(gzip -cd), %w(tar --unlink-first --recursive-unlink -C /var/gitlab-registry -xf -)], any_args) expect(subject).to receive(:tar).and_return('blabla-tar')
expect(subject).to receive(:run_pipeline!).with([%w(gzip -cd), %w(blabla-tar --unlink-first --recursive-unlink -C /var/gitlab-registry -xf -)], any_args)
subject.restore subject.restore
end end
end end
......
...@@ -34,7 +34,9 @@ ...@@ -34,7 +34,9 @@
let(:timestamp) { Time.utc(2017, 3, 22) } let(:timestamp) { Time.utc(2017, 3, 22) }
let(:temp_dirs) do let(:temp_dirs) do
Gitlab.config.repositories.storages.map do |name, storage| Gitlab.config.repositories.storages.map do |name, storage|
File.join(storage.legacy_disk_path, '..', 'repositories.old.' + timestamp.to_i.to_s) Gitlab::GitalyClient::StorageSettings.allow_disk_access do
File.join(storage.legacy_disk_path, '..', 'repositories.old.' + timestamp.to_i.to_s)
end
end end
end end
......
...@@ -20,6 +20,13 @@ ...@@ -20,6 +20,13 @@
Rainbow.enabled = @rainbow Rainbow.enabled = @rainbow
end end
around do |example|
# TODO migrate BareRepositoryImport https://gitlab.com/gitlab-org/gitaly/issues/953
Gitlab::GitalyClient::StorageSettings.allow_disk_access do
example.run
end
end
shared_examples 'importing a repository' do shared_examples 'importing a repository' do
describe '.execute' do describe '.execute' do
it 'creates a project for a repository in storage' do it 'creates a project for a repository in storage' do
......
...@@ -62,8 +62,10 @@ ...@@ -62,8 +62,10 @@
before do before do
gitlab_shell.create_repository(repository_storage, hashed_path) gitlab_shell.create_repository(repository_storage, hashed_path)
repository = Rugged::Repository.new(repo_path) Gitlab::GitalyClient::StorageSettings.allow_disk_access do
repository.config['gitlab.fullpath'] = 'to/repo' repository = Rugged::Repository.new(repo_path)
repository.config['gitlab.fullpath'] = 'to/repo'
end
end end
after do after do
......
...@@ -159,6 +159,7 @@ ...@@ -159,6 +159,7 @@
let(:feature2) { 'feature2' } let(:feature2) { 'feature2' }
around do |example| around do |example|
# discover_default_branch will be moved to gitaly-ruby
Gitlab::GitalyClient::StorageSettings.allow_disk_access do Gitlab::GitalyClient::StorageSettings.allow_disk_access do
example.run example.run
end end
...@@ -373,6 +374,7 @@ def submodule_url(path) ...@@ -373,6 +374,7 @@ def submodule_url(path)
context '#submodules' do context '#submodules' do
around do |example| around do |example|
# TODO #submodules will be removed, has been migrated to gitaly
Gitlab::GitalyClient::StorageSettings.allow_disk_access do Gitlab::GitalyClient::StorageSettings.allow_disk_access do
example.run example.run
end end
...@@ -1055,6 +1057,7 @@ def commit_files(commit) ...@@ -1055,6 +1057,7 @@ def commit_files(commit)
describe "#rugged_commits_between" do describe "#rugged_commits_between" do
around do |example| around do |example|
# TODO #rugged_commits_between will be removed, has been migrated to gitaly
Gitlab::GitalyClient::StorageSettings.allow_disk_access do Gitlab::GitalyClient::StorageSettings.allow_disk_access do
example.run example.run
end end
...@@ -1703,6 +1706,7 @@ def commit_files(commit) ...@@ -1703,6 +1706,7 @@ def commit_files(commit)
let(:refs) { ['deadbeef', SeedRepo::RubyBlob::ID, '909e6157199'] } let(:refs) { ['deadbeef', SeedRepo::RubyBlob::ID, '909e6157199'] }
around do |example| around do |example|
# TODO #batch_existence isn't used anywhere, can we remove it?
Gitlab::GitalyClient::StorageSettings.allow_disk_access do Gitlab::GitalyClient::StorageSettings.allow_disk_access do
example.run example.run
end end
......
...@@ -9,9 +9,11 @@ def args_for_popen(args_list) ...@@ -9,9 +9,11 @@ def args_for_popen(args_list)
end end
def stub_popen_rev_list(*additional_args, with_lazy_block: true, output:) def stub_popen_rev_list(*additional_args, with_lazy_block: true, output:)
repo_path = Gitlab::GitalyClient::StorageSettings.allow_disk_access { repository.path }
params = [ params = [
args_for_popen(additional_args), args_for_popen(additional_args),
repository.path, repo_path,
{}, {},
hash_including(lazy_block: with_lazy_block ? anything : nil) hash_including(lazy_block: with_lazy_block ? anything : nil)
] ]
......
...@@ -552,7 +552,7 @@ def disable_protocol(protocol) ...@@ -552,7 +552,7 @@ def disable_protocol(protocol)
it 'returns not found' do it 'returns not found' do
project.add_guest(user) project.add_guest(user)
repo = project.repository repo = project.repository
FileUtils.rm_rf(repo.path) Gitlab::GitalyClient::StorageSettings.allow_disk_access { FileUtils.rm_rf(repo.path) }
# Sanity check for rm_rf # Sanity check for rm_rf
expect(repo.exists?).to eq(false) expect(repo.exists?).to eq(false)
...@@ -750,20 +750,22 @@ def stub_git_hooks ...@@ -750,20 +750,22 @@ def stub_git_hooks
def merge_into_protected_branch def merge_into_protected_branch
@protected_branch_merge_commit ||= begin @protected_branch_merge_commit ||= begin
stub_git_hooks Gitlab::GitalyClient::StorageSettings.allow_disk_access do
project.repository.add_branch(user, unprotected_branch, 'feature') stub_git_hooks
target_branch = project.repository.lookup('feature') project.repository.add_branch(user, unprotected_branch, 'feature')
source_branch = project.repository.create_file( target_branch = project.repository.lookup('feature')
user, source_branch = project.repository.create_file(
'filename', user,
'This is the file content', 'filename',
message: 'This is a good commit message', 'This is the file content',
branch_name: unprotected_branch) message: 'This is a good commit message',
rugged = project.repository.rugged branch_name: unprotected_branch)
author = { email: "email@example.com", time: Time.now, name: "Example Git User" } rugged = project.repository.rugged
author = { email: "email@example.com", time: Time.now, name: "Example Git User" }
merge_index = rugged.merge_commits(target_branch, source_branch)
Rugged::Commit.create(rugged, author: author, committer: author, message: "commit message", parents: [target_branch, source_branch], tree: merge_index.write_tree(rugged)) merge_index = rugged.merge_commits(target_branch, source_branch)
Rugged::Commit.create(rugged, author: author, committer: author, message: "commit message", parents: [target_branch, source_branch], tree: merge_index.write_tree(rugged))
end
end end
end end
......
...@@ -41,8 +41,10 @@ ...@@ -41,8 +41,10 @@
after do after do
FileUtils.rm_rf(export_path) FileUtils.rm_rf(export_path)
FileUtils.rm_rf(project_with_repo.repository.path_to_repo) Gitlab::GitalyClient::StorageSettings.allow_disk_access do
FileUtils.rm_rf(project.repository.path_to_repo) FileUtils.rm_rf(project_with_repo.repository.path_to_repo)
FileUtils.rm_rf(project.repository.path_to_repo)
end
end end
it 'can access the MR' do it 'can access the MR' do
......
0% 加载中 .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册