Upgrading from Liquibase 3.3.2 to Liquibase 4.4.3 - checksum algorithm has changed

Hi.

We are upgrading from Liquibase 3.3.2 to version 4.4.3.

We have a Postgres database created from changesets defined in Liquibase 3.3.2. Running the version 3.3.2 validate command against this database and pointing to our master changelog file shows the message “No validation errors found” - as expected.

However, running the equivalent validate command using the 4.4.3 version of Liquibase against the same Postgres database and same master changelog file shows the message “300 change sets have changed since they were ran against the database”. (NB: There have been no database changes (new changesets) in between running the two commands.)

Example output:

$ liquibase-4.4.3\liquibase.bat --changelog-file=masterChangeLog.xml --url=jdbc:postgresql://localhost:38000/[databaseName] --driver-properties-file=liquibase.properties validate

Starting Liquibase at 15:38:40 (version 4.4.3 #53 built at 2021-08-05 18:32+0000)
Liquibase Version: 4.4.3
Liquibase Community 4.4.3 by Datical
Validation Error:
     300 change sets have changed since they were ran against the database
          ChangeLog-6.1.0.xml::[changesetName1]::[username] was: 7:b135dc4c148a772d6c6f9b65eb8f81ab but is now: 8:745d7f24706f71f4ebe37973afde398c
          ChangeLog-6.1.0.xml::[changesetName2]::[username]  was: 7:cb6cb2cd402ae5193748eb82a872d9ba but is now: 8:71adf6ff457d112cc15f83e16de5dc92
...etc.
...etc.

I have noticed that there appears to be some sort of algorithm version change in the md5sum before and after values, e.g. "7:..." versus "8:...".

How should I proceed before using the 4.4.3 version of the update command?

Thanks,

Ian C.

I don’t know anything about an algorithm change, but you could run the clearCheckSums to remove the MD5SUMs, then run update which will recalculate them.

https://docs.liquibase.com/commands/community/clearchecksums.html

1 Like

Hi @IanClaridge, there has been a change in the way the checksums are calculated. I have seen some information about this in the past as we had the same issue very early on in our project, but unfortunately I can’t find the same information that I’d seen before any more. There is however this, which mentions that there was indeed a change: Checksums change between 2 liquibase versions: moving from 3.6.3 to 3.8.9 · Issue #1681 · liquibase/liquibase · GitHub

I think the main change was that the algorithm version (i.e. 7: > 8: ) changed, but it looks like that did also affect the rest of the checksum

Obviously knowing what and why doesn’t necessarily help you but I thought that might be useful info.

One other option for proceeding with this is to include the <validCheckSum> tag for every changeset with the old checksum value, however if you have 300 changesets then that’s obviously a lot of effort.

If you do go down the route of using the clearCheckSums command that daryldoak mentioned then I’d suggest testing it on a non-production db first and also make sure that you run it on a db that you know is already up to date so that when you run update again after clearing the checksums it will just re-populate the new checksums and won’t try to run any new changesets.

Hope that helps
Dave

2 Likes

Thanks @devdave and @daryldoak.

I’ll certainly be trying the clearCheckSums command, and testing it first against a non-prod database.

Kind regards,

Ian.