Для управления эволюцией схем состояния в Apache Flink, используется кастомный сериализатор
Тесты проверяют, что все схемы, помеченные
Для обеспечения корректной компиляции тестовых классов с использованием Lombok, зависимость Lombok была изменена с
Использование аннотации
JacksonStateSerializer
, поддерживающий Jackson-аннотации. Для автоматизации проверки корректности изменений схемы, введена аннотация @JacksonEvolvingState
с полем version
, определяющим версию схемы. При изменении схемы, разработчик должен увеличивать версию в аннотации, сохранять текущую версию класса (без package) в файл <Имя_класса>/<версия>.txt
в директории src/test/resources/state/
и запускать тесты. Изображение носит иллюстративный характер
Тесты проверяют, что все схемы, помеченные
@JacksonEvolvingState
, корректно эволюционируют из одной версии в другую. Тест сканирует все классы с данной аннотацией, получая версии из аннотации и выдавая комбинации для проверки. Для каждой комбинации версий выполняется создание savepoint для предыдущей версии схемы, затем восстановление состояния из savepoint с использованием новой версии схемы. Для обеспечения корректной компиляции тестовых классов с использованием Lombok, зависимость Lombok была изменена с
testCompileOnly
на testImplementation
, чтобы Lombok был виден в classpath теста во время компиляции. Проверка инкремента версии схемы при её изменении осуществляется путем сравнения содержимого текущей схемы в src
с последней версией в test/resources/
. Если содержимое отличается, тест выдает ошибку, требуя обновить версию схемы в ресурсах. Использование аннотации
@JacksonEvolvingState
и автоматизированных тестов позволяет контролировать изменения схем состояния, гарантируя их обратную совместимость и предотвращая ошибки, связанные с некорректной эволюцией схем.