naver/scavenger

v1.1.1 -> v1.1.2 upgrade failed

Closed this issue · 17 comments

v1.1.1 에서 v1.1.2 업그레이드 도중 다음과 같은 에러가 발생하며 기동이 실패합니다.

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'liquibase' defined in class path resource [org/springframework/boot/autoconfigure/liquibase/LiquibaseAutoConfiguration$LiquibaseConfiguration.class]: Invocation of init method failed; nested exception is liquibase.exception.LiquibaseException: liquibase.exception.MigrationFailedException: Migration failed for change set db/changelog/schema-1.1.2.sql::raw::includeAll:
     Reason: liquibase.exception.DatabaseException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '--changeset scavenger:3

ALTER TABLE snapshot_nodes MODIFY signature TEXT' at line 1 [Failed SQL: (1064) --changeset scavenger:3

API/Collector가 동일한 에러 발생합니다.

DB 구성에 특별히 변경된 내용이 확인되지 않는데, 체크해 볼 부분이 있을까요?
API/Collector/Agent는 EKS container로 구성되었고, RDS MySQL 8.0.mysql_aurora.3.04.1 사용중입니다.

@OhSeungho

안녕하세요.
v1.1.2 릴리즈에서 snapshot_nodes 테이블의 signature 컬럼 타입이 변경되었습니다.

ALTER TABLE snapshot_nodes MODIFY signature TEXT;

(수정) 확인 후 코멘트 드리겠습니다.

@sohyun-ku
schema-1.1.2.sql 에 --liquibase formatted sql 가 빠진 것이 원인은 아닐까요?
https://docs.liquibase.com/concepts/changelogs/sql-format.html

에러가 발생하는 이유는 아래 두 가지로 추정됩니다.

  1. liquibase meta 데이터 누락
  2. DDL script 내 MODIFY (COLUMN) column_name -> COLUMN 키워드 생략
    • COLUMN 키워드의 경우 생략하더라도 MySQL 및 호환 시스템에서 대부분 호환되나 mysql_aurora 특정 버전에서 호환이슈로 지원이 되지 않을 확률이 있어보입니다.

@OhSeungho 님 혹시 로컬환경에서 재현 가능하시다면 아래 브랜치에서 정상적으로 수행되는지 확인 가능하실까요?
해당 브랜치에서 정상 적용된다면 v.1.1.3에 적용하도록 하겠습니다. ( _ _ )
https://github.com/naver/scavenger/tree/feature/modify-ddl-script

@sohyun-ku 해당 브랜치와 동일하게 --liquibase formatted sql를 추가했을 때 Collector 서버는 동일한 에러가 발생하는 점 확인하였습니다.
사용중인 DB가 중간에 교체된 이력이 있는데, 이 부분이 문제점으로 작용할 수 있을까요?

@OhSeungho

해당 브랜치와 동일하게 --liquibase formatted sql를 추가했을 때 Collector 서버는 동일한 에러가 발생하는 점 확인하였습니다.

아래 스크립트로 변경해서 테스트 해보신걸까요?

ALTER TABLE snapshot_nodes MODIFY COLUMN signature TEXT;

@sohyun-ku 해당 브랜치로 collector 서버 동일한 에러 발생합니다. scavenger-schema jar 풀어 내용 확인했을 때 db/changelog/schema-1.1.3.sql 내용 확인하였습니다.

@OhSeungho 안녕하세요 (_ _)
번거로우시겠지만 https://github.com/naver/scavenger/tree/feature/fix-schema-1.1.2-format 를 기준으로 테스트 가능할까요??
사용중인 DB를 교체했다는 말씀이 어떤 말씀이실까요??

@taeyeon-Kim 안녕하세요🙇 해당 브랜치로 테스트 진행해보겠습니다.
초기 랜딩을 kubernetes pod로 올린 mysql을 사용했었고, 이후 8.0.mysql_aurora.3.04.1 데이터 이관 후 사용했습니다.

@taeyeon-Kim 해당 브랜치도 동일 에러 발생합니다😢

ALTER TABLE snapshot_nodes MODIFY signature TEXT;]
	at liquibase.changelog.ChangeLogIterator.run(ChangeLogIterator.java:124)
	at liquibase.Liquibase.lambda$null$0(Liquibase.java:272)
	at liquibase.Scope.lambda$child$0(Scope.java:160)
	at liquibase.Scope.child(Scope.java:169)
	at liquibase.Scope.child(Scope.java:159)
	at liquibase.Scope.child(Scope.java:138)
	at liquibase.Scope.child(Scope.java:222)
	at liquibase.Liquibase.lambda$update$1(Liquibase.java:271)
	at liquibase.Scope.lambda$child$0(Scope.java:160)
	at liquibase.Scope.child(Scope.java:169)
	at liquibase.Scope.child(Scope.java:159)
	at liquibase.Scope.child(Scope.java:138)
	at liquibase.Liquibase.runInScope(Liquibase.java:2369)
	at liquibase.Liquibase.update(Liquibase.java:217)
	at liquibase.Liquibase.update(Liquibase.java:203)
	at liquibase.integration.spring.SpringLiquibase.performUpdate(SpringLiquibase.java:321)
	at liquibase.integration.spring.SpringLiquibase.afterPropertiesSet(SpringLiquibase.java:275)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1863)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1800)
	... 82 common frames omitted
Caused by: liquibase.exception.MigrationFailedException: Migration failed for change set db/changelog/schema-1.1.2.sql::raw::includeAll:
     Reason: liquibase.exception.DatabaseException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '--changeset scavenger:3

@OhSeungho 공식문서 상으로는 mysql_aurora가 mysql이랑 호환된다고하는데.. 이부분 확인해보도록 하겠습니다.

@taeyeon-Kim 혹시 hotfix jar를 제공받을 수 있을까요? 로컬 빌드환경이 제한적이라 테스트에 어려움이 있습니다.

@OhSeungho 깃헙 코멘트상으로는 사이즈 제한때문에 공유가 어려울 것 같습니다.ㅠ
괜찮으시다면.. https://github.com/naver/scavenger/tree/feature/fix-schema-1.1.2-format
fix-schema-1.1.2-format 브랜치에서

  • ./gradlew :scavenger-api:clean :scavenger-api:build 수행(운영에서는 collector 보다 api가 나을 것 같습니다)
  • /scavenger-api/build/libs/scavenger-api-1.1.2-SNAPSHOT.jar의 jar를 사용해보실 수 있을까요??

@taeyeon-Kim 다른 환경에서 api 빌드 후 기동했지만 동일 현상 발생합니다.

➜  libs git:(feature/fix-schema-1.1.2-format) tree
.
├── scavenger-api-1.1.2-SNAPSHOT-plain.jar
└── scavenger-api-1.1.2-SNAPSHOT.jar

1 directory, 2 files

전에 올려주신 내용도 다시 반영해보겠습니다.

ALTER TABLE snapshot_nodes MODIFY COLUMN signature TEXT;

MODIFY COLUMN 구문 추가 후 해결되었습니다. 기존 빌드가 문제가 있던 것 같습니다.(__)
그 다음 step인test-data-set-1.1.2.sql 수행시 Auto_incremnet pk duplicate 에러가 발생하는데요. ( 중복 대상 테이블 : applications, methods, invocations)
명시적으로 삽입하는 id 컬럼을 변형해도 될지 한번 확인 부탁드립니다.

Caused by: liquibase.exception.LiquibaseException: liquibase.exception.MigrationFailedException: Migration failed for change set db/changelog/test-data-set-1.1.2.sql::4::scavenger:
     Reason: liquibase.exception.DatabaseException: Duplicate entry '2' for key 'applications.PRIMARY' [Failed SQL: (1062) INSERT INTO applications (id, customerid, name, createdat)

@OhSeungho test-data-set-1.1.2.sql은 spring profile이 local인 경우 활성화되는데요. 이는 로컬 테스트 데이터입니다.
-Dspring.profiles.active에 다른 값을 줘보시겠어요??

@taeyeon-Kim 정상 기동 확인하였습니다. 코드 이해가 부족하여 번거롭게 해드렸는데 도와주셔서 감사합니다🙇

ALTER TABLE snapshot_nodes MODIFY COLUMN signature TEXT;

위 부분 같이 반영된 내용으로 릴리즈 부탁드리겠습니다. 감사합니다!

@OhSeungho v1.1.2-p1 릴리즈 했습니다.
불편을 드려 죄송합니다. (_ _)