[BUG] Found more than one migration with version 160 (Docker Compose mysql-victoria version)
- Dominant language
- Java
- Stars
- 7.4k
- Forks
- 1.3k
- Avg merge
- 1d 20h
- Merged PRs (30d)
- 32
Description
### Is there an existing issue for this?
- [X] I have searched the existing issues
### Current Behavior
Upon running `docker compose up -d` I'm getting an error in 'compose-hertzbeat' stating there's multiple migration files.
> /opt/hertzbeat/file:/opt/hertzbeat/apache-hertzbeat-1.6.0.jar!/db/migration/h2/V160__update_column.sql (SQL)
> /opt/hertzbeat/file:/opt/hertzbeat/apache-hertzbeat-1.6.0.jar!/db/migration/mysql/V160__update_column.sql (SQL)
Despite my best efforts to locate these I haven't been able to find them or experiment with removing one of them.
### Expected Behavior
Hertzbeat handles the multiple files gracefully, or improved documentation for remediation.
### Steps To Reproduce
1. Put mysql connector `mysql-connector-java-8.0.25.jar` into ./ext-lib
2. Create a volume `./ext-lib:/opt/hertzbeat/ext-lib`
3. Remove docker container and image
4. run `docker compose up -d`
### Environment
```markdown
HertzBeat version(s): 1.6.0
Windows 10 Pro Version 22H2 (19045.4529)
Docker Desktop 4.31.1 (153621) (newest version available)
```
### Debug logs
```text
2024-07-04 22:25:27.143 [main] ERROR org.springframework.boot.SpringApplication Line:851 - Application run 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]: Found more than one migration with version 160
Offenders:
-> /opt/hertzbeat/file:/opt/hertzbeat/apache-hertzbeat-1.6.0.jar!/db/migration/h2/V160__update_column.sql (SQL)
-> /opt/hertzbeat/file:/opt/hertzbeat/apache-hertzbeat-1.6.0.jar!/db/migration/mysql/V160__update_column.sql (SQL)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1786)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:600)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:325)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:323)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:312)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1231)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:949)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:624)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:334)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1354)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1343)
at org.apache.hertzbeat.manager.Manager.main(Manager.java:44)
Caused by: org.flywaydb.core.api.FlywayException: Found more than one migration with version 160
Offenders:
-> /opt/hertzbeat/file:/opt/hertzbeat/apache-hertzbeat-1.6.0.jar!/db/migration/h2/V160__update_column.sql (SQL)
-> /opt/hertzbeat/file:/opt/hertzbeat/apache-hertzbeat-1.6.0.jar!/db/migration/mysql/V160__update_column.sql (SQL)
at org.flywaydb.core.internal.resolver.CompositeMigrationResolver.checkForIncompatibilities(CompositeMigrationResolver.java:94)
at org.flywaydb.core.internal.resolver.CompositeMigrationResolver.doFindAvailableMigrations(CompositeMigrationResolver.java:127)
at org.flywaydb.core.internal.resolver.CompositeMigrationResolver.resolveMigrations(CompositeMigrationResolver.java:114)
at org.flywaydb.core.internal.resolver.CompositeMigrationResolver.resolveMigrations(CompositeMigrationResolver.java:120)
at org.flywaydb.core.internal.info.MigrationInfoServiceImpl.refresh(MigrationInfoServiceImpl.java:86)
at org.flywaydb.core.internal.command.DbValidate.lambda$validate$0(DbValidate.java:112)
at org.flywaydb.core.internal.jdbc.TransactionalExecutionTemplate.execute(TransactionalExecutionTemplate.java:59)
at org.flywaydb.core.internal.command.DbValidate.validate(DbValidate.java:105)
at org.flywaydb.core.Flyway.doValidate(Flyway.java:418)
at org.flywaydb.core.Flyway.lambda$migrate$0(Flyway.java:162)
at org.flywaydb.core.FlywayExecutor.execute(FlywayExecutor.java:209)
at org.flywaydb.core.Flyway.migrate(Flyway.java:151)
at org.springframework.boot.autoconfigure.flyway.FlywayMigrationInitializer.afterPropertiesSet(FlywayMigrationInitializer.java:66)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1833)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1782)
... 18 common frames omitted
```
### Anything else?

```yml
version: "3.7"
networks:
hertzbeat:
driver: bridge
services:
mysql:
image: mysql:8
container_name: compose-mysql
hostname: mysql
restart: always
healthcheck:
test: ['CMD-SHELL', 'mysqladmin ping -h 127.0.0.1 --silent']
interval: 3s
retries: 5
start_period: 3m
ports:
- "3306"
environment:
TZ: Asia/Shanghai
MYSQL_ROOT_PASSWORD: 123456
volumes:
- ./dbdata/mysqldata:/var/lib/mysql/
- ./conf/sql:/docker-entrypoint-initdb.d/
networks:
- hertzbeat
victoria-metrics:
image: victoriametrics/victoria-metrics:v1.95.1
container_name: compose-victoria-metrics
hostname: victoria-metrics
restart: always
healthcheck:
test: ["CMD", "wget", "-q", "-O", "-", "http://victoria-metrics:8428/-/healthy"]
interval: 10s
retries: 5
timeout: 5s
start_period: 30s
environment:
TZ: Asia/Shanghai
ports:
- "8428"
volumes:
- ./dbdata/tsdbdata:/victoria-metrics-data
networks:
- hertzbeat
hertzbeat:
image: tancloud/hertzbeat
container_name: compose-hertzbeat
hostname: hertzbeat
restart: always
environment:
TZ: Asia/Shanghai
LANG: zh_CN.UTF-8
depends_on:
mysql:
condition: service_healthy
victoria-metrics:
condition: service_healthy
volumes:
- ./ext-lib:/opt/hertzbeat/ext-lib
- ./conf/application.yml:/opt/hertzbeat/config/application.yml
- ./conf/sureness.yml:/opt/hertzbeat/config/sureness.yml
- ./log:/opt/hertzbeat/logs
- ./conf/enable-mysql-native-password.cnf:/etc/mysql/conf.d/enable-mysql-native-password.cnf
ports:
- "1157:1157"
- "1158:1158"
networks:
- hertzbeat
```
Contributor guide
Research direction
Reproduce the failure with the listed Docker Compose services, the ext-lib mount, and mysql-connector-java-8.0.25.jar. Inspect how migration discovery handles db/migration/h2/V160__update_column.sql and db/migration/mysql/V160__update_column.sql; done means compose-hertzbeat starts without the duplicate-version error and the chosen database migrations still run correctly.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- docker-compose, java, mysql
- Domain
- databases, devops
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 28/100