fix production mode and scheduler race #2477
Merged
+77
−24
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.
Problem
Commit 2239e58 ("Merge branch 'context-managers'") from 4.5.12 caused regressions in app initialization.
production_mode: truebecause the async task races with initialization, andcheck_app_updates()is never called again.The system would log "App initialization complete" but apps weren't actually loaded yet (or ever, in production mode).
Root Cause
The old
app_management.start()method usedloop.create_task()to initialize apps asynchronously:This created a race where apps might not be loaded before the system continued. In production mode, where
check_app_updates()is skipped in the utility loop, apps would never load if the task hadn't completed yet.Solution
app_management.start()is replaced with a synchronous version. Scheduler initialization and app loading are moved back to the end ofUtility._init_loop.Two regression tests are added to verify that production mode is once again functional.
Fixes #2442
Fixes #2467