Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'lib/gitlab/database/background_migration/batched_migration.rb')
-rw-r--r--lib/gitlab/database/background_migration/batched_migration.rb14
1 files changed, 12 insertions, 2 deletions
diff --git a/lib/gitlab/database/background_migration/batched_migration.rb b/lib/gitlab/database/background_migration/batched_migration.rb
index 6aed1eed994..45f52765d0f 100644
--- a/lib/gitlab/database/background_migration/batched_migration.rb
+++ b/lib/gitlab/database/background_migration/batched_migration.rb
@@ -8,6 +8,7 @@ module Gitlab
BATCH_CLASS_MODULE = "#{JOB_CLASS_MODULE}::BatchingStrategies"
MAXIMUM_FAILED_RATIO = 0.5
MINIMUM_JOBS = 50
+ FINISHED_PROGRESS_VALUE = 100
self.table_name = :batched_background_migrations
@@ -24,6 +25,7 @@ module Gitlab
scope :queue_order, -> { order(id: :asc) }
scope :queued, -> { with_statuses(:active, :paused) }
+ scope :ordered_by_created_at_desc, -> { order(created_at: :desc) }
# on_hold_until is a temporary runtime status which puts execution "on hold"
scope :executable, -> { with_status(:active).where('on_hold_until IS NULL OR on_hold_until < NOW()') }
@@ -57,11 +59,11 @@ module Gitlab
state :finalizing, value: 5
event :pause do
- transition any => :paused
+ transition [:active, :paused] => :paused
end
event :execute do
- transition any => :active
+ transition [:active, :paused, :failed] => :active
end
event :finish do
@@ -231,7 +233,15 @@ module Gitlab
"BatchedMigration[id: #{id}]"
end
+ # Computes an estimation of the progress of the migration in percents.
+ #
+ # Because `total_tuple_count` is an estimation of the tuples based on DB statistics
+ # when the migration is complete there can actually be more or less tuples that initially
+ # estimated as `total_tuple_count` so the progress may not show 100%. For that reason when
+ # we know migration completed successfully, we just return the 100 value
def progress
+ return FINISHED_PROGRESS_VALUE if finished?
+
return unless total_tuple_count.to_i > 0
100 * migrated_tuple_count / total_tuple_count