Слиянияе точек восстановления (мердж) - процесс слияния двух точек в результате которого получается одна точка
Система должна уметь загружать свое состояние после перезапуска программы. Это может быть реализовано за счет сохранения данных о настройках джоб в конфигурационный файл, который будет лежать в корневой директории. После загрузки ожидается, что в приложение загрузится информация о существующих джобах, добавленных в них объектах, информация о созданных точках восстановления.
Помимо создания, нужно контролировать количество хранимых точек восстановления. Чтобы не допускать накопления большого количества старых и неактуальных точек, требуется реализовать механизмы их очистки — они должны контролировать, чтобы цепочка точек восстановления не выходила за допустимый лимит. В рамках лабораторной ожидается реализация таких типов лимитов:
- По количеству рестор поинтов - ограничивает длину цепочки из рестор поинтов (храним последние N рестор поинтов и очищаем остальные)
- По дате - ограничивает насколько старые точки будут хранится (очищаем все точки, которые были сделаны до указанной даты)
- Гибрид - возможность комбинировать лимиты. Пользователь может указывать, как комбинировать:
- нужно удалить точку, если она не подходит хотя бы под один установленный лимит
- нужно удалить точку, если она не подходит за все установленные лимиты
Например, пользователь выбирает гибрид алгоритмов "по количеству" и "по дате". Если по одному из алгоритмов необходимо оставить точки P1 P2 P3, а по другому — P1 P2 P3 P4 P5, то в первом варианте останутся точки P1-P3, а во втором - P1-P5.
Если для соответствия лимита требуется удалить все точки - должна бросаться ошибка.
Стоит разделять алгоритм выбора точек для удаления и процесс удаления. Требуется поддержать альтернативное поведение при выходе за лимиты - мердж точек. Мердж работает по правилам:
- Если в старой точке есть объект и в новой точке есть объект - нужно оставить новый, а старый можно удалять
- Если в старой точке есть объект, а в новоей его нет - нужно перенести его в новую точку
- Если в точке объекты храняться по правилу Single storage, то старая точка просто удаляется
Логика работы бекпов не должна напрямую завязываться на консоль или другие внешние компоненты. Чтобы поддержать возможность уведомлять пользователя о событиях внутри алгоритма, требуется реализовать интерфейс для логирования и вызывать его в нужных моментах. Например, писать что создается сторадж или рестор поинт. Задаваться способ логирования должен из-вне. Например, при создании джобы. В рамках системы ожидаются такие реализации логера:
- Консольный, который логирует информацию в консоль
- Файловый, который логирует в указанный файл
Для логирования сущностей стоит реализовать в самих сущностях методы, которые генерируют информативную строку, которая описывает сущность.
Для логера стоит поддержать возможность конфигурирации - указать нужно ли делать префикс с таймкодом в начале строки.
Целью создания бекапов является предоставление возможности восстановиться из резервной копии. Требуется реализовать функционал, который бы позволял указать Restore point и восстановить данные из него. Нужно поддержать два режима восстановления:
- to original location - восстановить файл в то место, из которого они бекапились (и заменить, если они ещё существуют)
- to different location - восстановить файл в указанную папку
- Для проверки работоспособности алгоритма работы со временем нужно спроектировать систему так, чтобы в тестах была возможность созданным объектам задавать время создания.