Очистка артефактов в S3-совместимом хранилище — рекомендации и политика
ТестОпс хранит результаты выполнения тестов и связанные с ними артефакты, а так же вложения ручных тест кейсов в S3-совместимом хранилище. Эти данные являются основным источником роста объёма инстанса и требуют регулярного контроля и очистки.
⚠️ Тест-кейсы и их сценарии хранятся в базе данных и не удаляются политиками очистки.
Какие данные хранятся в S3-совместимом хранилище и занимают объём
В процессе выполнения тестов в хранилище сохраняются следующие типы данных (по убыванию занимаемого пространства):
-
Вложения тестов
Скриншоты, логи, дампы, видео и другие файлы, прикрепляемые во время выполнения или создания ручного теста. -
Вложения фикстур выполнения
SetUp / TearDown блоки - Сценарии выполнения тестов
⚠️ Данные в S3-совместимом хранилище складываются исключительно из прогонов тестов, сам ТестОпс не генерирует никаких данных
Принципы очистки артефактов
Очистка артефактов в ТестОпс основана на следующих принципах:
-
Удаляются только артефакты закрытых запусков.
Пока запуск находится в статусе Открытый, его данные не подлежат удалению, независимо от настроенных сроков хранения. - Для вложений фикстур статус определяется результатом выполнения соответствующего блока: вложения из блока SetUp, выполненного успешно, будут удаляться по правилам для успешных фикстур, вложения из блока TearDown, завершившегося с ошибкой, будут удаляться по правилам для неуспешных фикстур
- Очистка выполняется фоновыми процессами и не приводит к немедленному освобождению места в хранилище.
- Правила применяются каждую ночь: сначала глобальные - в 2:00, затем проектные - в 2:30 .
Эксплуатационные ограничения
- Удаление файлов из хранилища ТестОпс должно выполняться исключительно с использованием политик очистки.
Ручное удаление файлов приводит к тому, что в базе данных ТестОпс остаются брошенные записи, содержащие ссылки на объекты хранилища (storage_key), которые не удаляются автоматически. Это также относится к использованию встроенных инструментов очистки S3-совместимых хранилищ (например, MinIO): такие операции освобождают пространство в хранилище, но не удаляют связанные записи в базе данных, относящиеся к вложениям. - Мы настоятельно рекомендуем отключать/ не использовать версионирование S3-совместимых хранилищ, так как оно не нужно в рамках ТестОпс и приведет только к неконтролируемому росту занимаемого пространства.
Рекомендуемые сроки хранения артефактов
При выборе сроков хранения следует учитывать ценность данных с течением времени.
Ключевой принцип:
Историческая ценность успешных результатов тестов минимальна.
После подтверждения стабильного прохождения такие данные редко используются для анализа.
Пример ориентировочных значений:
| Тип результата | Пример срока хранения | Обоснование |
|---|---|---|
| Успешные тесты | ~36 часов после закрытия запуска | Историческая и диагностическая ценность успешных результатов минимальна. После подтверждения стабильного прохождения такие данные практически не используются.
Для успешных тестов (прошедших) имеет смысл сохранять 1-2 копии артефактов, исходя из частоты выполнения ваших тестов, то есть, если ваши тесты выполняются 1 раз в 24 часа, то разумно удалять все артефакты после, скажем, 36 часов с учетом информации о работе планировщика. |
| Неуспешные тесты | ~7 дней | Требуется время для анализа причин сбоя, воспроизведения проблемы и проверки исправлений. |
| Сломанные тесты (Broken) | Минимальный возможный срок | Сломанные тесты, как правило, не несут диагностической ценности: причина сбоя не связана с прохождение теста, сломано окружение |
| Тесты с неизвестным статусом (Unknown) | Минимальный возможный срок | Результаты с неопределённым статусом не позволяют сделать выводы о состоянии системы и не имеют практической ценности для последующего анализа. Как правило такой статус назначается результату при преждевременном закрытии запуска |
Указанные значения являются рекомендательными и должны адаптироваться под процессы команды, требования к аудиту и доступный объём хранилища.
⚠️ Важно
Значения должны быть установлены для всех статусов всех типов артефактов, как на глобальном уровне, так и на проектных
Механизм удаления артефактов
Удаление артефактов в ТестОпс реализовано через очередь заданий
ТестОпс запускает задачи очистки в разное время для разных типов правил:
- Глобальные правила начинают обрабатываться в 02:00.
- Проектные правила начинают обрабатываться в 02:30.
-
На основе активных правил очистки формируются записи в таблице
blob_remove_task.
(blob_remove_task пополняется так же запросами на удаление из UI, по мере закрытия запусков и т.д., т.е. не только политиками очистки) - Фоновая задача обработки удаления выполняется каждые 5 минут.
- Если у вас домашняя установка ТестОпс, в логах инстанса вы будете наблюдать выполнение задач:
4975 blob remove tasks found
4975 blob remove tasks processed
Фактическое количество удаляемых файлов за одну итерацию зависит от нескольких факторов:
-
количества записей в таблице
blob_remove_task -
размера пакета удаления
BLOB_BATCHSIZE -
значения параметра параллелизма доступа к S3-совместимому хранилищу
S3_MAXCONCURRENCY - количества реплик сервисов ТестОпс, обрабатывающих задания удаления.
Допустим, BLOB_BATCHSIZE = 1000, S3_MAXCONCURRENCY = 200 и 10 реплик ТестОпс, получаем 1000*200*10 - потолочное значение на удаление за одну итерацию (это не значит, что всегда будет такое количество файлов отправляться на удаление)
Устранение неполадок: очистка хранилища не успевает исполняться, объем заметно растет без изменения профиля нагрузки (количества загружаемых файлов)
Для оценки текущей очереди на удаление можно использовать запрос:
select count(*) from blob_remove_task;
Симптом
- объём хранилища растёт, несмотря на настроенные правила очистки.
Шаг 1. Проверить, что запуски закрываются
-
очистка применяется только к закрытым запускам. Настроены ли правила автоматического закрытия запусков?
Правила описаны в данном разделе документации: Автоматическое закрытие запуска
Шаг 2. Снятие динамики
Запустите этот запрос несколько раз в течение рабочего дня, например:
- утром (около 09:00),
- днём (около 14:00),
- вечером (около 19:00).
Шаг 3. Интерпретация результатов
- если к концу дня очередь на удаление равна нулю или близка к нулю, очистка успевает;
-
если очередь растёт и не уменьшается, значит:
- вы загружаете больше файлов, чем успевает удаляться;
- текущий размер батча недостаточен для вашей нагрузки.
Корректировка размера батча удаления
В случае растущей очереди возможно увеличение размера батча удаления с помощью параметра конфигурации:
ALLURE_SCHEDULER_CLEANER_BLOB_BATCHSIZE: 2000
⚠️ Важно
Изменение значения ALLURE_SCHEDULER_CLEANER_BLOB_BATCHSIZE не рекомендуется выполнять самостоятельно.
Подбор корректного значения должен выполняться после консультации с технической поддержкой, так как:
- удаление файлов активно использует S3-совместимом хранилище (увеличение количества запросов в хранилище на удаление может негативно сказаться на производительности хранилища), а так же создает нагрузку на БД
⚠️ FYI
Политики очистки артефактов в ТестОпс — устоявшийся и детерминированный механизм, логика которого на протяжении всего времени эксплуатации не менялась.
На практике подтверждено, что политики очистки всегда отрабатывают в соответствии с заданными правилами, а замедление удаления данных связано исключительно с конфигурацией и объёмом создаваемых артефактов, а не с работой самого механизма.