diff options
author | James Lopez <james@jameslopez.es> | 2016-07-27 17:56:25 +0200 |
---|---|---|
committer | James Lopez <james@jameslopez.es> | 2016-08-01 09:15:11 +0200 |
commit | 52bb564812d106124b95c93f5a502f3ced9c280b (patch) | |
tree | 46faee0a5d107242333f8c26dba90a2452453db5 | |
parent | 2f344eca42f1f0fa8ac122316687bc166c489bf1 (diff) | |
download | gitlab-ce-52bb564812d106124b95c93f5a502f3ced9c280b.tar.gz |
squashed - fix timing issues in prod importing projects
added changelog
fix specs
refactored code based on feedback
fix rubocop warning
-rw-r--r-- | CHANGELOG | 1 | ||||
-rw-r--r-- | lib/gitlab/import_export/file_importer.rb | 20 |
2 files changed, 20 insertions, 1 deletions
diff --git a/CHANGELOG b/CHANGELOG index 9075972e6d0..4095eaa6e63 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -41,6 +41,7 @@ v 8.10.3 (unreleased) - Fix hooks missing on imported GitLab projects - Properly abort a merge when merge conflicts occur - Ignore invalid IPs in X-Forwarded-For when trusted proxies are configured. + - Fix timing problems running imports on production v 8.10.2 - User can now search branches by name. !5144 diff --git a/lib/gitlab/import_export/file_importer.rb b/lib/gitlab/import_export/file_importer.rb index 82d1e1805c5..ff7174c995f 100644 --- a/lib/gitlab/import_export/file_importer.rb +++ b/lib/gitlab/import_export/file_importer.rb @@ -3,6 +3,8 @@ module Gitlab class FileImporter include Gitlab::ImportExport::CommandLineUtil + MAX_RETRIES = 8 + def self.import(*args) new(*args).import end @@ -14,7 +16,10 @@ module Gitlab def import FileUtils.mkdir_p(@shared.export_path) - decompress_archive + + wait_for_archived_file do + decompress_archive + end rescue => e @shared.error(e) false @@ -22,6 +27,19 @@ module Gitlab private + # Exponentially sleep until I/O finishes copying the file + def wait_for_archived_file + MAX_RETRIES.times do |retry_number| + if File.exist?(@archive_file) + yield + + break + else + sleep(2**retry_number) + end + end + end + def decompress_archive result = untar_zxf(archive: @archive_file, dir: @shared.export_path) |