-
Notifications
You must be signed in to change notification settings - Fork 119
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix for documentation 2069 #931
Fix for documentation 2069 #931
Conversation
@lucasvanschaik , the code seems reasonable, but the functional tests are failing. Would you mind running the tests locally to see if you can identify the issue? |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Everything here looks fine to me. I was able to generate the error with migrate:rollback
and the errors cleared when the PR was applied with all the microservices appearing to work as expected. Creating a new item using the web UI also triggered the appropriate reactions as well.
Hey, @Islandora/committers, this PR looks good to me, but I want y'all to have a chance to glance at it before I merge, since y'all weren't tagged initially. |
// Make sure that the action is appropriate: | ||
// either system action or with same type as the entity type. | ||
if ($action->getType() === 'system' || $entity->getEntityTypeId() === $action->getType()) { | ||
$action->execute([$entity]); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is there a particular reason to need to limit to these types here? For example, we at dgi have some custom reactions that are more generic but don't utilize a deriver to specify type
s directly that no longer get triggered due to the introduction of this short circuiting while testing this.
There are also some contrib module examples that do not do this as well such as views_bulk_edit and pathauto.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Checking the action type against the entity type prevents the action (meant for node (Islandora object)) to execute on a media.
Does including empty($action->getType()) || $action->getType() === 'entity'
in the if statement solve the issues?
Or is this too crude and should the action itself determine if the action with the given entity can be performed? For example by using the access method of the Action class?
At the moment my understanding of derivers is limited; the code above is meant to make sure that an action is not called with the "wrong" entity type. If there is another way, I'm open to suggestions.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I mean I think the current onus is on the configured conditions to limit when an action is executed.
It doesn't look like access
is leveraged by any of the existing Islandora actions as of current. Given how the majority of the Islandora based actions just pop things on a queue to be processed by microservices at a system
level most access restrictions provided on an individual user/entity won't be relevant.
In normal Drupal land, limiting at the form configuration level would seem like the place to do it and would align with how core tends to operate. That is checking for access when retrieving actions whether it be on the entity query that gets executed or on loadMultiple
and filtered after the fact such as https://git.drupalcode.org/project/drupal/-/blob/9.5.3/core/modules/views/src/Plugin/views/field/BulkForm.php#L120-131 or https://git.drupalcode.org/project/search_api/-/blob/8.x-1.x/src/Plugin/views/field/SearchApiBulkForm.php#L42-49. This form level filtering approach is not feasible imo given how these context reactions are configured to be setup without any entity context until runtime.
I think what you are proposing makes sense in that likely the type
should be checked and used as a filtering factor here given the non-standard usage of Context
and Actions
within Islandora. If this change was to be introduced it'd likely need to be heavily documented and potentially tested as it would be breaking (whether it's introduced in a minor/major release).
Probably would want other @Islandora/committers to chime in here or this may be an issue that should be added to the agenda for an upcoming tech call.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe a simpler solution is better; I understand you reasoning, so why not solve the problem at the location where it appears:
https://github.com/Islandora/islandora/blob/2.x/src/MediaSource/MediaSourceService.php#L99-L101
Here the exception is thrown. But why an exception, why not just return NULL? If the source_field in the source_configuration is not found, then NULL is returned, so why not if the bundle is not found? Returning NULL does not have any (other) negative effects (for so far I can see).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Isn't clear to me how targeting it there helps in this scenario? That is the conditions have already evaluated that an action should be fired and given the forced typification by the MediaSourceService
it should be a media entity I think?
I know you mentioned it's tough to really have reproducible steps but perhaps we could connect in Slack to maybe identify the root of this? I have ran into a scenario before based upon underlying assumptions of context in general that it's meant to be operating on a single page.
That is, take a scenario where you may have multiple contexts/actions triggering within a single thread with different entities being targeted. By its nature Context
doesn't account for this scenario because in page rendering land it should never be encountered. To facilitate this we implemented our own ContextRepository
and the actions that were exhibiting this behavior we moved over to using it (https://github.com/discoverygarden/dgi_actions/blob/1.x/src/ResettableContextRepository.php for reference). As we've unravelled in this thread it's a very hard thing to pinpoint down and reproduce in a more generic sense but perhaps this becomes a catalyst for introducing tests and a potential fix in the event something similar is at play here.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I was able to reproduce the error messages on a starter site box (using the playbook).
- I cloned https://github.com/seth-shaw-asu/migrate_apollo (technically, the precursor, but then I made a bunch of updates which have now been committed back to it)
- I did the module's requisite copy of the data directory and enabling the module. (See the README.)
- I then ran the migrations. That all worked fine, but...
- I ran a migrate rollback which then triggered the following errors:
vagrant@islandora8:/var/www/html/drupal$ drush --uri=https://localhost:8000 --userid=1 mr islandora8_metadata,islandora8_media,islandora8_file
[notice] Now acting as user ID 1
6/6 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%
[notice] Rolled back 6 items - done with 'islandora8_media'
6/6 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%
[notice] Rolled back 6 items - done with 'islandora8_file'
[error] Error generating event: Bundle islandora_object does not exist
1/6 [▓▓▓▓░░░░░░░░░░░░░░░░░░░░░░░░] 16% [error] Error generating event: Bundle islandora_object does not exist
2/6 [▓▓▓▓▓▓▓▓▓░░░░░░░░░░░░░░░░░░░] 33% [error] Error generating event: Bundle islandora_object does not exist
3/6 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░░░░░░░░] 50% [error] Error generating event: Bundle islandora_object does not exist
4/6 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░░░░] 66% [error] Error generating event: Bundle islandora_object does not exist
5/6 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░] 83% [error] Error generating event: Bundle islandora_object does not exist
6/6 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%
[notice] Rolled back 6 items - done with 'islandora8_metadata'
[notice] Switching back from user 1.
[error] Message: Error generating event: Bundle islandora_object does not exist
Applying the PR caused those "Error generating event" messages to not appear.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks @seth-shaw-asu will look again!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Used @seth-shaw-asu's provided module on a playbook and reproduced in the following ways (added tags
to the migration for convenience sake).
drush -l http://localhost:8000 mim --userid=1 --tag=apollo
[notice] Now acting as user ID 1
1/1 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%
[notice] Processed 1 item (1 created, 0 updated, 0 failed, 0 ignored) in 0.2 seconds (251/min) - done with 'auth_complex'
1/1 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%
[notice] Processed 1 item (1 created, 0 updated, 0 failed, 0 ignored) in 0.1 seconds (419.6/min) - done with 'auth_geographic'
2/2 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%
[notice] Processed 2 items (2 created, 0 updated, 0 failed, 0 ignored) in 0.3 seconds (388.1/min) - done with 'auth_person'
1/1 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%
[notice] Processed 1 item (1 created, 0 updated, 0 failed, 0 ignored) in 0.1 seconds (415.5/min) - done with 'auth_topic'
6/6 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%
[notice] Processed 6 items (6 created, 0 updated, 0 failed, 0 ignored) in 4.8 seconds (74.9/min) - done with 'islandora8_file'
6/6 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%
[notice] Processed 6 items (6 created, 0 updated, 0 failed, 0 ignored) in 1.7 seconds (211.5/min) - done with 'islandora8_metadata'
6/6 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%
[notice] Processed 6 items (6 created, 0 updated, 0 failed, 0 ignored) in 5.1 seconds (70.5/min) - done with 'islandora8_media'
[notice] Switching back from user 1.
And on the rollback as follows:
vagrant@islandora8:/var/www/html/drupal/web/modules/contrib/islandora$ drush -l http://localhost:8000 migrate:rollback --tag apollo
6/6 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%
[notice] Rolled back 6 items - done with 'islandora8_media'
[error] Error generating event: Bundle islandora_object does not exist
1/6 [▓▓▓▓░░░░░░░░░░░░░░░░░░░░░░░░] 16% [error] Error generating event: Bundle islandora_object does not exist
2/6 [▓▓▓▓▓▓▓▓▓░░░░░░░░░░░░░░░░░░░] 33% [error] Error generating event: Bundle islandora_object does not exist
3/6 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░░░░░░░░] 50% [error] Error generating event: Bundle islandora_object does not exist
4/6 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░░░░] 66% [error] Error generating event: Bundle islandora_object does not exist
5/6 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░] 83% [error] Error generating event: Bundle islandora_object does not exist
6/6 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%
[notice] Rolled back 6 items - done with 'islandora8_metadata'
[error] Failed to unlink file 'fedora://masters/apollo/AS11-37-5528.tiff'.
1/6 [▓▓▓▓░░░░░░░░░░░░░░░░░░░░░░░░] 16% [error] Failed to unlink file 'fedora://masters/apollo/AS11-37-5545.tiff'.
2/6 [▓▓▓▓▓▓▓▓▓░░░░░░░░░░░░░░░░░░░] 33% [error] Failed to unlink file 'fedora://masters/apollo/AS11-40-5850.tiff'.
3/6 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░░░░░░░░] 50% [error] Failed to unlink file 'fedora://masters/apollo/AS11-40-5875.tiff'.
4/6 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░░░░] 66% [error] Failed to unlink file 'fedora://masters/apollo/AS11-40-5903.tiff'.
5/6 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░] 83% [error] Failed to unlink file 'fedora://masters/apollo/AS11-44-6665.tiff'.
6/6 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%
[notice] Rolled back 6 items - done with 'islandora8_file'
[error] Error generating event: Bundle subject does not exist
1/1 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%
[notice] Rolled back 1 item - done with 'auth_topic'
[error] Error generating event: Bundle person does not exist
1/2 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░░░░░░░░] 50% [error] Error generating event: Bundle person does not exist
2/2 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%
[notice] Rolled back 2 items - done with 'auth_person'
[error] Error generating event: Bundle geo_location does not exist
1/1 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%
[notice] Rolled back 1 item - done with 'auth_geographic'
[error] Error generating event: Bundle subject does not exist
1/1 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%
[notice] Rolled back 1 item - done with 'auth_complex'
[error] Message: Error generating event: Bundle islandora_object does not exist
[error] Message: Error generating event: Bundle subject does not exist
[error] Message: Error generating event: Bundle person does not exist
[error] Message: Error generating event: Bundle geo_location does not exist
So on the migrate:rollback of Seth's test migration:
Lines 239 to 247 in 2794f01
/** | |
* Implements hook_taxonomy_term_delete(). | |
*/ | |
function islandora_taxonomy_term_delete(TermInterface $term) { | |
$utils = \Drupal::service('islandora.utils'); | |
// Execute delete reactions. | |
$utils->executeTermReactions('\Drupal\islandora\Plugin\ContextReaction\DeleteReaction', $term); | |
} |
Bad comment aside
islandora/src/IslandoraUtils.php
Lines 371 to 388 in 2794f01
/** | |
* Executes context reactions for a File. | |
* | |
* @param string $reaction_type | |
* Reaction type. | |
* @param \Drupal\taxonomy\TermInterface $term | |
* Term to evaluate contexts and pass to reaction. | |
*/ | |
public function executeTermReactions($reaction_type, TermInterface $term) { | |
$provider = new TermContextProvider($term); | |
$provided = $provider->getRuntimeContexts([]); | |
$this->contextManager->evaluateContexts($provided); | |
// Fire off index reactions. | |
foreach ($this->contextManager->getActiveReactions($reaction_type) as $reaction) { | |
$reaction->execute($term); | |
} | |
} |
[0] => stdClass Object
(
[__CLASS__] => Drupal\islandora\Plugin\ContextReaction\DeleteReaction
[pluginId:protected] => delete
[pluginDefinition:protected] => Array
(
[description] =>
[id] => delete
[label] => stdClass Object
(
[__CLASS__] => Drupal\Core\StringTranslation\TranslatableMarkup
[string:protected] => Delete
[arguments:protected] => Array
(
)
[translatedMarkup:protected] =>
[options:protected] => Array
(
)
[stringTranslation:protected] =>
)
[class] => Drupal\islandora\Plugin\ContextReaction\DeleteReaction
[provider] => islandora
)
[configuration:protected] => Array
(
[id] => delete
[saved] =>
[actions] => Array
(
[delete_media_from_triplestore] => delete_media_from_triplestore
)
)
...
and
[1] => stdClass Object
(
[__CLASS__] => Drupal\islandora\Plugin\ContextReaction\DeleteReaction
[pluginId:protected] => delete
[pluginDefinition:protected] => Array
(
[description] =>
[id] => delete
[label] => stdClass Object
(
[__CLASS__] => Drupal\Core\StringTranslation\TranslatableMarkup
[string:protected] => Delete
[arguments:protected] => Array
(
)
[translatedMarkup:protected] =>
[options:protected] => Array
(
)
[stringTranslation:protected] =>
)
[class] => Drupal\islandora\Plugin\ContextReaction\DeleteReaction
[provider] => islandora
)
[configuration:protected] => Array
(
[id] => delete
[saved] =>
[actions] => Array
(
[delete_taxonomy_term_in_fedora] => delete_taxonomy_term_in_fedora
[delete_taxonomy_term_in_triplestore] => delete_taxonomy_term_in_triplestore
)
)
...
The first action (delete_media_from_triplestore
) gets invoked and blows up in an odd way because a non-media entity is being passed along to the media action to execute. The latter set of actions (delete_taxonomy_term_in_fedora
and delete_taxonomy_term_in_triplestore
)fire and do what they are configured to do. If a typification check is added to
islandora/src/Plugin/Action/EmitMediaEvent.php
Lines 39 to 46 in 2794f01
/** | |
* {@inheritdoc} | |
*/ | |
protected function generateData(EntityInterface $entity) { | |
$data = parent::generateData($entity); | |
$data['source_field'] = $this->mediaSource->getSourceFieldName($entity->bundle()); | |
return $data; | |
} |
if (!$entity instanceof MediaInterface) {
throw new \Exception("Expected a MediaInterface got " . get_class($entity));
}
We quickly see that something is awry:
[error] Exception: Expected a MediaInterface got Drupal\node\Entity\Node in Drupal\islandora\Plugin\Action\EmitMediaEvent->generateData() (line 45 of /var/www/html/drupal/web/modules/contrib/islandora/src/Plugin/Action/EmitMediaEvent.php).
This leads me into the realm of either the ContextManager
not correctly passing along the correct contexts or a misconfigured context being fired but I honestly don't see one at first glance.
It should also be noted that rolling back migrations one at a time does not exhibit this behavior (which leads me back to the ContextManager):
vagrant@islandora8:/var/www/html/drupal/web/modules/contrib/islandora$ drush -l http://localhost:8000 migrate:rollback islandora8_media && drush -l http://localhost:8000 migrate:rollback islandora8_metadata && drush -l http://localhost:8000 migrate:rollback islandora8_file && drush -l http://localhost:8000 migrate:rollback auth_topic && drush -l http://localhost:8000 migrate:rollback auth_person && drush -l http://localhost:8000 migrate:rollback auth_geographic && drush -l http://localhost:8000 migrate:rollback auth_complex
6/6 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%
[notice] Rolled back 6 items - done with 'islandora8_media'
6/6 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%
[notice] Rolled back 6 items - done with 'islandora8_metadata'
[error] Failed to unlink file 'fedora://masters/apollo/AS11-37-5528.tiff'.
1/6 [▓▓▓▓░░░░░░░░░░░░░░░░░░░░░░░░] 16% [error] Failed to unlink file 'fedora://masters/apollo/AS11-37-5545.tiff'.
2/6 [▓▓▓▓▓▓▓▓▓░░░░░░░░░░░░░░░░░░░] 33% [error] Failed to unlink file 'fedora://masters/apollo/AS11-40-5850.tiff'.
3/6 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░░░░░░░░] 50% [error] Failed to unlink file 'fedora://masters/apollo/AS11-40-5875.tiff'.
4/6 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░░░░] 66% [error] Failed to unlink file 'fedora://masters/apollo/AS11-40-5903.tiff'.
5/6 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░] 83% [error] Failed to unlink file 'fedora://masters/apollo/AS11-44-6665.tiff'.
6/6 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%
[notice] Rolled back 6 items - done with 'islandora8_file'
1/1 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%
[notice] Rolled back 1 item - done with 'auth_topic'
2/2 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%
[notice] Rolled back 2 items - done with 'auth_person'
1/1 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%
[notice] Rolled back 1 item - done with 'auth_geographic'
1/1 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%
[notice] Rolled back 1 item - done with 'auth_complex'
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
So, figured this out.
It's is indeed the same issue we saw at dgi in terms of contexts not being reset between evaluations. That is, previously evaluated contexts within the same thread are retained when additional conditions are evaluated.
@lucasvanschaik at this point can you remove the action filtering so the Context
fixes can be merged and I'll open a new issue / PR for the follow-up once I can figure out how best to package all this up?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Contained in #932.
Review comments aside thanks for submitting this @lucasvanschaik as it's a very great catch to pull in those bug fixes to the parent |
Ping @lucasvanschaik. Can you remove the action filtering so the upstream Context fixes can be merged? I diagnosed and fixed the underlying issue with Islandora's implementation of Context in #932 which is currently being reviewed. |
I see #932 is already approved. I've reverted the action filtering, so it should be alright now. |
Thank so much for the patience and unravelling enough thread @lucasvanschaik to help diagnose and fix this super old issue! |
GitHub Issue: N/A
https://github.com/orgs/Islandora/projects/7/views/1?filterQuery=event&pane=issue&itemId=3636970
https://git.drupalcode.org/project/context/-/commit/b7e8b7f2295d661dc83513e282df4234c9c390c1
https://git.drupalcode.org/project/context/-/commit/d31cd87b909737abd1beab10e68c62ec29acce35
What does this Pull Request do?
When inserting or updating nodes and/or media, in some cases an event is triggered with the wrong type of entity. This results in error messages such as: "Error generating event: Bundle islandora_object does not exist".
This PR implements two fixes for issues that are already solved in Drupal but not in Drupal\islandora\IslandoraContextManager that extends Drupal\context\ContextManager.
Also it checks if an action is appropriate for the given entity before executing it.
What's new?
Solved: Remaining conditions not being evaluated when failing to apply a context to a previous condition
Abort if the application of contexts has been unsuccessful
Check if an action is appropriate for the given entity
Does this change add any new dependencies? No
Does this change require any other modifications to be made to the repository
(i.e. Regeneration activity, etc.)? No
Could this change impact execution of existing code? Yes, because less actions/events are fired the indexing/derivation process will become quicker. But more rigorous test should be done to make sure that all required actions/events are fired.
How should this be tested?
I got this error when migrating a compound object all at once. We use custom migration steps to migrate from Islandora 7 to Islandora 8. Sharing the yaml files for this migration will not suffice because we use some custom plugins.
Antbrown has some steps to reproduce (that I did not use):
It is very important to test if all index and derivation actions/events that are relevant still get fired.
So test by doing:
Documentation Status
Interested parties
@Islandora/committers @seth-shaw-asu