From ed1897db71bc42ca44207f9fd47081a9b645372b Mon Sep 17 00:00:00 2001 From: deviant77 <16081842+deviant77@users.noreply.github.com> Date: Tue, 19 Jul 2022 13:24:44 +0100 Subject: [PATCH] Add log message when discarding recording segments in cache (#3439) * Add log message when discarding recording segments in cache Currently Frigate silently discards recording segments in cache if there's more than "keep_count" for a camera, which can happen on high load/busy/slow systems. This results in recording segments being lost with no apparent cause in the logs (even when set to debug). This PR adds a warning log entry when discarding segments, in the same way as discarding corrupted segments * Add explanatory warning and properly format cache_path warning * lint fixes Co-authored-by: Blake Blackshear --- frigate/record.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/frigate/record.py b/frigate/record.py index bdc3d5671..89576bdeb 100644 --- a/frigate/record.py +++ b/frigate/record.py @@ -99,11 +99,17 @@ class RecordingMaintainer(threading.Thread): # delete all cached files past the most recent 5 keep_count = 5 for camera in grouped_recordings.keys(): - if len(grouped_recordings[camera]) > keep_count: + segment_count = len(grouped_recordings[camera]) + if segment_count > keep_count: + logger.warning( + f"Too many recording segments in cache for {camera}. Keeping the {keep_count} most recent segments out of {segment_count}, discarding the rest..." + ) to_remove = grouped_recordings[camera][:-keep_count] for f in to_remove: - Path(f["cache_path"]).unlink(missing_ok=True) - self.end_time_cache.pop(f["cache_path"], None) + cache_path = f["cache_path"] + logger.warning(f"Discarding a recording segment: {cache_path}") + Path(cache_path).unlink(missing_ok=True) + self.end_time_cache.pop(cache_path, None) grouped_recordings[camera] = grouped_recordings[camera][-keep_count:] for camera, recordings in grouped_recordings.items():