This is an automated email from the ASF dual-hosted git repository.
abhisar pushed a commit to branch 4.20
in repository https://gitbox.apache.org/repos/asf/cloudstack.git
The following commit(s) were added to refs/heads/4.20 by this push:
new 4b7370a6017 upgrade: skip the upgrade paths which are not needed
(#12881)
4b7370a6017 is described below
commit 4b7370a6017a6b886576790ed5f284a884abb172
Author: Wei Zhou <[email protected]>
AuthorDate: Thu Mar 26 08:38:12 2026 +0100
upgrade: skip the upgrade paths which are not needed (#12881)
* upgrade: skip the upgrade paths which are not needed
---
.../com/cloud/upgrade/DatabaseVersionHierarchy.java | 5 ++++-
.../resources/META-INF/db/schema-42000to42010.sql | 2 +-
.../cloud/upgrade/DatabaseUpgradeCheckerTest.java | 21 +++++++++++++++++++++
3 files changed, 26 insertions(+), 2 deletions(-)
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 445a59310fb..377b2f91375 100644
---
a/engine/schema/src/main/java/com/cloud/upgrade/DatabaseVersionHierarchy.java
+++
b/engine/schema/src/main/java/com/cloud/upgrade/DatabaseVersionHierarchy.java
@@ -16,6 +16,7 @@
// under the License.
package com.cloud.upgrade;
+import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
@@ -96,7 +97,9 @@ public final class DatabaseVersionHierarchy {
// we cannot find the version specified, so get the
// most recent one immediately before this version
if (!contains(fromVersion)) {
- return getPath(getRecentVersion(fromVersion), toVersion);
+ DbUpgrade[] dbUpgrades = getPath(getRecentVersion(fromVersion),
toVersion);
+ return Arrays.stream(dbUpgrades).filter(up ->
CloudStackVersion.compare(up.getUpgradedVersion(), fromVersion.toString()) > 0)
+ .toArray(DbUpgrade[]::new);
}
final Predicate<? super VersionNode> predicate;
diff --git
a/engine/schema/src/main/resources/META-INF/db/schema-42000to42010.sql
b/engine/schema/src/main/resources/META-INF/db/schema-42000to42010.sql
index 3dd6c18f57c..4405250f271 100644
--- a/engine/schema/src/main/resources/META-INF/db/schema-42000to42010.sql
+++ b/engine/schema/src/main/resources/META-INF/db/schema-42000to42010.sql
@@ -31,7 +31,7 @@ CALL `cloud`.`IDEMPOTENT_ADD_COLUMN`('cloud.account',
'api_key_access', 'boolean
CALL `cloud_usage`.`IDEMPOTENT_ADD_COLUMN`('cloud_usage.account',
'api_key_access', 'boolean DEFAULT NULL COMMENT "is api key access allowed for
the account" ');
-- Create a new group for Usage Server related configurations
-INSERT INTO `cloud`.`configuration_group` (`name`, `description`,
`precedence`) VALUES ('Usage Server', 'Usage Server related configuration', 9);
+INSERT IGNORE INTO `cloud`.`configuration_group` (`name`, `description`,
`precedence`) VALUES ('Usage Server', 'Usage Server related configuration', 9);
UPDATE `cloud`.`configuration_subgroup` set `group_id` = (SELECT `id` FROM
`cloud`.`configuration_group` WHERE `name` = 'Usage Server'), `precedence` = 1
WHERE `name`='Usage';
UPDATE `cloud`.`configuration` SET `group_id` = (SELECT `id` FROM
`cloud`.`configuration_group` WHERE `name` = 'Usage Server') where
`subgroup_id` = (SELECT `id` FROM `cloud`.`configuration_subgroup` WHERE `name`
= 'Usage');
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 27995eb179a..1b84fc3a9e3 100644
---
a/engine/schema/src/test/java/com/cloud/upgrade/DatabaseUpgradeCheckerTest.java
+++
b/engine/schema/src/test/java/com/cloud/upgrade/DatabaseUpgradeCheckerTest.java
@@ -44,6 +44,7 @@ import com.cloud.upgrade.dao.Upgrade41120to41130;
import com.cloud.upgrade.dao.Upgrade41120to41200;
import com.cloud.upgrade.dao.Upgrade41510to41520;
import com.cloud.upgrade.dao.Upgrade41610to41700;
+import com.cloud.upgrade.dao.Upgrade42020to42030;
import com.cloud.upgrade.dao.Upgrade452to453;
import com.cloud.upgrade.dao.Upgrade453to460;
import com.cloud.upgrade.dao.Upgrade460to461;
@@ -380,4 +381,24 @@ public class DatabaseUpgradeCheckerTest {
assertFalse("DatabaseUpgradeChecker should not be a standalone
component", checker.isStandalone());
}
+ @Test
+ public void testCalculateUpgradePath42010to42030() {
+
+ final CloudStackVersion dbVersion =
CloudStackVersion.parse("4.20.1.0");
+ assertNotNull(dbVersion);
+
+ final CloudStackVersion currentVersion =
CloudStackVersion.parse("4.20.3.0");
+ assertNotNull(currentVersion);
+
+ final DatabaseUpgradeChecker checker = new DatabaseUpgradeChecker();
+ final DbUpgrade[] upgrades = checker.calculateUpgradePath(dbVersion,
currentVersion);
+
+ assertNotNull(upgrades);
+ assertEquals(1, upgrades.length);
+ assertTrue(upgrades[0] instanceof Upgrade42020to42030);
+
+ assertArrayEquals(new String[]{"4.20.2.0", "4.20.3.0"},
upgrades[0].getUpgradableVersionRange());
+ assertEquals(currentVersion.toString(),
upgrades[0].getUpgradedVersion());
+
+ }
}