From 5bc8e7c19b498e7af271f39788ba2ba85933627a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9gis=20Hanol?= Date: Wed, 19 Mar 2014 01:05:47 +0100 Subject: [PATCH] BUGFIX: BackupChunksMerger - actually remove the tmp directory - merge all the chunks into a .tmp archive and then remove the .tmp extension once done --- app/jobs/regular/backup_chunks_merger.rb | 26 ++++++++++++++---------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/app/jobs/regular/backup_chunks_merger.rb b/app/jobs/regular/backup_chunks_merger.rb index d391efc1f9..7cbd37427b 100644 --- a/app/jobs/regular/backup_chunks_merger.rb +++ b/app/jobs/regular/backup_chunks_merger.rb @@ -8,29 +8,33 @@ module Jobs identifier = args[:identifier] chunks = args[:chunks].to_i - raise Discourse::InvalidParameters.new(:filename) if filename.blank? + raise Discourse::InvalidParameters.new(:filename) if filename.blank? raise Discourse::InvalidParameters.new(:identifier) if identifier.blank? - raise Discourse::InvalidParameters.new(:chunks) if chunks <= 0 + raise Discourse::InvalidParameters.new(:chunks) if chunks <= 0 - backup = "#{Backup.base_directory}/#{filename}" + backup_path = "#{Backup.base_directory}/#{filename}" + tmp_backup_path = "#{backup_path}.tmp" - # delete destination - File.delete(backup) rescue nil + # delete destination files + File.delete(backup_path) rescue nil + File.delete(tmp_backup_path) rescue nil # merge all the chunks - File.open(backup, "a") do |backup| + File.open(tmp_backup_path, "a") do |backup| (1..chunks).each do |chunk_number| # path to chunk - path = Backup.chunk_path(identifier, filename, chunk_number) + chunk_path = Backup.chunk_path(identifier, filename, chunk_number) # add chunk to backup - backup << File.open(path).read - # delete chunk - File.delete(path) rescue nil + backup << File.open(chunk_path).read end end + + # rename tmp backup to final backup name + FileUtils.mv(tmp_backup_path, backup_path, force: true) # remove tmp directory - FileUtils.rm_rf(directory) rescue nil + tmp_directory = File.dirname(Backup.chunk_path(identifier, filename, 0)) + FileUtils.rm_rf(tmp_directory) rescue nil end end