diff --git a/engine/schema/src/main/java/com/cloud/upgrade/DatabaseUpgradeChecker.java b/engine/schema/src/main/java/com/cloud/upgrade/DatabaseUpgradeChecker.java index 73757864e5e..e5b2df77ccf 100644 --- a/engine/schema/src/main/java/com/cloud/upgrade/DatabaseUpgradeChecker.java +++ b/engine/schema/src/main/java/com/cloud/upgrade/DatabaseUpgradeChecker.java @@ -504,4 +504,8 @@ public class DatabaseUpgradeChecker implements SystemIntegrityChecker { } } } + + public CloudStackVersion getLatestVersion() { + return hierarchy.getLatestVersion(); + } } diff --git a/engine/schema/src/main/java/com/cloud/upgrade/DatabaseVersionHierarchy.java b/engine/schema/src/main/java/com/cloud/upgrade/DatabaseVersionHierarchy.java index 8f27261b78f..445a59310fb 100644 --- a/engine/schema/src/main/java/com/cloud/upgrade/DatabaseVersionHierarchy.java +++ b/engine/schema/src/main/java/com/cloud/upgrade/DatabaseVersionHierarchy.java @@ -88,6 +88,11 @@ public final class DatabaseVersionHierarchy { return new DbUpgrade[0]; } + // The CloudStack version is latest or higher than latest + if (fromVersion.compareTo(getLatestVersion()) >= 0) { + return new DbUpgrade[0]; + } + // we cannot find the version specified, so get the // most recent one immediately before this version if (!contains(fromVersion)) { @@ -184,4 +189,8 @@ public final class DatabaseVersionHierarchy { return new DatabaseVersionHierarchy(ImmutableList.copyOf(hierarchyBuilder)); } } + + public CloudStackVersion getLatestVersion() { + return CloudStackVersion.parse(hierarchy.get(hierarchy.size() - 1).upgrader.getUpgradedVersion()); + } } diff --git a/engine/schema/src/test/java/com/cloud/upgrade/DatabaseUpgradeCheckerTest.java b/engine/schema/src/test/java/com/cloud/upgrade/DatabaseUpgradeCheckerTest.java index 4f5c62cc888..d7ef18a4f32 100644 --- a/engine/schema/src/test/java/com/cloud/upgrade/DatabaseUpgradeCheckerTest.java +++ b/engine/schema/src/test/java/com/cloud/upgrade/DatabaseUpgradeCheckerTest.java @@ -167,8 +167,8 @@ public class DatabaseUpgradeCheckerTest { final DatabaseUpgradeChecker checker = new DatabaseUpgradeChecker(); final DbUpgrade[] upgrades = checker.calculateUpgradePath(dbVersion, currentVersion); assertNotNull(upgrades); - assertEquals("We should have 2 upgrade steps", 2, upgrades.length); - assertTrue(upgrades[1] instanceof NoopDbUpgrade); + assertEquals("We should have 1 upgrade step", 1, upgrades.length); + assertTrue(upgrades[0] instanceof NoopDbUpgrade); } @@ -204,4 +204,23 @@ public class DatabaseUpgradeCheckerTest { assertTrue(upgrades[0] instanceof Upgrade41510to41520); assertTrue(upgrades[upgrades.length - 1] instanceof Upgrade41610to41700); } + + @Test + public void testCalculateUpgradePathFromLatestDbVersion() { + final DatabaseUpgradeChecker checker = new DatabaseUpgradeChecker(); + + final CloudStackVersion dbVersion = checker.getLatestVersion(); + assertNotNull(dbVersion); + + final CloudStackVersion currentVersion = CloudStackVersion.parse(dbVersion.getMajorRelease() + "." + + dbVersion.getMinorRelease() + "." + + dbVersion.getPatchRelease() + "." + + (dbVersion.getSecurityRelease() + 1)); + assertNotNull(currentVersion); + + final DbUpgrade[] upgrades = checker.calculateUpgradePath(dbVersion, currentVersion); + assertNotNull(upgrades); + assertEquals("We should have 1 upgrade step", 1, upgrades.length); + assertTrue(upgrades[0] instanceof NoopDbUpgrade); + } }