Skip to content

Commit

Permalink
🐛 Fix FileSet csv rows for AF imports (#954)
Browse files Browse the repository at this point in the history
This commit will fix the functionality for adding a FileSet row in the
CSV to add additional metadata to FileSets.  The problem was located in
`Bulkrax::ObjectFactory#create_file_set`.  When it tries to find a
record, it actually comes back as a `FalseClass` because of the new
logic introduced recently which breaks further down.  If we add raise an
error in our `Bulkrax::ImportFileSetJob#find_parent_record` which is at
a higher point than before, then we can requeue the job and check again.
If the parent record is created by then, we will execute the rest of the
job.
  • Loading branch information
kirkkwang authored May 10, 2024
1 parent bf7bc5c commit 0de8ee0
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,14 +48,9 @@ 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)
case parent_record
when Bulkrax.collection_model_class, Bulkrax.file_model_class
Expand All @@ -72,6 +61,18 @@ def check_parent_is_a_work!(parent_identifier)

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 0de8ee0

Please sign in to comment.