fix: v0.6.2 — structural tracker refactor, batch writes, multi-instance prep
- Drop flat list as primary storage; derive uploaded/rejected IDs from by_person (single source of truth). Legacy flat lists in existing files still read for backward compat. Removes dual-representation sync hazard. - Add begin_batch/flush_batch: per-person upload loop now does 1 os.replace instead of N (one per mark_uploaded call). Benefit on slow storage. - reset_all_people(): RESET_PERSON=* is now O(1) disk writes instead of O(P^2). - blur_score_from_image inlines cv2.Laplacian directly, removing assess_quality call overhead and decoupling from the full quality pipeline.
This commit is contained in:
@@ -34,6 +34,8 @@ from .upload_tracker import (
|
||||
has_frigate_scores,
|
||||
mark_rejected,
|
||||
mark_uploaded,
|
||||
begin_batch,
|
||||
flush_batch,
|
||||
remove_frigate_file,
|
||||
remove_frigate_files_batch,
|
||||
)
|
||||
@@ -364,6 +366,7 @@ def upload_to_frigate(jobs: list[dict]) -> None:
|
||||
min_quality_score_for_slot: float | None = None
|
||||
person_has_fscores: bool = has_frigate_scores(name)
|
||||
|
||||
begin_batch(UPLOAD_TRACKER_FILE)
|
||||
for fname in person_files:
|
||||
fpath = os.path.join(person_dir, fname)
|
||||
|
||||
@@ -590,6 +593,8 @@ def upload_to_frigate(jobs: list[dict]) -> None:
|
||||
" was not filled this run — will be available next run"
|
||||
)
|
||||
|
||||
flush_batch(UPLOAD_TRACKER_FILE)
|
||||
|
||||
# Batch-map Frigate filenames to asset IDs now that all uploads are done.
|
||||
if actually_uploaded and not _skip_reconcile:
|
||||
reconcile_frigate_mappings(name, known_frigate_files_at_start, actually_uploaded)
|
||||
|
||||
Reference in New Issue
Block a user