online_migrations 0.26.0 → 0.27.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +18 -0
- data/docs/0.27-upgrade.md +24 -0
- data/docs/background_data_migrations.md +200 -101
- data/docs/background_schema_migrations.md +2 -2
- data/lib/generators/online_migrations/{background_migration_generator.rb → data_migration_generator.rb} +4 -4
- data/lib/generators/online_migrations/templates/change_background_data_migrations.rb.tt +34 -0
- data/lib/generators/online_migrations/templates/{background_data_migration.rb.tt → data_migration.rb.tt} +8 -9
- data/lib/generators/online_migrations/templates/initializer.rb.tt +19 -25
- data/lib/generators/online_migrations/templates/install_migration.rb.tt +9 -40
- data/lib/generators/online_migrations/upgrade_generator.rb +16 -8
- data/lib/online_migrations/active_record_batch_enumerator.rb +8 -0
- data/lib/online_migrations/background_data_migrations/backfill_column.rb +50 -0
- data/lib/online_migrations/background_data_migrations/config.rb +62 -0
- data/lib/online_migrations/{background_migrations → background_data_migrations}/copy_column.rb +15 -28
- data/lib/online_migrations/{background_migrations → background_data_migrations}/delete_associated_records.rb +9 -5
- data/lib/online_migrations/{background_migrations → background_data_migrations}/delete_orphaned_records.rb +5 -9
- data/lib/online_migrations/background_data_migrations/migration.rb +312 -0
- data/lib/online_migrations/{background_migrations → background_data_migrations}/migration_helpers.rb +72 -61
- data/lib/online_migrations/background_data_migrations/migration_job.rb +160 -0
- data/lib/online_migrations/background_data_migrations/migration_status_validator.rb +65 -0
- data/lib/online_migrations/{background_migrations → background_data_migrations}/perform_action_on_relation.rb +5 -5
- data/lib/online_migrations/{background_migrations → background_data_migrations}/reset_counters.rb +5 -5
- data/lib/online_migrations/background_data_migrations/scheduler.rb +78 -0
- data/lib/online_migrations/background_data_migrations/ticker.rb +62 -0
- data/lib/online_migrations/background_schema_migrations/config.rb +2 -2
- data/lib/online_migrations/background_schema_migrations/migration.rb +51 -123
- data/lib/online_migrations/background_schema_migrations/migration_helpers.rb +25 -46
- data/lib/online_migrations/background_schema_migrations/migration_runner.rb +43 -97
- data/lib/online_migrations/background_schema_migrations/scheduler.rb +2 -2
- data/lib/online_migrations/change_column_type_helpers.rb +17 -4
- data/lib/online_migrations/config.rb +4 -4
- data/lib/online_migrations/data_migration.rb +127 -0
- data/lib/online_migrations/error_messages.rb +2 -0
- data/lib/online_migrations/lock_retrier.rb +5 -2
- data/lib/online_migrations/schema_statements.rb +1 -1
- data/lib/online_migrations/shard_aware.rb +44 -0
- data/lib/online_migrations/version.rb +1 -1
- data/lib/online_migrations.rb +18 -11
- metadata +22 -21
- data/lib/online_migrations/background_migration.rb +0 -64
- data/lib/online_migrations/background_migrations/backfill_column.rb +0 -54
- data/lib/online_migrations/background_migrations/background_migration_class_validator.rb +0 -29
- data/lib/online_migrations/background_migrations/config.rb +0 -74
- data/lib/online_migrations/background_migrations/migration.rb +0 -329
- data/lib/online_migrations/background_migrations/migration_job.rb +0 -109
- data/lib/online_migrations/background_migrations/migration_job_runner.rb +0 -66
- data/lib/online_migrations/background_migrations/migration_job_status_validator.rb +0 -29
- data/lib/online_migrations/background_migrations/migration_runner.rb +0 -161
- data/lib/online_migrations/background_migrations/migration_status_validator.rb +0 -48
- data/lib/online_migrations/background_migrations/scheduler.rb +0 -42
@@ -1,48 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module OnlineMigrations
|
4
|
-
module BackgroundMigrations
|
5
|
-
# @private
|
6
|
-
class MigrationStatusValidator < ActiveModel::Validator
|
7
|
-
VALID_STATUS_TRANSITIONS = {
|
8
|
-
# enqueued -> running occurs when the migration starts performing.
|
9
|
-
# enqueued -> paused occurs when the migration is paused before starting.
|
10
|
-
"enqueued" => ["running", "paused", "cancelled"],
|
11
|
-
# running -> paused occurs when a user pauses the migration as
|
12
|
-
# it's performing.
|
13
|
-
# running -> finishing occurs when a user manually finishes the migration.
|
14
|
-
# running -> succeeded occurs when the migration completes successfully.
|
15
|
-
# running -> failed occurs when the migration raises an exception when running.
|
16
|
-
"running" => [
|
17
|
-
"paused",
|
18
|
-
"finishing",
|
19
|
-
"succeeded",
|
20
|
-
"failed",
|
21
|
-
"cancelled",
|
22
|
-
],
|
23
|
-
# finishing -> succeeded occurs when the migration completes successfully.
|
24
|
-
# finishing -> failed occurs when the migration raises an exception when running.
|
25
|
-
"finishing" => ["succeeded", "failed", "cancelled"],
|
26
|
-
# paused -> running occurs when the migration is resumed after being paused.
|
27
|
-
"paused" => ["running", "cancelled"],
|
28
|
-
# failed -> enqueued occurs when the failed migration jobs are retried after being failed.
|
29
|
-
# failed -> running occurs when the failed migration is retried.
|
30
|
-
"failed" => ["enqueued", "running", "cancelled"],
|
31
|
-
}
|
32
|
-
|
33
|
-
def validate(record)
|
34
|
-
return if !record.status_changed?
|
35
|
-
|
36
|
-
previous_status, new_status = record.status_change
|
37
|
-
valid_new_statuses = VALID_STATUS_TRANSITIONS.fetch(previous_status, [])
|
38
|
-
|
39
|
-
if !valid_new_statuses.include?(new_status)
|
40
|
-
record.errors.add(
|
41
|
-
:status,
|
42
|
-
"cannot transition background migration from status #{previous_status} to #{new_status}"
|
43
|
-
)
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
@@ -1,42 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module OnlineMigrations
|
4
|
-
module BackgroundMigrations
|
5
|
-
# Class responsible for scheduling background migrations.
|
6
|
-
#
|
7
|
-
# It selects a single runnable background migration and runs it one step (one batch) at a time.
|
8
|
-
# A migration is considered runnable if it is not completed and the time interval between
|
9
|
-
# successive runs has passed.
|
10
|
-
#
|
11
|
-
# Scheduler should be configured to run periodically, for example, via cron.
|
12
|
-
#
|
13
|
-
# @example Run via whenever
|
14
|
-
# # add this to schedule.rb
|
15
|
-
# every 1.minute do
|
16
|
-
# runner "OnlineMigrations.run_background_data_migrations"
|
17
|
-
# end
|
18
|
-
#
|
19
|
-
# @example Run via whenever (specific shard)
|
20
|
-
# every 1.minute do
|
21
|
-
# runner "OnlineMigrations.run_background_data_migrations(shard: :shard_two)"
|
22
|
-
# end
|
23
|
-
#
|
24
|
-
class Scheduler
|
25
|
-
def self.run(**options)
|
26
|
-
new.run(**options)
|
27
|
-
end
|
28
|
-
|
29
|
-
# Runs Scheduler
|
30
|
-
def run(**options)
|
31
|
-
active_migrations = Migration.runnable.active.queue_order
|
32
|
-
active_migrations = active_migrations.where(shard: options[:shard]) if options.key?(:shard)
|
33
|
-
runnable_migration = active_migrations.select(&:interval_elapsed?).first
|
34
|
-
|
35
|
-
if runnable_migration
|
36
|
-
runner = MigrationRunner.new(runnable_migration)
|
37
|
-
runner.run_migration_job
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|