2022-10-11 01:57:18 +05:30
|
|
|
# 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
|
2023-03-04 22:38:38 +05:30
|
|
|
desc 'Retrieve a batched background migration' do
|
|
|
|
success ::API::Entities::BatchedBackgroundMigration
|
|
|
|
failure [
|
|
|
|
{ code: 401, message: '401 Unauthorized' },
|
|
|
|
{ code: 403, message: '403 Forbidden' },
|
|
|
|
{ code: 404, message: '404 Not found' }
|
|
|
|
]
|
|
|
|
tags %w[batched_background_migrations]
|
|
|
|
end
|
2022-10-11 01:57:18 +05:30
|
|
|
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
|
2023-03-04 22:38:38 +05:30
|
|
|
desc 'Get the list of batched background migrations' do
|
|
|
|
success ::API::Entities::BatchedBackgroundMigration
|
|
|
|
failure [
|
|
|
|
{ code: 401, message: '401 Unauthorized' },
|
|
|
|
{ code: 403, message: '403 Forbidden' }
|
|
|
|
]
|
|
|
|
is_array true
|
|
|
|
tags %w[batched_background_migrations]
|
|
|
|
end
|
2022-10-11 01:57:18 +05:30
|
|
|
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
|
2023-03-04 22:38:38 +05:30
|
|
|
desc 'Resume a batched background migration' do
|
|
|
|
success ::API::Entities::BatchedBackgroundMigration
|
|
|
|
failure [
|
|
|
|
{ code: 401, message: '401 Unauthorized' },
|
|
|
|
{ code: 403, message: '403 Forbidden' },
|
|
|
|
{ code: 404, message: '404 Not found' },
|
|
|
|
{ code: 422, message: 'You can resume only `paused` batched background migrations.' }
|
|
|
|
]
|
|
|
|
tags %w[batched_background_migrations]
|
|
|
|
end
|
2022-10-11 01:57:18 +05:30
|
|
|
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
|
2022-11-25 23:54:43 +05:30
|
|
|
unless batched_background_migration.paused?
|
|
|
|
msg = 'You can resume only `paused` batched background migrations.'
|
|
|
|
render_api_error!(msg, 422)
|
|
|
|
end
|
|
|
|
|
2022-10-11 01:57:18 +05:30
|
|
|
batched_background_migration.execute!
|
|
|
|
present_entity(batched_background_migration)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
resources 'batched_background_migrations/:id/pause' do
|
2023-03-04 22:38:38 +05:30
|
|
|
desc 'Pause a batched background migration' do
|
|
|
|
success ::API::Entities::BatchedBackgroundMigration
|
|
|
|
failure [
|
|
|
|
{ code: 401, message: '401 Unauthorized' },
|
|
|
|
{ code: 403, message: '403 Forbidden' },
|
|
|
|
{ code: 404, message: '404 Not found' },
|
|
|
|
{ code: 422, message: 'You can pause only `active` batched background migrations.' }
|
|
|
|
]
|
|
|
|
tags %w[batched_background_migrations]
|
|
|
|
end
|
2022-10-11 01:57:18 +05:30
|
|
|
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
|
2022-11-25 23:54:43 +05:30
|
|
|
unless batched_background_migration.active?
|
|
|
|
msg = 'You can pause only `active` batched background migrations.'
|
|
|
|
render_api_error!(msg, 422)
|
|
|
|
end
|
|
|
|
|
2022-10-11 01:57:18 +05:30
|
|
|
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
|