118 lines
3.9 KiB
Ruby
118 lines
3.9 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module API
|
|
module Admin
|
|
class BatchedBackgroundMigrations < ::API::Base
|
|
feature_category :database
|
|
urgency :low
|
|
|
|
before do
|
|
authenticated_as_admin!
|
|
end
|
|
|
|
namespace 'admin' do
|
|
resources 'batched_background_migrations/:id' do
|
|
desc 'Retrieve a batched background migration'
|
|
params do
|
|
optional :database,
|
|
type: String,
|
|
values: Gitlab::Database.all_database_names,
|
|
desc: 'The name of the database',
|
|
default: 'main'
|
|
requires :id,
|
|
type: Integer,
|
|
desc: 'The batched background migration id'
|
|
end
|
|
get do
|
|
Gitlab::Database::SharedModel.using_connection(base_model.connection) do
|
|
present_entity(batched_background_migration)
|
|
end
|
|
end
|
|
end
|
|
|
|
resources 'batched_background_migrations' do
|
|
desc 'Get the list of the batched background migrations'
|
|
params do
|
|
optional :database,
|
|
type: String,
|
|
values: Gitlab::Database.all_database_names,
|
|
desc: 'The name of the database, the default `main`',
|
|
default: 'main'
|
|
end
|
|
get do
|
|
Gitlab::Database::SharedModel.using_connection(base_model.connection) do
|
|
migrations = Database::BatchedBackgroundMigrationsFinder.new(connection: base_model.connection).execute
|
|
present_entity(migrations)
|
|
end
|
|
end
|
|
end
|
|
|
|
resources 'batched_background_migrations/:id/resume' do
|
|
desc 'Resume a batched background migration'
|
|
params do
|
|
optional :database,
|
|
type: String,
|
|
values: Gitlab::Database.all_database_names,
|
|
desc: 'The name of the database',
|
|
default: 'main'
|
|
requires :id,
|
|
type: Integer,
|
|
desc: 'The batched background migration id'
|
|
end
|
|
put do
|
|
Gitlab::Database::SharedModel.using_connection(base_model.connection) do
|
|
unless batched_background_migration.paused?
|
|
msg = 'You can resume only `paused` batched background migrations.'
|
|
render_api_error!(msg, 422)
|
|
end
|
|
|
|
batched_background_migration.execute!
|
|
present_entity(batched_background_migration)
|
|
end
|
|
end
|
|
end
|
|
|
|
resources 'batched_background_migrations/:id/pause' do
|
|
desc 'Pause a batched background migration'
|
|
params do
|
|
optional :database,
|
|
type: String,
|
|
values: Gitlab::Database.all_database_names,
|
|
desc: 'The name of the database',
|
|
default: 'main'
|
|
requires :id,
|
|
type: Integer,
|
|
desc: 'The batched background migration id'
|
|
end
|
|
put do
|
|
Gitlab::Database::SharedModel.using_connection(base_model.connection) do
|
|
unless batched_background_migration.active?
|
|
msg = 'You can pause only `active` batched background migrations.'
|
|
render_api_error!(msg, 422)
|
|
end
|
|
|
|
batched_background_migration.pause!
|
|
present_entity(batched_background_migration)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
helpers do
|
|
def batched_background_migration
|
|
@batched_background_migration ||= Gitlab::Database::BackgroundMigration::BatchedMigration.find(params[:id])
|
|
end
|
|
|
|
def base_model
|
|
database = params[:database] || Gitlab::Database::MAIN_DATABASE_NAME
|
|
@base_model ||= Gitlab::Database.database_base_models[database]
|
|
end
|
|
|
|
def present_entity(result)
|
|
present result,
|
|
with: ::API::Entities::BatchedBackgroundMigration
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|