Close second Windows file handle blocking log rename after rollover#14
Open
Mayyhem wants to merge 1 commit into
Open
Close second Windows file handle blocking log rename after rollover#14Mayyhem wants to merge 1 commit into
Mayyhem wants to merge 1 commit into
Conversation
Author
|
Still appears to be an issue after last rollover period. Investigating. |
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.
Fix proposed by Codex and tested on Windows 11, Python 3.14.
Root cause: OpenHound opens the same log file twice during startup.
At import time, logging.py (line 401) runs logger_override.setup(). That setup attaches a rotating handler to the dlt logger at logging.py (line 297), then attaches another rotating handler to the root logger for the same openhound.log at logging.py (line 303). On Windows, TimedRotatingFileHandler cannot rename a file while another open handle still exists. Since the existing log was from 2026-05-20, the first startup log on 2026-05-21 triggers midnight rollover, closes only its own stream, then os.rename() fails because the other handler still has openhound.log open.
Recommended fix:
Use that instead of handlers.clear(), and make only one handler own openhound.log:
Then keep set_handler() for collector-specific DLT logs, but close old handlers first:
For the scheduler/process-pool path, also avoid multiple processes rotating the same file. Best stdlib solution is QueueHandler/QueueListener so one parent listener owns the file handler; simpler fallback is per-process log filenames.