Skip to content
Snippets Groups Projects

Phase 2 enqueuer

Merged Steve Abrams requested to merge 349744-phase2-enqueuer into master
All threads resolved!
Compare and Show latest version
9 files
+ 143
64
Compare changes
  • Side-by-side
  • Inline
Files
9
@@ -13,6 +13,8 @@ class ContainerRepository < ApplicationRecord
ABORTABLE_MIGRATION_STATES = %w[default pre_importing importing].freeze
MIGRATION_STATES = (IDLE_MIGRATION_STATES + ACTIVE_MIGRATION_STATES).freeze
TooManyImportsError = Class.new(StandardError)
belongs_to :project
validates :name, length: { minimum: 0, allow_nil: false }
@@ -138,7 +140,9 @@ class ContainerRepository < ApplicationRecord
end
after_transition any => :pre_importing do |container_repository|
container_repository.abort_import unless container_repository.migration_pre_import == :ok
container_repository.try_import do
container_repository.migration_pre_import
end
end
before_transition pre_importing: :pre_import_done do |container_repository|
@@ -151,7 +155,9 @@ class ContainerRepository < ApplicationRecord
end
after_transition any => :importing do |container_repository|
container_repository.abort_import unless container_repository.migration_import == :ok
container_repository.try_import do
container_repository.migration_import
end
end
before_transition importing: :import_done do |container_repository|
@@ -231,7 +237,7 @@ def abort_import
# it separately here instead of using callbacks
result = super
::ContainerRegistry::Import::EnqueuerWorker.perform_async
::ContainerRegistry::Migration::EnqueuerWorker.perform_async
result
end
@@ -241,11 +247,37 @@ def finish_import
# it separately here instead of using callbacks
result = super
::ContainerRegistry::Import::EnqueuerWorker.perform_async
::ContainerRegistry::Migration::EnqueuerWorker.perform_async
result
end
def try_import
raise ArgumentError, 'block not given' unless block_given?
try_count = 0
begin
try_count += 1
case yield
when :ok
true
when :too_many_imports
raise TooManyImportsError
else
abort_import
false
end
rescue TooManyImportsError
if try_count <= ::ContainerRegistry::Migration.start_max_retries
sleep 0.1 * try_count
retry
else
abort_import
false
end
end
end
# rubocop: disable CodeReuse/ServiceClass
def registry
@registry ||= begin
Loading