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:
authorGitLab Bot <gitlab-bot@gitlab.com>2022-06-20 14:10:13 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2022-06-20 14:10:13 +0300
commit0ea3fcec397b69815975647f5e2aa5fe944a8486 (patch)
tree7979381b89d26011bcf9bdc989a40fcc2f1ed4ff /app/workers/container_registry
parent72123183a20411a36d607d70b12d57c484394c8e (diff)
Add latest changes from gitlab-org/gitlab@15-1-stable-eev15.1.0-rc42
Diffstat (limited to 'app/workers/container_registry')
-rw-r--r--app/workers/container_registry/migration/enqueuer_worker.rb57
-rw-r--r--app/workers/container_registry/migration/guard_worker.rb31
2 files changed, 22 insertions, 66 deletions
diff --git a/app/workers/container_registry/migration/enqueuer_worker.rb b/app/workers/container_registry/migration/enqueuer_worker.rb
index a0babb98e82..f3c8dfa63ad 100644
--- a/app/workers/container_registry/migration/enqueuer_worker.rb
+++ b/app/workers/container_registry/migration/enqueuer_worker.rb
@@ -17,19 +17,8 @@ module ContainerRegistry
idempotent!
def perform
- migration.enqueuer_loop? ? perform_with_loop : perform_without_loop
- end
-
- def self.enqueue_a_job
- perform_async
- perform_in(7.seconds) if ::ContainerRegistry::Migration.enqueue_twice?
- end
-
- private
-
- def perform_with_loop
try_obtain_lease do
- while runnable? && Time.zone.now < loop_deadline && migration.enqueuer_loop?
+ while runnable? && Time.zone.now < loop_deadline
repository_handled = handle_aborted_migration || handle_next_migration
# no repository was found: stop the loop
@@ -43,40 +32,29 @@ module ContainerRegistry
end
end
- def perform_without_loop
- re_enqueue = false
- try_obtain_lease do
- break unless runnable?
-
- re_enqueue = handle_aborted_migration || handle_next_migration
- end
- re_enqueue_if_capacity if re_enqueue
+ def self.enqueue_a_job
+ perform_async
end
+ private
+
def handle_aborted_migration
return unless next_aborted_repository
- log_on_done(:import_type, 'retry')
- log_repository(next_aborted_repository)
-
next_aborted_repository.retry_aborted_migration
true
rescue StandardError => e
Gitlab::ErrorTracking.log_exception(e, next_aborted_repository_id: next_aborted_repository&.id)
- migration.enqueuer_loop? ? false : true
+ false
ensure
- log_repository_migration_state(next_aborted_repository)
log_repository_info(next_aborted_repository, import_type: 'retry')
end
def handle_next_migration
return unless next_repository
- log_on_done(:import_type, 'next')
- log_repository(next_repository)
-
# We return true because the repository was successfully processed (migration_state is changed)
return true if tag_count_too_high?
return unless next_repository.start_pre_import
@@ -88,7 +66,6 @@ module ContainerRegistry
false
ensure
- log_repository_migration_state(next_repository)
log_repository_info(next_repository, import_type: 'next')
end
@@ -97,8 +74,6 @@ module ContainerRegistry
return false unless next_repository.tags_count > migration.max_tags_count
next_repository.skip_import(reason: :too_many_tags)
- log_on_done(:tags_count_too_high, true)
- log_on_done(:max_tags_count_setting, migration.max_tags_count)
true
end
@@ -160,7 +135,7 @@ module ContainerRegistry
def next_aborted_repository
strong_memoize(:next_aborted_repository) do
- ContainerRepository.with_migration_state('import_aborted').take # rubocop:disable CodeReuse/ActiveRecord
+ ContainerRepository.with_migration_state('import_aborted').limit(2)[0] # rubocop:disable CodeReuse/ActiveRecord
end
end
@@ -180,29 +155,11 @@ module ContainerRegistry
self.class.enqueue_a_job
end
- def log_repository(repository)
- log_on_done(:container_repository_id, repository&.id)
- log_on_done(:container_repository_path, repository&.path)
- end
-
- def log_repository_migration_state(repository)
- return unless repository
-
- log_on_done(:container_repository_migration_state, repository.migration_state)
- end
-
- def log_on_done(key, value)
- return if migration.enqueuer_loop?
-
- log_extra_metadata_on_done(key, value)
- end
-
def log_info(extras)
logger.info(structured_payload(extras))
end
def log_repository_info(repository, extras = {})
- return unless migration.enqueuer_loop?
return unless repository
repository_info = {
diff --git a/app/workers/container_registry/migration/guard_worker.rb b/app/workers/container_registry/migration/guard_worker.rb
index 1111061a89b..ae29106b502 100644
--- a/app/workers/container_registry/migration/guard_worker.rb
+++ b/app/workers/container_registry/migration/guard_worker.rb
@@ -22,7 +22,7 @@ module ContainerRegistry
repositories = ::ContainerRepository.with_stale_migration(step_before_timestamp)
.limit(max_capacity)
aborts_count = 0
- long_running_migration_ids = []
+ long_running_migrations = []
# the #to_a is safe as the amount of entries is limited.
# In addition, we're calling #each in the next line and we don't want two different SQL queries for these two lines
@@ -32,7 +32,7 @@ module ContainerRegistry
if actively_importing?(repository)
# if a repository is actively importing but not yet long_running, do nothing
if long_running_migration?(repository)
- long_running_migration_ids << repository.id
+ long_running_migrations << repository
cancel_long_running_migration(repository)
aborts_count += 1
end
@@ -44,8 +44,9 @@ module ContainerRegistry
log_extra_metadata_on_done(:aborted_stale_migrations_count, aborts_count)
- if long_running_migration_ids.any?
- log_extra_metadata_on_done(:aborted_long_running_migration_ids, long_running_migration_ids)
+ if long_running_migrations.any?
+ log_extra_metadata_on_done(:aborted_long_running_migration_ids, long_running_migrations.map(&:id))
+ log_extra_metadata_on_done(:aborted_long_running_migration_paths, long_running_migrations.map(&:path))
end
end
@@ -64,14 +65,16 @@ module ContainerRegistry
end
def long_running_migration?(repository)
- timeout = long_running_migration_threshold
-
- if Feature.enabled?(:registry_migration_guard_thresholds)
- timeout = if repository.migration_state == 'pre_importing'
- migration.pre_import_timeout.seconds
- else
- migration.import_timeout.seconds
- end
+ timeout = if repository.migration_state == 'pre_importing'
+ migration.pre_import_timeout.seconds
+ else
+ migration.import_timeout.seconds
+ end
+
+ if repository.migration_state == 'pre_importing' &&
+ Feature.enabled?(:registry_migration_guard_dynamic_pre_import_timeout) &&
+ migration_start_timestamp(repository).before?(timeout.ago)
+ timeout = migration.dynamic_pre_import_timeout_for(repository)
end
migration_start_timestamp(repository).before?(timeout.ago)
@@ -106,10 +109,6 @@ module ContainerRegistry
::ContainerRegistry::Migration
end
- def long_running_migration_threshold
- @threshold ||= 10.minutes
- end
-
def cancel_long_running_migration(repository)
result = repository.migration_cancel