Skip to content

Commit 39be231

Browse files
weizhouapacherohityadavcloud
authored andcommitted
upgrade: fix upgrade from 4.18.1.0 to 4.18.2.0-SNAPSHOT (apache#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-DatabaseUpgradeChecker.check:403-CloudStackExtendedLifeCycle.checkIntegrity:64 ``` It succeeded with this change. Signed-off-by: Rohit Yadav <[email protected]> (cherry picked from commit e988be6) Signed-off-by: Rohit Yadav <[email protected]>
1 parent dff93c9 commit 39be231

File tree

3 files changed

+34
-2
lines changed

3 files changed

+34
-2
lines changed

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -504,4 +504,8 @@ public void updateSystemVmTemplates(Connection conn) {
504504
}
505505
}
506506
}
507+
508+
public CloudStackVersion getLatestVersion() {
509+
return hierarchy.getLatestVersion();
510+
}
507511
}

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,11 @@ public DbUpgrade[] getPath(final CloudStackVersion fromVersion, final CloudStack
8888
return new DbUpgrade[0];
8989
}
9090

91+
// The CloudStack version is latest or higher than latest
92+
if (fromVersion.compareTo(getLatestVersion()) >= 0) {
93+
return new DbUpgrade[0];
94+
}
95+
9196
// we cannot find the version specified, so get the
9297
// most recent one immediately before this version
9398
if (!contains(fromVersion)) {
@@ -184,4 +189,8 @@ public DatabaseVersionHierarchy build() {
184189
return new DatabaseVersionHierarchy(ImmutableList.copyOf(hierarchyBuilder));
185190
}
186191
}
192+
193+
public CloudStackVersion getLatestVersion() {
194+
return CloudStackVersion.parse(hierarchy.get(hierarchy.size() - 1).upgrader.getUpgradedVersion());
195+
}
187196
}

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

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -167,8 +167,8 @@ public void testCalculateUpgradePathUnkownDbVersion() {
167167
final DatabaseUpgradeChecker checker = new DatabaseUpgradeChecker();
168168
final DbUpgrade[] upgrades = checker.calculateUpgradePath(dbVersion, currentVersion);
169169
assertNotNull(upgrades);
170-
assertEquals("We should have 2 upgrade steps", 2, upgrades.length);
171-
assertTrue(upgrades[1] instanceof NoopDbUpgrade);
170+
assertEquals("We should have 1 upgrade step", 1, upgrades.length);
171+
assertTrue(upgrades[0] instanceof NoopDbUpgrade);
172172

173173
}
174174

@@ -204,4 +204,23 @@ public void testCalculateUpgradePathFromUnregisteredSecVersion() {
204204
assertTrue(upgrades[0] instanceof Upgrade41510to41520);
205205
assertTrue(upgrades[upgrades.length - 1] instanceof Upgrade41610to41700);
206206
}
207+
208+
@Test
209+
public void testCalculateUpgradePathFromLatestDbVersion() {
210+
final DatabaseUpgradeChecker checker = new DatabaseUpgradeChecker();
211+
212+
final CloudStackVersion dbVersion = checker.getLatestVersion();
213+
assertNotNull(dbVersion);
214+
215+
final CloudStackVersion currentVersion = CloudStackVersion.parse(dbVersion.getMajorRelease() + "."
216+
+ dbVersion.getMinorRelease() + "."
217+
+ dbVersion.getPatchRelease() + "."
218+
+ (dbVersion.getSecurityRelease() + 1));
219+
assertNotNull(currentVersion);
220+
221+
final DbUpgrade[] upgrades = checker.calculateUpgradePath(dbVersion, currentVersion);
222+
assertNotNull(upgrades);
223+
assertEquals("We should have 1 upgrade step", 1, upgrades.length);
224+
assertTrue(upgrades[0] instanceof NoopDbUpgrade);
225+
}
207226
}

0 commit comments

Comments
 (0)