60 lines
2.2 KiB
Ruby
60 lines
2.2 KiB
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
class CreateBackgroundMigrationTrackingTables < ActiveRecord::Migration[6.0]
|
||
|
include Gitlab::Database::MigrationHelpers
|
||
|
|
||
|
DOWNTIME = false
|
||
|
|
||
|
def change
|
||
|
create_table_with_constraints :batched_background_migrations do |t|
|
||
|
t.timestamps_with_timezone
|
||
|
t.bigint :min_value, null: false, default: 1
|
||
|
t.bigint :max_value, null: false
|
||
|
t.integer :batch_size, null: false
|
||
|
t.integer :sub_batch_size, null: false
|
||
|
t.integer :interval, limit: 2, null: false
|
||
|
t.integer :status, limit: 2, null: false, default: 0
|
||
|
t.text :job_class_name, null: false
|
||
|
t.text :batch_class_name, null: false,
|
||
|
default: 'Gitlab::Database::BackgroundMigration::PrimaryKeyBatchingStrategy'
|
||
|
t.text :table_name, null: false
|
||
|
t.text :column_name, null: false
|
||
|
t.jsonb :job_arguments, null: false, default: '[]'
|
||
|
|
||
|
t.text_limit :job_class_name, 100
|
||
|
t.text_limit :batch_class_name, 100
|
||
|
t.text_limit :table_name, 63
|
||
|
t.text_limit :column_name, 63
|
||
|
|
||
|
t.check_constraint :check_positive_min_value, 'min_value > 0'
|
||
|
t.check_constraint :check_max_value_in_range, 'max_value >= min_value'
|
||
|
|
||
|
t.check_constraint :check_positive_sub_batch_size, 'sub_batch_size > 0'
|
||
|
t.check_constraint :check_batch_size_in_range, 'batch_size >= sub_batch_size'
|
||
|
|
||
|
t.index %i[job_class_name table_name column_name], name: :index_batched_migrations_on_job_table_and_column_name
|
||
|
end
|
||
|
|
||
|
create_table :batched_background_migration_jobs do |t|
|
||
|
t.timestamps_with_timezone
|
||
|
t.datetime_with_timezone :started_at
|
||
|
t.datetime_with_timezone :finished_at
|
||
|
t.references :batched_background_migration, null: false, index: false, foreign_key: { on_delete: :cascade }
|
||
|
t.bigint :min_value, null: false
|
||
|
t.bigint :max_value, null: false
|
||
|
t.integer :batch_size, null: false
|
||
|
t.integer :sub_batch_size, null: false
|
||
|
t.integer :status, limit: 2, null: false, default: 0
|
||
|
t.integer :attempts, limit: 2, null: false, default: 0
|
||
|
|
||
|
t.index [:batched_background_migration_id, :id], name: :index_batched_jobs_by_batched_migration_id_and_id
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def down
|
||
|
drop_table :batched_background_migration_jobs
|
||
|
|
||
|
drop_table :batched_background_migrations
|
||
|
end
|
||
|
end
|