Skip to content

Глубина архива

media.dvr.depth

DVR в Sapsan — это собственное дисковое хранилище: поток пишется append-only в часовые файлы, раздельно по дорожкам, на несколько дисков одновременно. Чтение архива не мешает записи.

Очистка и удержание

Очистка запускается раз в час (через 5 минут после границы часа):

  • max_depth действует с точностью до часа: удаляются только полностью истекшие часы;
  • блобы с защищенными эпизодами не удаляются по ретеншену;
  • блоб текущего (пишущегося) часа не удаляется никогда.

Отдельно работает защита от переполнения диска: когда свободное место падает ниже min_free_bytes (по умолчанию 1% емкости диска), Sapsan удаляет старейшие блобы невзирая на ретеншен, пока не освободит место.

Хранение эпизодов в central

Central забирает со стримеров последнее состояние эпизодов и их изображения и сохраняет в PostgreSQL. Сохранённые эпизоды доступны и при недоступном стримере. Это хранение не зависит от записи видео.

В настройках DVR стрима или шаблона стрима поле Дополнительное хранение эпизодов (часы) задаёт dvr.episodes_additional_depth; API и YAML используют секунды. Общий срок — dvr.max_depth + dvr.episodes_additional_depth. Незаданный дополнительный срок равен нулю. Если секция DVR есть, но max_depth не задан, используется десять лет; явный ноль остаётся нулём. Без секции DVR или при нулевой сумме central не хранит эпизоды.

Для закрытого эпизода срок считается от closed_at, для открытого — от updated_at. Изменение эффективных настроек DVR, в том числе в шаблоне, пересчитывает срок всех оставшихся эпизодов. Собственная секция DVR стрима заменяет секцию шаблона целиком. Удаление стрима удаляет его эпизоды и изображения. Если фоновая чистка уже физически удалила эпизод, увеличение срока его не восстановит.