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

[BUGFIX LTS] remove bad setFactoryFor call #20025

Merged
merged 1 commit into from Mar 16, 2022

Conversation

chriskrycho
Copy link
Contributor

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.

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.
@chriskrycho chriskrycho changed the title [BUGFIX Release] remove bad setFactoryFor call [BUGFIX LTS] remove bad setFactoryFor call 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 chriskrycho merged commit 5f0ce0f into master Mar 16, 2022
@chriskrycho chriskrycho deleted the chriskrycho/fix-memory-leak branch March 16, 2022 19:31
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.
Copy link
Member

@rwjblue rwjblue left a comment

Choose a reason for hiding this comment

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

👏 👏 👏

@chriskrycho
Copy link
Contributor Author

I've deployed this (by patching it) to prod and can confirm: it entirely resolves the memory leak we'd seen! 🎉

kategengler pushed a commit that referenced this pull request Mar 21, 2022
Identified as part of the work on #20025, this particular `setFactoryFor`
was needed at one time but is now defunct. Remove it.

(cherry picked from commit 0a1b4e4)
@esbanarango
Copy link
Contributor

🔝 👏

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.

None yet

3 participants