fix: reopen root container on startup across broker restarts#12
Merged
Conversation
setup_di closed the root container via after_shutdown but never reopened it, so a broker restart (or repeated TestApp cycles) left the root closed and the DI middleware raised ContainerClosedError when building a request child. Pair the shutdown close with `app.on_startup(container.open)`, which reopens the root before the broker consumes. Requires modern-di>=2.19.0 for Container.open(). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This file contains hidden or 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
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.
What
setup_dinow pairs the shutdown close withapp.on_startup(container.open), so the root container reopens before the broker starts consuming.Why
Previously
setup_diclosed the root container viaafter_shutdownbut never reopened it. After a broker restart (or repeatedTestAppcycles) the root stayed closed, and the DI middleware raisedContainerClosedErrorwhen building a request child. FastStream's lifecycle is callback-based, so the root can't be wrapped inasync with— the new publicContainer.open()is invoked fromon_startupinstead.Tests
tests/test_lifespan.pyruns twoTestAppcycles against the same app and asserts a message resolves DI on the second cycle (and that the container is closed in between).Requires
modern-di>=2.19.0forContainer.open()(floor bumped).🤖 Generated with Claude Code