From aa5028a21f28a2bee9f64b5e87e70828c9c8b75f Mon Sep 17 00:00:00 2001 From: Robert Date: Thu, 27 Jul 2017 18:21:59 +0200 Subject: Refs: 3507@2.5h; Specing WorkbenchImportWorker failure and DB behavior - speced and implemented Import instance behavior (status, total_steps, current_step) - failure behavior and it's impact to the above --- app/workers/workbench_import_worker.rb | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) (limited to 'app/workers') diff --git a/app/workers/workbench_import_worker.rb b/app/workers/workbench_import_worker.rb index b7668c976..3f3d40a00 100644 --- a/app/workers/workbench_import_worker.rb +++ b/app/workers/workbench_import_worker.rb @@ -11,6 +11,7 @@ class WorkbenchImportWorker def perform(import_id) @import = Import.find(import_id) @response = nil + @import.update_attributes(status: 'running') downloaded = download zip_service = ZipService.new(downloaded) upload zip_service @@ -45,18 +46,24 @@ class WorkbenchImportWorker def try_upload_entry_group eg_name, eg_stream result = execute_post eg_name, eg_stream - return result if result.status < 400 + return result if result && result.status < 400 @response = result.body try_again end def upload zip_service - zip_service.entry_group_streams.each(&method(:upload_entry_group)) - end - - def upload_entry_group key_pair - retry_service = RetryService.new(delay: RETRY_DELAYS, rescue_from: HTTPService::Timeout, &method(:log_failure)) - retry_service.execute(&upload_entry_group_proc(key_pair)) + entry_group_streams = zip_service.entry_group_streams + @import.update_attributes total_steps: entry_group_streams.size + entry_group_streams.each_with_index(&method(:upload_entry_group)) + rescue StopIteration + @import.update_attributes( current_step: entry_group_streams.size, status: 'failed' ) + end + + def upload_entry_group key_pair, element_count + @import.update_attributes( current_step: element_count.succ ) + retry_service = RetryService.new(delays: RETRY_DELAYS, rescue_from: HTTPService::Timeout, &method(:log_failure)) + status, _ = retry_service.execute(&upload_entry_group_proc(key_pair)) + raise StopIteration unless status == :ok end def upload_entry_group_proc key_pair -- cgit v1.2.3