diff options
Diffstat (limited to 'app/workers/bulk_imports/stuck_import_worker.rb')
-rw-r--r-- | app/workers/bulk_imports/stuck_import_worker.rb | 35 |
1 files changed, 24 insertions, 11 deletions
diff --git a/app/workers/bulk_imports/stuck_import_worker.rb b/app/workers/bulk_imports/stuck_import_worker.rb index 9f3fe21f1e1..cb4e10a29b2 100644 --- a/app/workers/bulk_imports/stuck_import_worker.rb +++ b/app/workers/bulk_imports/stuck_import_worker.rb @@ -12,22 +12,27 @@ module BulkImports feature_category :importers + # Using Keyset pagination for scopes that involve timestamp indexes def perform - BulkImport.stale.find_each do |import| - logger.error(message: 'BulkImport stale', bulk_import_id: import.id) - import.cleanup_stale + Gitlab::Pagination::Keyset::Iterator.new(scope: bulk_import_scope).each_batch do |imports| + imports.each do |import| + logger.error(message: 'BulkImport stale', bulk_import_id: import.id) + import.cleanup_stale + end end - BulkImports::Entity.includes(:trackers).stale.find_each do |entity| # rubocop: disable CodeReuse/ActiveRecord - ApplicationRecord.transaction do - logger.with_entity(entity).error( - message: 'BulkImports::Entity stale' - ) + Gitlab::Pagination::Keyset::Iterator.new(scope: entity_scope).each_batch do |entities| + entities.each do |entity| + ApplicationRecord.transaction do + logger.with_entity(entity).error( + message: 'BulkImports::Entity stale' + ) - entity.cleanup_stale + entity.cleanup_stale - entity.trackers.find_each do |tracker| - tracker.cleanup_stale + entity.trackers.find_each do |tracker| + tracker.cleanup_stale + end end end end @@ -36,5 +41,13 @@ module BulkImports def logger @logger ||= Logger.build end + + def bulk_import_scope + BulkImport.stale.order_by_updated_at_and_id(:asc) + end + + def entity_scope + BulkImports::Entity.with_trackers.stale.order_by_updated_at_and_id(:asc) + end end end |