From ea953c9c0e24fb0a44441b11a52f5c33e7aff761 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9gis=20Hanol?= Date: Fri, 14 Mar 2014 15:49:35 +0100 Subject: [PATCH] BUGFIX: only wait for jobs of the current_site when backing up --- lib/export/exporter.rb | 21 +++++++++++++++------ lib/import/importer.rb | 19 ++++++++++++++----- 2 files changed, 29 insertions(+), 11 deletions(-) diff --git a/lib/export/exporter.rb b/lib/export/exporter.rb index 122d8407998..6b2de492aaa 100644 --- a/lib/export/exporter.rb +++ b/lib/export/exporter.rb @@ -104,16 +104,25 @@ module Export def wait_for_sidekiq log "Waiting for sidekiq to finish running jobs..." - iterations = 0 - workers = Sidekiq::Workers.new - while (running = workers.size) > 0 - log " Waiting for #{running} jobs..." - sleep 2 + iterations = 1 + while sidekiq_has_running_jobs? + log "Waiting for sidekiq to finish running jobs... ##{iterations}" + sleep 5 iterations += 1 - raise "Sidekiq did not finish running all the jobs in the allowed time!" if iterations >= 15 + raise "Sidekiq did not finish running all the jobs in the allowed time!" if iterations > 6 end end + def sidekiq_has_running_jobs? + Sidekiq::Workers.new.each do |process_id, thread_id, worker| + payload = worker.try(:payload) + return true if payload.try(:all_sites) + return true if payload.try(:current_site_id) == @current_db + end + + false + end + def write_metadata log "Writing metadata to '#{@meta_filename}'..." metadata = { diff --git a/lib/import/importer.rb b/lib/import/importer.rb index 21f6cfe91e2..1eb509b2fca 100644 --- a/lib/import/importer.rb +++ b/lib/import/importer.rb @@ -123,16 +123,25 @@ module Import def wait_for_sidekiq log "Waiting for sidekiq to finish running jobs..." - iterations = 0 - workers = Sidekiq::Workers.new - while (running = workers.size) > 0 - log " Waiting for #{running} jobs..." + iterations = 1 + while sidekiq_has_running_jobs? + log "Waiting for sidekiq to finish running jobs... ##{iterations}" sleep 5 iterations += 1 - raise "Sidekiq did not finish running all the jobs in the allowed time!" if iterations >= 20 + raise "Sidekiq did not finish running all the jobs in the allowed time!" if iterations > 6 end end + def sidekiq_has_running_jobs? + Sidekiq::Workers.new.each do |process_id, thread_id, worker| + payload = worker.try(:payload) + return true if payload.try(:all_sites) + return true if payload.try(:current_site_id) == @current_db + end + + false + end + def copy_archive_to_tmp_directory log "Copying archive to tmp directory..." source = File.join(Backup.base_directory, @filename)