30億のデバイスで走るHonMarkHunt

JavaとJavaScriptと恐竜の絶滅について書いていきます。

調子乗ってたらflywayのstateが「ignored」になったときの対象法

https://flywaydb.org/assets/logo/flyway-logo-tm-sm.png

内容

こんな感じになっちゃったときの対処法

+---------+---------------------------------------------------+---------------------+---------+
| Version | Description                                       | Installed on        | State   |
+---------+---------------------------------------------------+---------------------+---------+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| 1.150   | update tsv schemas                                | 2017-06-22 02:33:13 | Success |
| 1.151   | drop column user setting                          | 2017-06-22 06:16:45 | Success |
| 1.152   | add category monitor column                       | 2017-07-03 02:59:44 | Success |
| 1.153   | create manager history                            |                     | Ignored | <= コレ
| 1.154   | create level set                                  | 2017-07-06 02:31:04 | Success |
+---------+---------------------------------------------------+---------------------+---------+

原因

  • flywayのshema versionは新しいものから実行されていくので、↑の例でいくと1.154を先に追加してmigrateした後に1.153を追加すると発生する
  • 普通に開発してればまず起こらなそうだが、以下のように調子にのると発生する。
ぼく 「佐藤さん(仮)の作業にmigrationありますよね!」
佐藤さん(仮) 「はい」
ぼく 「ぼくもあるんで番号かぶってconflictしないようにしましょう!」
佐藤さん(仮) 「はい」
ぼく 「ぼくの方が先にmergeするんで、ぼくが153使うんで佐藤さん(仮)は154にしてください!」
佐藤さん(仮) 「はい」
  • これで佐藤さん(仮)が先にmergeすると↑の状態になる

対応

  • stateがignoredになると、flyway migrateしようがflyway repairしようが実行されなくなる、辛い。
  • flyway migrate時のオプションにoutOfOrder=trueを指定すると実行される

f:id:HonMarkHunt:20170706181255p:plain

https://flywaydb.org/documentation/commandline/migrate

結果

  • こんなんなる
+---------+---------------------------------------------------+---------------------+---------+
| Version | Description                                       | Installed on        | State   |
+---------+---------------------------------------------------+---------------------+---------+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| 1.150   | update tsv schemas                                | 2017-06-22 02:33:13 | Success |
| 1.151   | drop column user setting                          | 2017-06-22 06:16:45 | Success |
| 1.152   | add category monitor column                       | 2017-07-03 02:59:44 | Success |
| 1.153   | create manager history                            |                     | OutOrdr | 
| 1.154   | create level set                                  | 2017-07-06 02:31:04 | OutOrdr |
+---------+---------------------------------------------------+---------------------+---------+
  • stateがOutOrdrになっている
  • 完全に意味不明である

OutOrdr

教訓

  • 調子のってmigration番号の先読みはしない
  • conflictさせて修正したほうが安全
  • 佐藤さん(仮)は想像より作業が早い