Commit 32ebd136 authored by Yorick Peterse's avatar Yorick Peterse

Merge branch 'fix-ionice-again' into 'master'

Fix rsync with ionice command building

See merge request !97
parents ca7c80ce 47723a68
v3.6.4 v3.6.4
- Fix rsync with ionice command building
- Fix short circuit logic between rsync with and without ionice for storage migrations - Fix short circuit logic between rsync with and without ionice for storage migrations
v3.6.3 v3.6.3
......
...@@ -318,16 +318,12 @@ class GitlabProjects ...@@ -318,16 +318,12 @@ class GitlabProjects
$logger.info "Syncing project #{@project_name} from <#{full_path}> to <#{new_full_path}>." $logger.info "Syncing project #{@project_name} from <#{full_path}> to <#{new_full_path}>."
# Set a low IO priority with ionice to not choke the server on moves # Set a low IO priority with ionice to not choke the server on moves
rsync_path = 'ionice -c2 -n7 rsync' if rsync(source_path, new_full_path, 'ionice -c2 -n7 rsync')
result = system(*%W(#{rsync_path} -a --delete --rsync-path="#{rsync_path}" #{source_path} #{new_full_path}))
if result
true true
else else
# If the command fails with `ionice` (maybe because we're on a OS X # If the command fails with `ionice` (maybe because we're on a OS X
# development machine), try again without `ionice`. # development machine), try again without `ionice`.
rsync_path = 'rsync' rsync(source_path, new_full_path)
system(*%W(#{rsync_path} -a --delete --rsync-path="#{rsync_path}" #{source_path} #{new_full_path}))
end end
else else
$logger.error "mv-storage failed: source path <#{full_path}> is waiting for pushes to finish." $logger.error "mv-storage failed: source path <#{full_path}> is waiting for pushes to finish."
...@@ -393,4 +389,9 @@ class GitlabProjects ...@@ -393,4 +389,9 @@ class GitlabProjects
def gitlab_reference_counter def gitlab_reference_counter
@gitlab_reference_counter ||= GitlabReferenceCounter.new(full_path) @gitlab_reference_counter ||= GitlabReferenceCounter.new(full_path)
end end
def rsync(src, dest, rsync_path = 'rsync')
command = rsync_path.split + %W(-a --delete --rsync-path="#{rsync_path}" #{src} #{dest})
system(*command)
end
end end
...@@ -229,7 +229,7 @@ describe GitlabProjects do ...@@ -229,7 +229,7 @@ describe GitlabProjects do
it "should attempt rsync with ionice first" do it "should attempt rsync with ionice first" do
expect(gl_projects).to receive(:system).with( expect(gl_projects).to receive(:system).with(
'ionice -c2 -n7 rsync', '-a', '--delete', '--rsync-path="ionice -c2 -n7 rsync"', 'ionice', '-c2', '-n7', 'rsync', '-a', '--delete', '--rsync-path="ionice -c2 -n7 rsync"',
"#{tmp_repo_path}/", new_repo_path "#{tmp_repo_path}/", new_repo_path
).and_return(true) ).and_return(true)
...@@ -238,7 +238,7 @@ describe GitlabProjects do ...@@ -238,7 +238,7 @@ describe GitlabProjects do
it "should attempt rsync without ionice if with ionice fails" do it "should attempt rsync without ionice if with ionice fails" do
expect(gl_projects).to receive(:system).with( expect(gl_projects).to receive(:system).with(
'ionice -c2 -n7 rsync', '-a', '--delete', '--rsync-path="ionice -c2 -n7 rsync"', 'ionice', '-c2', '-n7', 'rsync', '-a', '--delete', '--rsync-path="ionice -c2 -n7 rsync"',
"#{tmp_repo_path}/", new_repo_path "#{tmp_repo_path}/", new_repo_path
).and_return(false) ).and_return(false)
...@@ -251,7 +251,7 @@ describe GitlabProjects do ...@@ -251,7 +251,7 @@ describe GitlabProjects do
it "should fail if both rsync attempts fail" do it "should fail if both rsync attempts fail" do
expect(gl_projects).to receive(:system).with( expect(gl_projects).to receive(:system).with(
'ionice -c2 -n7 rsync', '-a', '--delete', '--rsync-path="ionice -c2 -n7 rsync"', 'ionice', '-c2', '-n7', 'rsync', '-a', '--delete', '--rsync-path="ionice -c2 -n7 rsync"',
"#{tmp_repo_path}/", new_repo_path "#{tmp_repo_path}/", new_repo_path
).and_return(false) ).and_return(false)
......
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