Fix readField during merge of objects sandwiched between circular objects.
#13084
+137
−7
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.
See #9315 (comment) for the user reproduction.
The test for this uncovers additional problems that might be fixed later.
The general problem here is a situation where an incoming object has another normalized object both as a parent and child.
So, in this case, the
mergefunction forParentruns before themergeforChildhas a chance to run - and thereadFieldfunction that would like to access properties ofChildcannot read them from the store yet.This doesn't happen for non-circular objects, since these are merged from
incomingByIdin a leaf-to-root order, but in this circular case, leaf and root are the same object - so no matter which order they are merged in, a child will have unmerged fields.I'm not happy with this solution, so putting it as draft for now. I'd be happy to feedback.