aboutsummaryrefslogtreecommitdiffstats
path: root/app/workers
diff options
context:
space:
mode:
authorRobert2017-07-27 18:21:59 +0200
committerRobert2017-07-27 22:28:22 +0200
commitaa5028a21f28a2bee9f64b5e87e70828c9c8b75f (patch)
treeec36385cad327418b8ec755f8df67487e2a87ca8 /app/workers
parentcbfa054cf35a2e81790e9c83f6edc2b3ff58ae84 (diff)
downloadchouette-core-aa5028a21f28a2bee9f64b5e87e70828c9c8b75f.tar.bz2
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
Diffstat (limited to 'app/workers')
-rw-r--r--app/workers/workbench_import_worker.rb21
1 files changed, 14 insertions, 7 deletions
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