Skip to content

Commit ea89141

Browse files
committed
upgrade: skip the upgrade paths which are not needed
1 parent c19630f commit ea89141

File tree

2 files changed

+25
-1
lines changed

2 files changed

+25
-1
lines changed

engine/schema/src/main/java/com/cloud/upgrade/DatabaseVersionHierarchy.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
// under the License.
1717
package com.cloud.upgrade;
1818

19+
import java.util.Arrays;
1920
import java.util.LinkedList;
2021
import java.util.List;
2122
import java.util.Map;
@@ -96,7 +97,9 @@ public DbUpgrade[] getPath(final CloudStackVersion fromVersion, final CloudStack
9697
// we cannot find the version specified, so get the
9798
// most recent one immediately before this version
9899
if (!contains(fromVersion)) {
99-
return getPath(getRecentVersion(fromVersion), toVersion);
100+
DbUpgrade[] dbUpgrades = getPath(getRecentVersion(fromVersion), toVersion);
101+
return Arrays.stream(dbUpgrades).filter(up -> CloudStackVersion.compare(up.getUpgradedVersion(), fromVersion.toString()) > 0)
102+
.toArray(DbUpgrade[]::new);
100103
}
101104

102105
final Predicate<? super VersionNode> predicate;

engine/schema/src/test/java/com/cloud/upgrade/DatabaseUpgradeCheckerTest.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
import com.cloud.upgrade.dao.Upgrade41120to41200;
4545
import com.cloud.upgrade.dao.Upgrade41510to41520;
4646
import com.cloud.upgrade.dao.Upgrade41610to41700;
47+
import com.cloud.upgrade.dao.Upgrade42020to42030;
4748
import com.cloud.upgrade.dao.Upgrade452to453;
4849
import com.cloud.upgrade.dao.Upgrade453to460;
4950
import com.cloud.upgrade.dao.Upgrade460to461;
@@ -380,4 +381,24 @@ public void isNotStandalone() throws SQLException {
380381
assertFalse("DatabaseUpgradeChecker should not be a standalone component", checker.isStandalone());
381382
}
382383

384+
@Test
385+
public void testCalculateUpgradePath42010to42030() {
386+
387+
final CloudStackVersion dbVersion = CloudStackVersion.parse("4.20.1.0");
388+
assertNotNull(dbVersion);
389+
390+
final CloudStackVersion currentVersion = CloudStackVersion.parse("4.20.3.0");
391+
assertNotNull(currentVersion);
392+
393+
final DatabaseUpgradeChecker checker = new DatabaseUpgradeChecker();
394+
final DbUpgrade[] upgrades = checker.calculateUpgradePath(dbVersion, currentVersion);
395+
396+
assertNotNull(upgrades);
397+
assertEquals(1, upgrades.length);
398+
assertTrue(upgrades[0] instanceof Upgrade42020to42030);
399+
400+
assertArrayEquals(new String[]{"4.20.2.0", "4.20.3.0"}, upgrades[0].getUpgradableVersionRange());
401+
assertEquals(currentVersion.toString(), upgrades[0].getUpgradedVersion());
402+
403+
}
383404
}

0 commit comments

Comments
 (0)