-
-
Notifications
You must be signed in to change notification settings - Fork 4.2k
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
[BUGFIX LTS] remove bad setFactoryFor
call
#20025
Merged
Merged
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This call *attempted* to avoid setting the `INIT_FACTORY` on items which did not need it (specifically, it avoided setting it on things which were not instantiable), but ultimately failed to do. It was ultimately setting the new `FactoryManager` instance as the `INIT_FACTORY` value on each instantiable object, which includes classes and not just class instances, since objects are only treated as non-instantiable when they explicitly specify `instantiate: false`. The net was a memory leak: the routing service *class* ended up with an `INIT_FACTORY` pointing to a `FactoryManager` instance which in turn always had a `container` on it, which meant that there was a cycle (the container also referenced the service) and thus a leak. This affects both tests and FastBoot, where we construct new instances of the service whenever we call the `visit` API.
714a60f
to
437108a
Compare
setFactoryFor
callsetFactoryFor
call
This was referenced Mar 16, 2022
chriskrycho
added a commit
that referenced
this pull request
Mar 16, 2022
Identified as part of the work on #20025, this particular `setFactoryFor` was needed at one time but is now defunct. Remove it.
This was referenced Mar 16, 2022
chriskrycho
added a commit
that referenced
this pull request
Mar 16, 2022
Identified as part of the work on #20025, this particular `setFactoryFor` was needed at one time but is now defunct. Remove it.
chriskrycho
added a commit
that referenced
this pull request
Mar 16, 2022
Identified as part of the work on #20025, this particular `setFactoryFor` was needed at one time but is now defunct. Remove it.
rwjblue
reviewed
Mar 16, 2022
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've deployed this (by patching it) to prod and can confirm: it entirely resolves the memory leak we'd seen! 🎉 |
🔝 👏 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
This call attempted to avoid setting the
INIT_FACTORY
on items which did not need it (specifically, it avoided setting it on things which were not instantiable), but ultimately failed to do. It was ultimately setting the newFactoryManager
instance as theINIT_FACTORY
value on each instantiable object, which includes classes and not just class instances, since objects are only treated as non-instantiable when they explicitly specifyinstantiate: false
.The net was a memory leak: the routing service class ended up with an
INIT_FACTORY
pointing to aFactoryManager
instance which in turn always had acontainer
on it, which meant that there was a cycle (the container also referenced the service) and thus a leak. This affects both tests and FastBoot, where we construct new instances of the service whenever we call thevisit
API.