diff options
| author | Robert | 2017-07-27 18:21:59 +0200 |
|---|---|---|
| committer | Robert | 2017-07-27 22:28:22 +0200 |
| commit | aa5028a21f28a2bee9f64b5e87e70828c9c8b75f (patch) | |
| tree | ec36385cad327418b8ec755f8df67487e2a87ca8 /app/workers | |
| parent | cbfa054cf35a2e81790e9c83f6edc2b3ff58ae84 (diff) | |
| download | chouette-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.rb | 21 |
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 |
