frigate/frigate/track
Rob Arnold f1e2240945
Some checks are pending
CI / AMD64 Build (push) Waiting to run
CI / ARM Build (push) Waiting to run
CI / Jetson Jetpack 6 (push) Waiting to run
CI / AMD64 Extra Build (push) Blocked by required conditions
CI / ARM Extra Build (push) Blocked by required conditions
CI / Synaptics Build (push) Blocked by required conditions
CI / Assemble and push default build (push) Blocked by required conditions
Gracefully handle transiently failing exists calls (#23172)
I have a very repeatable reproduction of an issue where most of my
cameras show a "No frames have been received, check error logs" image in
the UI, but restreaming in HomeAssistant is working flawlessly. The only
errors in the logs I saw were some like this:

`OSError: [Errno 121] Remote I/O error`.

Doing a bit more debugging, it looked like Frigate was failing to create
the thumbnail directory for a camera because it already existed. This
error was a clue as to the class of error. I was surprised to learn that
`os.path.exists` [silently suppresses errors from
os.stat and returns False](https://github.com/python/cpython/blob/main/Lib/genericpath.py#L22).
This makes for a plausible series of events: a transient stat call
fails, so Frigate takes the creation path, which gets upset that the
directory already exists.

I found a few other possible cases to fix but did not make an exhaustive
search. It seems that this `exist_ok` flag is used elsewhere within
Frigate so I thought it would be a good solution.

AI disclosure: I used AI to diagnose my issue and asked it to translate
its init-time patches to the container source into this repo. I verified
that its patches solved the problem I was facing. Its theory fits the
facts - I am using a distributed file system and I saw the error in my
logs. I checked the upstream Python code to verify the error suppression
behavior, and read the corresponding Frigate code. I did not use AI to
author this commit message/PR description; all diction and typos here are my own.
2026-05-12 12:34:46 -06:00
..
__init__.py Enable mypy for track and fix typing errors (#19529) 2025-08-17 12:27:42 -05:00
centroid_tracker.py Enable mypy for track and fix typing errors (#19529) 2025-08-17 12:27:42 -05:00
norfair_tracker.py Improve stationary classification (#20303) 2025-10-01 07:39:11 -05:00
object_processing.py Fixes (#23130) 2026-05-07 12:23:02 -06:00
stationary_classifier.py Add handler for license plate which is not expected to be stationary (#22416) 2026-03-13 07:02:42 -06:00
tracked_object.py Gracefully handle transiently failing exists calls (#23172) 2026-05-12 12:34:46 -06:00