Skip to content

Commit

Permalink
cherry-pick ImportFileSetJob retry logic from 0de8ee06
Browse files Browse the repository at this point in the history
  • Loading branch information
aploshay committed May 30, 2024
1 parent e00fd94 commit 56c76ad
Showing 1 changed file with 18 additions and 17 deletions.
35 changes: 18 additions & 17 deletions app/jobs/bulkrax/import_file_set_job.rb
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,12 @@ def perform(entry_id, importer_run_id)
# e.g. "parents" or "parents_1"
parent_identifier = (entry.raw_metadata[entry.related_parents_raw_mapping] || entry.raw_metadata["#{entry.related_parents_raw_mapping}_1"])&.strip

validate_parent!(parent_identifier)
begin
validate_parent!(parent_identifier)
rescue MissingParentError => e
handle_retry(entry, importer_run_id, e)
return
end

entry.build
if entry.succeeded?
Expand All @@ -32,17 +37,6 @@ def perform(entry_id, importer_run_id)
entry.save!
entry.importer.current_run = ImporterRun.find(importer_run_id)
entry.importer.record_status

rescue MissingParentError => e
# try waiting for the parent record to be created
entry.import_attempts += 1
entry.save!
if entry.import_attempts < 5
ImportFileSetJob.set(wait: (entry.import_attempts + 1).minutes).perform_later(entry_id, importer_run_id)
else
ImporterRun.decrement_counter(:enqueued_records, importer_run_id) # rubocop:disable Rails/SkipsModelValidations
entry.set_status_info(e)
end
end

private
Expand All @@ -54,21 +48,28 @@ def validate_parent!(parent_identifier)
return if parent_identifier.blank?

find_parent_record(parent_identifier)
check_parent_exists!(parent_identifier)
check_parent_is_a_work!(parent_identifier)
end

def check_parent_exists!(parent_identifier)
raise MissingParentError, %(Unable to find a record with the identifier "#{parent_identifier}") if parent_record.nil?
end

def check_parent_is_a_work!(parent_identifier)
error_msg = %(A record with the ID "#{parent_identifier}" was found, but it was a #{parent_record.class}, which is not an valid/available work type)
raise ::StandardError, error_msg unless curation_concern?(parent_record)
end

def find_parent_record(parent_identifier)
_, @parent_record = find_record(parent_identifier, importer_run_id)
raise MissingParentError, %(Unable to find a record with the identifier "#{parent_identifier}") unless parent_record
end

def handle_retry(entry, importer_run_id, e)
entry.import_attempts += 1
entry.save!
if entry.import_attempts < 5
ImportFileSetJob.set(wait: (entry.import_attempts + 1).minutes).perform_later(entry.id, importer_run_id)
else
ImporterRun.decrement_counter(:enqueued_records, importer_run_id) # rubocop:disable Rails/SkipsModelValidations
entry.set_status_info(e)
end
end
end
end

0 comments on commit 56c76ad

Please sign in to comment.