Handle CircularDependencyException at the topmost level of operation ordering #167
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The previous fix for circular dependencies (#91) added handling to
ImportPlanner
such that aCircularDependencyException
will be raised and "propagated back up the chain until we're back to a caller that can handle it gracefully".However, as
CircularDependencyException
is only handled inside_add_to_operation_order()
, this means that any exceptions which get raised above that method in the call stack - to the starting point inrun()
- don't get handled, and a 500 error returned on import.As I understand it, if
run
has determined that the operations are satisfiable, that means there shouldn't be any hard dependencies between any of them at this level. On that assumption, I've added handling in this PR which catches anyCircularDependencyException
s inrun()
and retries adding them to the operation order, after running through the rest of the list.This fixes the instance where I've seen this issue occur on a site. I'm happy to add tests to this PR to cover this case - but initially I'd appreciate a review that my assumptions and fix look correct.