-
Notifications
You must be signed in to change notification settings - Fork 272
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
Refactored SelectionSet::split_top_level_fields
#6123
Conversation
✅ Docs Preview ReadyNo new or changed pages found. |
@TylerBloom, please consider creating a changeset entry in |
CI performance tests
|
2d82068
to
14824c9
Compare
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.
LGTM. Some of this implementation reminds me of SelectionSet::field_selections
(different ownership aside, and field_selections also doesn't track the parent_type
)
… dyn Iterators in federation
14824c9
to
8e65d14
Compare
This PR refactors
SelectionSet::split_top_level_fields
away from usingBox<dyn Iterator>
s. While not a performance issue (the function is called from exactly one place), it was a very smelly implementation, which required every item to be to be allocated in its own allocation before being yielded by the iterator.Since the iterator is recursive, I had to just implement
Iterator
on an internal type rather than use the opaque type (which can't be recursive at all) returned by the function.Lastly, I saw a couple of other
Box<dyn Iterator>
s that that could be turned into RPITs by using theEither
type from theeither
crate.either
is already a transitive dependency, so it adds no extra dependencies to theapollo-federation
orapollo-router
.Checklist
Complete the checklist (and note appropriate exceptions) before the PR is marked ready-for-review.
Exceptions
Note any exceptions here
Notes
Footnotes
It may be appropriate to bring upcoming changes to the attention of other (impacted) groups. Please endeavour to do this before seeking PR approval. The mechanism for doing this will vary considerably, so use your judgement as to how and when to do this. ↩
Configuration is an important part of many changes. Where applicable please try to document configuration examples. ↩
Tick whichever testing boxes are applicable. If you are adding Manual Tests, please document the manual testing (extensively) in the Exceptions. ↩