Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2023-08-18 13:50:51 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2023-08-18 13:50:51 +0300
commitdb384e6b19af03b4c3c82a5760d83a3fd79f7982 (patch)
tree34beaef37df5f47ccbcf5729d7583aae093cffa0 /lib/backup
parent54fd7b1bad233e3944434da91d257fa7f63c3996 (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.rb72
-rw-r--r--lib/backup/manager.rb10
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