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());
+
+    }
 }

Reply via email to