private static void handleCorrectBuildVersion(final BootstrapInfo bootstrapInfo,
                                                  final String msgSuffix) {
        final UpgradeOutcome upgradeOutcome = bootstrapInfo.getUpgradeOutcome()
                .orElseThrow(() -> new RuntimeException("Null upgradeOutcome, should not have got here."));
        switch (upgradeOutcome) {
            case SUCCESS -> {
                LOGGER.info("Found required build version '{}' in table '{}' with upgrade outcome {}, " +
                            msgSuffix,
                        bootstrapInfo.getBuildVersion(),
                        BUILD_VERSION_TABLE_NAME,
                        upgradeOutcome);

                // Quickly drop out of the lock so the other waiting nodes can find this out.
            }
            case FAILED -> {
                // Another node has failed when upgrading to this ver
                logFailureAndThrow(bootstrapInfo);
            }
            default -> throw new RuntimeException("Null upgradeOutcome, should never happen");
        }
    }
Use a table lock on a noddy table created just for this purpose to enforce
a cluster wide lock so we can do all the flyway migrations in isolation.
Flyway migrations should work under lock but we have lots of independent flyway
migrations so it is safer to do it this way.
Can't user the cluster lock service as that is not a thing at this point.
stroom-app/src/main/java/stroom/app/BootstrapUtil.java