Skip to content

Commit

Permalink
Merge pull request #6658 from samvera/extract-fault-tolerant-event-ha…
Browse files Browse the repository at this point in the history
…ndling

Extract fault tolerant event handling
  • Loading branch information
dlpierce authored Feb 2, 2024
2 parents ea706b4 + 4c7941a commit 74079d2
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 3 deletions.
2 changes: 1 addition & 1 deletion app/services/hyrax/admin_set_create_service.rb
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ def save_default?
# Create an instance of `Hyrax::AdministrativeSet` with the suggested_id if supported.
# @return [Hyrax::AdministrativeSet] the new admin set
def create_admin_set(suggested_id:, title:)
if suggested_id.blank? || Hyrax.config.disable_wings || !Hyrax.metadata_adapter.is_a?(Wings::Valkyrie::MetadataAdapter)
if suggested_id.blank? || Hyrax.config.disable_wings
# allow persister to assign id
Hyrax::AdministrativeSet.new(title: Array.wrap(title))
else
Expand Down
6 changes: 5 additions & 1 deletion app/services/hyrax/listeners/object_lifecycle_listener.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,11 @@ class ObjectLifecycleListener
# @param [Dry::Events::Event] event
# @return [void]
def on_object_deleted(event)
ContentDeleteEventJob.perform_later(event[:id].to_s, event[:user])
# Accessing a non-existent key on a Dry::Events::Event will raise a KeyError; hence
# we cast the event to a hash
event = event.to_h
object_id = event[:object]&.id || event[:id]
ContentDeleteEventJob.perform_later(object_id.to_s, event[:user])
end

##
Expand Down
3 changes: 2 additions & 1 deletion app/services/hyrax/listeners/trophy_cleanup_listener.rb
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@ class TrophyCleanupListener
# @param [Dry::Events::Event] event
# @return [void]
def on_object_deleted(event)
Trophy.where(work_id: event[:id]).destroy_all
object_id = event[:object]&.id || event[:id]
Trophy.where(work_id: object_id).destroy_all
rescue StandardError => err
Hyrax.logger.warn "Failed to delete trophies for #{event[:id]}. " \
'These trophies might be orphaned.' \
Expand Down
13 changes: 13 additions & 0 deletions app/services/hyrax/listeners/workflow_listener.rb
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ def initialize(factory: Hyrax::Workflow::WorkflowFactory)
# @param [Dry::Events::Event] event
# @return [void]
def on_object_deposited(event)
event = event.to_h
return Hyrax.logger.warn("Skipping workflow initialization for #{event[:object]}; no user is given\n\t#{event}") if
event[:user].blank?

Expand All @@ -30,6 +31,18 @@ def on_object_deposited(event)
# don't error on known sipity error types; log instead
Hyrax.logger.error(err)
end

##
# Called when 'object.deleted' event is published
# @param [Dry::Events::Event] event
# @return [void]
def on_object_deleted(event)
event = event.to_h
return unless event[:object]
gid = Hyrax::ValkyrieGlobalIdProxy.new(resource: event[:object]).to_global_id
return if gid.blank?
Sipity::Entity.where(proxy_for_global_id: gid.to_s).destroy_all
end
end
end
end

0 comments on commit 74079d2

Please sign in to comment.