Skip to content
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

Merged

Conversation

lucasvanschaik
Copy link

GitHub Issue: N/A

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):

  1. Implement hook_media_update()
  2. Fetch parent node $islandora = \Drupal::service('islandora.utils'); $parent = $islandora->getParentNode($media);
  3. Make changes to parent node and save: $parent->save();
  4. Observe the error: "Error generating event: Bundle islandora_object does not exist" (or whatever bundle your parent node is).

It is very important to test if all index and derivation actions/events that are relevant still get fired.
So test by doing:

  • a migration of some objects with media
  • adding some objects with media by hand
  • check if all derivatives are made and if all is indexed correctly

Documentation Status

  • Does this change existing behaviour that's currently documented? no
  • Does this change require new pages or sections of documentation? no
  • Who does this need to be documented for? developers, but is done in code in PR
  • Associated documentation pull request(s): none

Interested parties

@Islandora/committers @seth-shaw-asu

@seth-shaw-asu
Copy link
Member

@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?

Copy link
Member

@seth-shaw-asu seth-shaw-asu left a 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.

@seth-shaw-asu
Copy link
Member

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.

@jordandukart jordandukart self-requested a review February 23, 2023 19:40
@jordandukart jordandukart self-assigned this Feb 23, 2023
src/IslandoraContextManager.php Outdated Show resolved Hide resolved
Comment on lines 59 to 63
// 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]);
}
Copy link
Member

@jordandukart jordandukart Feb 24, 2023

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 types 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.

Copy link
Author

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.

Copy link
Member

@jordandukart jordandukart Feb 27, 2023

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.

Copy link
Author

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).

Copy link
Member

@jordandukart jordandukart Mar 1, 2023

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.

Copy link
Member

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).

  1. 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)
  2. I did the module's requisite copy of the data directory and enabling the module. (See the README.)
  3. I then ran the migrations. That all worked fine, but...
  4. 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.

Copy link
Member

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!

Copy link
Member

@jordandukart jordandukart Mar 6, 2023

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:

islandora/islandora.module

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);
}
gets invoked when a taxonomy term is rolled back.

Bad comment aside

/**
* 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);
}
}
gets invoked to process any configured actions for the deleted term. Looking at what reactions it finds we see the following:


[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

/**
* {@inheritdoc}
*/
protected function generateData(EntityInterface $entity) {
$data = parent::generateData($entity);
$data['source_field'] = $this->mediaSource->getSourceFieldName($entity->bundle());
return $data;
}
like so:

 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'

Copy link
Member

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?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Contained in #932.

@jordandukart jordandukart removed their assignment Feb 24, 2023
@jordandukart
Copy link
Member

Review comments aside thanks for submitting this @lucasvanschaik as it's a very great catch to pull in those bug fixes to the parent ContextManager class upstream!

@jordandukart
Copy link
Member

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.

@lucasvanschaik
Copy link
Author

I see #932 is already approved. I've reverted the action filtering, so it should be alright now.

@jordandukart
Copy link
Member

Thank so much for the patience and unravelling enough thread @lucasvanschaik to help diagnose and fix this super old issue!

@jordandukart jordandukart merged commit e366da3 into Islandora:2.x Mar 14, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants