summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorDouwe Maan <douwe@gitlab.com>2017-02-21 23:50:00 +0000
committerRuben Davila <rdavila84@gmail.com>2017-02-21 19:12:21 -0500
commitcadea9cad6dbb2763085424c1d4b754ee561cc8d (patch)
treef2def6d94f1234208ca9a8ee21647f1666687f3f /lib
parent88eab515a3c9ddc6e19dab2a492e3a57fee258e2 (diff)
downloadgitlab-ce-cadea9cad6dbb2763085424c1d4b754ee561cc8d.tar.gz
Merge branch '26881-backup-fails-if-data-changes' into 'master'
Copy data before compression to prevent 'file changed as we read it' Closes #26881 See merge request !8728
Diffstat (limited to 'lib')
-rw-r--r--lib/backup/files.rb17
1 files changed, 16 insertions, 1 deletions
diff --git a/lib/backup/files.rb b/lib/backup/files.rb
index cedbb289f6a..247c32c1c0a 100644
--- a/lib/backup/files.rb
+++ b/lib/backup/files.rb
@@ -8,6 +8,7 @@ module Backup
@name = name
@app_files_dir = File.realpath(app_files_dir)
@files_parent_dir = File.realpath(File.join(@app_files_dir, '..'))
+ @backup_files_dir = File.join(Gitlab.config.backup.path, File.basename(@app_files_dir) )
@backup_tarball = File.join(Gitlab.config.backup.path, name + '.tar.gz')
end
@@ -15,7 +16,21 @@ module Backup
def dump
FileUtils.mkdir_p(Gitlab.config.backup.path)
FileUtils.rm_f(backup_tarball)
- run_pipeline!([%W(tar -C #{app_files_dir} -cf - .), %W(gzip -c -1)], out: [backup_tarball, 'w', 0600])
+
+ if ENV['STRATEGY'] == 'copy'
+ cmd = %W(cp -a #{app_files_dir} #{Gitlab.config.backup.path})
+ output, status = Gitlab::Popen.popen(cmd)
+
+ unless status.zero?
+ puts output
+ abort 'Backup failed'
+ end
+
+ run_pipeline!([%W(tar -C #{@backup_files_dir} -cf - .), %W(gzip -c -1)], out: [backup_tarball, 'w', 0600])
+ FileUtils.rm_rf(@backup_files_dir)
+ else
+ run_pipeline!([%W(tar -C #{app_files_dir} -cf - .), %W(gzip -c -1)], out: [backup_tarball, 'w', 0600])
+ end
end
def restore