Локальный экземпляр и экземпляр K8s разрешают разные контрольные суммы для одной и той же схемы пролета - PullRequest
0 голосов
/ 27 февраля 2020

Насколько я знаю, это довольно необычно, и я не могу найти root причину.

У меня есть служба, которую я развернул в одной из наших сред в Кубернетесе. Не удалось запустить со следующей ошибкой:

2020-02-27 11:41:44,178 [instance=] [main] INFO  org.flywaydb.core.internal.util.VersionPrinter (Slf4jLog.java:44) - Flyway 3.2.1 by Boxfuse
2020-02-27 11:41:50,665 [instance=] [main] INFO  org.flywaydb.core.internal.dbsupport.DbSupportFactory (Slf4jLog.java:44) - Database: jdbc:oracle:thin:@hostname:port/ENVIRONMENT (Oracle 12.2)
2020-02-27 11:41:52,460 [instance=] [main] INFO  org.flywaydb.core.internal.command.DbValidate (Slf4jLog.java:44) - Validated 8 migrations (execution time 00:01.063s)
2020-02-27 11:41:53,128 [instance=] [main] WARN  org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext (AbstractApplicationContext.java:551) - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'flywayInitializer' defined in class path resource [org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration$FlywayConfiguration.class]: Invocation of init method failed; nested exception is org.flywaydb.core.api.FlywayException: Validate failed. Migration Checksum mismatch for migration 2019.4.1.1
-> Applied to database : 1659809745
-> Resolved locally    : 1875162162
2020-02-27 11:41:53,129 [instance=] [main] INFO  org.apache.catalina.core.StandardService (DirectJDKLog.java:180) - Stopping service [Tomcat]
2020-02-27 11:41:53,153 [instance=] [main] INFO  org.springframework.boot.autoconfigure.logging.AutoConfigurationReportLoggingInitializer (AutoConfigurationReportLoggingInitializer.java:101) - 

Error starting ApplicationContext. To display the auto-configuration report re-run your application with 'debug' enabled.
2020-02-27 11:41:53,160 [instance=] [main] ERROR org.springframework.boot.SpringApplication (SpringApplication.java:771) - Application startup failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'flywayInitializer' defined in class path resource [org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration$FlywayConfiguration.class]: Invocation of init method failed; nested exception is org.flywaydb.core.api.FlywayException: Validate failed. Migration Checksum mismatch for migration 2019.4.1.1
-> Applied to database : 1659809745
-> Resolved locally    : 1875162162
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1628)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:296)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
    at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1080)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:857)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:543)
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122)
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:693)
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:360)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:303)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1118)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1107)
    at com.domain.app.myapp.MyServiceApplication.main(MyServiceApplication.java:30)
Caused by: org.flywaydb.core.api.FlywayException: Validate failed. Migration Checksum mismatch for migration 2019.4.1.1
-> Applied to database : 1659809745
-> Resolved locally    : 1875162162
    at org.flywaydb.core.Flyway.doValidate(Flyway.java:1108)
    at org.flywaydb.core.Flyway.access$300(Flyway.java:62)
    at org.flywaydb.core.Flyway$1.execute(Flyway.java:1012)
    at org.flywaydb.core.Flyway$1.execute(Flyway.java:1006)
    at org.flywaydb.core.Flyway.execute(Flyway.java:1418)
    at org.flywaydb.core.Flyway.migrate(Flyway.java:1006)
    at org.springframework.boot.autoconfigure.flyway.FlywayMigrationInitializer.afterPropertiesSet(FlywayMigrationInitializer.java:66)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1687)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1624)
    ... 18 more

Process finished with exit code 1

Я восстановил контрольные суммы с помощью mvn flyway:repair и смог запустить службу локально. Хотя K8s все еще показывал похожую ошибку. На этот раз я взял эти контрольные суммы вручную из журналов ошибок экземпляра K8s (Resolved Locally) и поместил эти контрольные суммы по одной в схему пролета. Это заставило работать экземпляр K8s, но теперь мой локальный экземпляр не может выдать ошибку контрольной суммы.

Есть идеи, где я мог бы использовать неправильный подход? Хост базы данных для локальных экземпляров и экземпляров K8 одинаков. Я не уверен, почему только один из них может проверить Миграции в одном заданном сценарии.

(я изменил имена файлов по очевидным причинам)

...