Gymterview
middle

Что такое checksum и зачем он нужен?

Checksum (контрольная сумма) — это MD5-хеш, который Liquibase вычисляет для каждого changeset на основе его содержимого и сохраняет в столбце MD5SUM таблицы DATABASECHANGELOG.

Зачем нужен checksum

  • Обнаружение изменений — при каждом запуске Liquibase сверяет текущий checksum changeset с сохранённым в БД. Если они не совпадают, значит, уже применённый changeset был изменён
  • Защита целостности — гарантирует, что миграции идемпотентны и выполняются одинаково на всех окружениях

Что делать при ошибке checksum

Ошибка Validation Failed: X changeset(s) had their checksum changed возникает, когда содержимое уже применённого changeset было изменено.

Способы решения:

  1. Откатить изменение changeset — вернуть его к исходному виду (предпочтительный вариант)

  2. Выполнить clearCheckSums — сбрасывает все checksum, при следующем запуске они будут пересчитаны:

    Пример
    liquibase clearCheckSums
    

    Это безопасно, так как Liquibase просто пересчитает checksum для всех changeset-ов и запишет новые значения.

  3. Установить validCheckSum — разрешить конкретный changeset с определённым checksum:

    Пример
    <changeSet id="1" author="ivanov">
        <validCheckSum>8:a]b234cf56</validCheckSum>
        <validCheckSum>ANY</validCheckSum>
        <!-- ... -->
    </changeSet>
    

Ключевое правило: никогда не изменяйте уже применённые changeset-ы. Если нужно внести изменения — создайте новый changeset.

На собеседовании: интервьюер хочет услышать не только «что такое checksum», но и как действовать при ошибке. Частая ошибка — предлагать clearCheckSums как первый способ, тогда как правильный подход — не менять уже применённые changeset-ы.