diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2023-08-18 13:50:51 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2023-08-18 13:50:51 +0300 |
commit | db384e6b19af03b4c3c82a5760d83a3fd79f7982 (patch) | |
tree | 34beaef37df5f47ccbcf5729d7583aae093cffa0 /lib/backup | |
parent | 54fd7b1bad233e3944434da91d257fa7f63c3996 (diff) |
Add latest changes from gitlab-org/gitlab@16-3-stable-eev16.3.0-rc42
Diffstat (limited to 'lib/backup')
-rw-r--r-- | lib/backup/gitaly_backup.rb | 72 | ||||
-rw-r--r-- | lib/backup/manager.rb | 10 |
2 files changed, 56 insertions, 26 deletions
diff --git a/lib/backup/gitaly_backup.rb b/lib/backup/gitaly_backup.rb index 53c998efd71..5b55c2cbdf7 100644 --- a/lib/backup/gitaly_backup.rb +++ b/lib/backup/gitaly_backup.rb @@ -10,11 +10,13 @@ module Backup # @param [Integer] max_parallelism max parallelism when running backups # @param [Integer] storage_parallelism max parallelism per storage (is affected by max_parallelism) # @param [Boolean] incremental if incremental backups should be created. - def initialize(progress, max_parallelism: nil, storage_parallelism: nil, incremental: false) + # @param [Boolean] server_side if server-side backups should be used. + def initialize(progress, max_parallelism: nil, storage_parallelism: nil, incremental: false, server_side: false) @progress = progress @max_parallelism = max_parallelism @storage_parallelism = storage_parallelism @incremental = incremental + @server_side = server_side end def start(type, backup_repos_path, backup_id: nil, remove_all_repositories: nil) @@ -24,28 +26,11 @@ module Backup FileUtils.rm_rf(backup_repos_path) end - command = case type - when :create - 'create' - when :restore - 'restore' - else - raise Error, "unknown backup type: #{type}" - end - - args = ['-layout', 'pointer'] - args += ['-parallel', @max_parallelism.to_s] if @max_parallelism - args += ['-parallel-storage', @storage_parallelism.to_s] if @storage_parallelism - - case type - when :create - args += ['-incremental'] if incremental? - args += ['-id', backup_id] if backup_id - when :restore - args += ['-remove-all-repositories', remove_all_repositories.join(',')] if remove_all_repositories - end - - @input_stream, stdout, @thread = Open3.popen2(build_env, bin_path, command, '-path', backup_repos_path, *args) + @input_stream, stdout, @thread = Open3.popen2( + build_env, + bin_path, + *gitaly_backup_args(type, backup_repos_path, backup_id, remove_all_repositories) + ) @out_reader = Thread.new do IO.copy_stream(stdout, @progress) @@ -78,6 +63,41 @@ module Backup @incremental end + def server_side? + @server_side + end + + def gitaly_backup_args(type, backup_repos_path, backup_id, remove_all_repositories) + command = case type + when :create + 'create' + when :restore + 'restore' + else + raise Error, "unknown backup type: #{type}" + end + + args = [command] + if server_side? + ['-server-side'] + else + ['-path', backup_repos_path, '-layout', 'pointer'] + end + + args += ['-parallel', @max_parallelism.to_s] if @max_parallelism + args += ['-parallel-storage', @storage_parallelism.to_s] if @storage_parallelism + + case type + when :create + args += ['-incremental'] if incremental? + args += ['-id', backup_id] if backup_id + when :restore + args += ['-remove-all-repositories', remove_all_repositories.join(',')] if remove_all_repositories + args += ['-id', backup_id] if backup_id && server_side? + end + + args + end + # Schedule a new backup job through a non-blocking JSON based pipe protocol # # @see https://gitlab.com/gitlab-org/gitaly/-/blob/master/doc/gitaly-backup.md @@ -107,7 +127,11 @@ module Backup 'SSL_CERT_FILE' => Gitlab::X509::Certificate.default_cert_file, 'SSL_CERT_DIR' => Gitlab::X509::Certificate.default_cert_dir, 'GITALY_SERVERS' => gitaly_servers_encoded - }.merge(ENV) + }.merge(current_env) + end + + def current_env + ENV end def started? diff --git a/lib/backup/manager.rb b/lib/backup/manager.rb index d56f852b23c..60239781926 100644 --- a/lib/backup/manager.rb +++ b/lib/backup/manager.rb @@ -195,7 +195,12 @@ module Backup def build_repositories_task max_concurrency = ENV['GITLAB_BACKUP_MAX_CONCURRENCY'].presence&.to_i max_storage_concurrency = ENV['GITLAB_BACKUP_MAX_STORAGE_CONCURRENCY'].presence&.to_i - strategy = Backup::GitalyBackup.new(progress, incremental: incremental?, max_parallelism: max_concurrency, storage_parallelism: max_storage_concurrency) + strategy = Backup::GitalyBackup.new(progress, + incremental: incremental?, + max_parallelism: max_concurrency, + storage_parallelism: max_storage_concurrency, + server_side: backup_information[:repositories_server_side] + ) Repositories.new(progress, strategy: strategy, @@ -286,7 +291,8 @@ module Backup skipped: ENV['SKIP'], repositories_storages: ENV['REPOSITORIES_STORAGES'], repositories_paths: ENV['REPOSITORIES_PATHS'], - skip_repositories_paths: ENV['SKIP_REPOSITORIES_PATHS'] + skip_repositories_paths: ENV['SKIP_REPOSITORIES_PATHS'], + repositories_server_side: Gitlab::Utils.to_boolean(ENV['REPOSITORIES_SERVER_SIDE'], default: false) } end |