summaryrefslogtreecommitdiff
path: root/lib/backup/manager.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/backup/manager.rb')
-rw-r--r--lib/backup/manager.rb44
1 files changed, 28 insertions, 16 deletions
diff --git a/lib/backup/manager.rb b/lib/backup/manager.rb
index 16b8f21c9e9..902eb8f6659 100644
--- a/lib/backup/manager.rb
+++ b/lib/backup/manager.rb
@@ -22,6 +22,7 @@ module Backup
:destination_optional, # `true` if the destination might not exist on a successful backup.
:cleanup_path, # Path to remove after a successful backup. Uses `destination_path` when not specified.
:task,
+ :task_group,
keyword_init: true
) do
def enabled?
@@ -33,11 +34,7 @@ module Backup
def initialize(progress, definitions: nil)
@progress = progress
-
- @incremental = Feature.feature_flags_available? &&
- Feature.enabled?(:incremental_repository_backup) &&
- Gitlab::Utils.to_boolean(ENV['INCREMENTAL'], default: false)
-
+ @incremental = Gitlab::Utils.to_boolean(ENV['INCREMENTAL'], default: false)
@definitions = definitions
end
@@ -122,13 +119,22 @@ module Backup
@definitions ||= build_definitions
end
- def build_definitions
+ def build_definitions # rubocop:disable Metrics/AbcSize
{
- 'db' => TaskDefinition.new(
- human_name: _('database'),
+ 'main_db' => TaskDefinition.new(
+ human_name: _('main_database'),
destination_path: 'db/database.sql.gz',
cleanup_path: 'db',
- task: build_db_task
+ task: build_db_task(:main),
+ task_group: 'db'
+ ),
+ 'ci_db' => TaskDefinition.new(
+ human_name: _('ci_database'),
+ destination_path: 'db/ci_database.sql.gz',
+ cleanup_path: 'db',
+ task: build_db_task(:ci),
+ enabled: Gitlab::Database.has_config?(:ci),
+ task_group: 'db'
),
'repositories' => TaskDefinition.new(
human_name: _('repositories'),
@@ -180,10 +186,11 @@ module Backup
}.freeze
end
- def build_db_task
- force = Gitlab::Utils.to_boolean(ENV['force'], default: false)
+ def build_db_task(database_name)
+ return unless Gitlab::Database.has_config?(database_name) # It will be disabled for a single db setup
- Database.new(progress, force: force)
+ force = Gitlab::Utils.to_boolean(ENV['force'], default: false)
+ Database.new(database_name, progress, force: force)
end
def build_repositories_task
@@ -233,7 +240,9 @@ module Backup
verify_backup_version
definitions.keys.each do |task_name|
- run_restore_task(task_name) if !skipped?(task_name) && enabled_task?(task_name)
+ if !skipped?(task_name) && enabled_task?(task_name)
+ run_restore_task(task_name)
+ end
end
Rake::Task['gitlab:shell:setup'].invoke
@@ -254,7 +263,9 @@ module Backup
def write_backup_information
# Make sure there is a connection
- ActiveRecord::Base.connection.reconnect!
+ ::Gitlab::Database.database_base_models.values.each do |base_model|
+ base_model.connection.reconnect!
+ end
Dir.chdir(backup_path) do
File.open("#{backup_path}/#{MANIFEST_NAME}", "w+") do |file|
@@ -472,7 +483,7 @@ module Backup
end
def skipped?(item)
- skipped.include?(item)
+ skipped.include?(item) || skipped.include?(definitions[item]&.task_group)
end
def skipped
@@ -483,6 +494,7 @@ module Backup
list = ENV.fetch(LIST_ENVS[name], '').split(',')
list += backup_information[name].split(',') if backup_information[name]
list.uniq!
+ list.compact!
list
end
@@ -507,7 +519,7 @@ module Backup
end
def available_timestamps
- @backup_file_list.map {|item| item.gsub("#{FILE_NAME_SUFFIX}", "")}
+ @backup_file_list.map { |item| item.gsub("#{FILE_NAME_SUFFIX}", "") }
end
def object_storage_config