This is an automated email from the ASF dual-hosted git repository.
weizhou pushed a commit to branch 4.18
in repository https://gitbox.apache.org/repos/asf/cloudstack.git
The following commit(s) were added to refs/heads/4.18 by this push:
new 9c9b17885ff upgrade: fix upgrade from 4.18.1.0 to 4.18.2.0-SNAPSHOT
(#7959)
9c9b17885ff is described below
commit 9c9b17885ff4ccf256fc6c515e612ce90cceace5
Author: Wei Zhou <[email protected]>
AuthorDate: Mon Sep 18 19:14:36 2023 +0200
upgrade: fix upgrade from 4.18.1.0 to 4.18.2.0-SNAPSHOT (#7959)
The uprgade from 4.18.1.0 to 4.18.2.0-SNAPSHOT failed with error
```
2023-09-12 16:12:19,003 INFO [c.c.u.DatabaseUpgradeChecker] (main:null)
(logid:) DB version = 4.18.1.0 Code Version = 4.18.2.0
2023-09-12 16:12:19,004 INFO [c.c.u.DatabaseUpgradeChecker] (main:null)
(logid:) Database upgrade must be performed from 4.18.1.0 to 4.18.2.0
2023-09-12 16:12:19,036 DEBUG [c.c.u.DatabaseUpgradeChecker] (main:null)
(logid:) Running upgrade Upgrade41800to41810 to upgrade from 4.18.0.0-4.18.1.0
to 4.18.1.0
...
2023-09-12 16:12:19,041 DEBUG [c.c.u.d.ScriptRunner] (main:null) (logid:)
-- Schema upgrade from 4.18.0.0 to 4.18.1.0
...
2023-09-12 16:12:21,602 DEBUG [c.c.u.d.DatabaseAccessObject] (main:null)
(logid:) Statement: CREATE INDEX i_cluster_details__name on cluster_details
(name)
2023-09-12 16:12:21,663 DEBUG [c.c.u.d.DatabaseAccessObject] (main:null)
(logid:) Created index i_cluster_details__name
2023-09-12 16:12:21,673 DEBUG [c.c.u.d.T.Transaction] (main:null) (logid:)
Rolling back the transaction: Time = 2632 Name = Upgrade; called by
-TransactionLegacy.rollback:888-TransactionLegacy.removeUpTo:831-TransactionLegacy.close:655-TransactionContextInterceptor.invoke:36-ReflectiveMethodInvocation.proceed:175-ExposeInvocationInterceptor.invoke:97-ReflectiveMethodInvocation.proceed:186-JdkDynamicAopProxy.invoke:215-$Proxy30.persist:-1-DatabaseUpgradeChecker.upgrade:319-DatabaseUpg
[...]
```
It succeeded with this change.
---
.../com/cloud/upgrade/DatabaseUpgradeChecker.java | 4 ++++
.../cloud/upgrade/DatabaseVersionHierarchy.java | 9 +++++++++
.../cloud/upgrade/DatabaseUpgradeCheckerTest.java | 23 ++++++++++++++++++++--
3 files changed, 34 insertions(+), 2 deletions(-)
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);
+ }
}