Skip to content

Commit 7b03b74

Browse files
committed
Merge pull request #1768 from exoscale/fix/CLOUDSTACK-9601
CLOUDSTACK 9601: Upgrade: change logic for update path for filesFor going from version A to version D, it uses to run the SQL files in that order: A -> B -> C -> D -> A-cleanup -> B-cleanup -> C-cleanup -> D-cleanup. If you had upgraded each version separatively you would have run A -> A-cleanup -> B -> B-cleanup -> C -> C-cleanup -> D -> D-cleanup. This change the logic to follow the same path if you are jumping over versions. Signed-off-by: Marc-Aurle Brothier <m@brothier.org> * pr/1768: Upgrade: change logic for update path for files Signed-off-by: Rajani Karuturi <rajani.karuturi@accelerite.com>
2 parents a64f3f1 + ea8814f commit 7b03b74

1 file changed

Lines changed: 31 additions & 79 deletions

File tree

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

Lines changed: 31 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -88,16 +88,12 @@
8888
import java.io.FileReader;
8989
import java.io.IOException;
9090
import java.sql.Connection;
91-
import java.sql.PreparedStatement;
92-
import java.sql.ResultSet;
9391
import java.sql.SQLException;
94-
import java.util.ArrayList;
9592
import java.util.Arrays;
9693
import java.util.Date;
9794
import java.util.HashMap;
9895
import java.util.List;
9996
import java.util.Map;
100-
import java.util.TreeMap;
10197

10298
import static com.google.common.base.Preconditions.checkArgument;
10399
import static com.google.common.collect.Lists.newArrayList;
@@ -406,6 +402,7 @@ protected void upgrade(CloudStackVersion dbVersion, CloudStackVersion currentVer
406402
}
407403

408404
for (DbUpgrade upgrade : upgrades) {
405+
VersionVO version;
409406
s_logger.debug("Running upgrade " + upgrade.getClass().getSimpleName() + " to upgrade from " + upgrade.getUpgradableVersionRange()[0] + "-" +
410407
upgrade.getUpgradableVersionRange()[1] + " to " + upgrade.getUpgradedVersion());
411408
TransactionLegacy txn = TransactionLegacy.open("Upgrade");
@@ -427,27 +424,9 @@ protected void upgrade(CloudStackVersion dbVersion, CloudStackVersion currentVer
427424
}
428425

429426
upgrade.performDataMigration(conn);
430-
boolean upgradeVersion = true;
431-
432-
if (upgrade.getUpgradedVersion().equals("2.1.8")) {
433-
// we don't have VersionDao in 2.1.x
434-
upgradeVersion = false;
435-
} else if (upgrade.getUpgradedVersion().equals("2.2.4")) {
436-
try(PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM version WHERE version='2.2.4'");
437-
ResultSet rs = pstmt.executeQuery();) {
438-
// specifically for domain vlan update from 2.1.8 to 2.2.4
439-
if (rs.next()) {
440-
upgradeVersion = false;
441-
}
442-
} catch (SQLException e) {
443-
throw new CloudRuntimeException("Unable to update the version table", e);
444-
}
445-
}
446427

447-
if (upgradeVersion) {
448-
VersionVO version = new VersionVO(upgrade.getUpgradedVersion());
449-
_dao.persist(version);
450-
}
428+
version = new VersionVO(upgrade.getUpgradedVersion());
429+
version = _dao.persist(version);
451430

452431
txn.commit();
453432
} catch (CloudRuntimeException e) {
@@ -457,69 +436,42 @@ protected void upgrade(CloudStackVersion dbVersion, CloudStackVersion currentVer
457436
} finally {
458437
txn.close();
459438
}
460-
}
461-
462-
if (true) { // FIXME Needs to detect if management servers are running
463-
// !ClusterManagerImpl.arePeersRunning(trimmedCurrentVersion)) {
464-
s_logger.info("Cleaning upgrades because all management server are now at the same version");
465-
TreeMap<String, List<DbUpgrade>> upgradedVersions = new TreeMap<String, List<DbUpgrade>>();
466439

467-
for (DbUpgrade upgrade : upgrades) {
468-
String upgradedVerson = upgrade.getUpgradedVersion();
469-
List<DbUpgrade> upgradeList = upgradedVersions.get(upgradedVerson);
470-
if (upgradeList == null) {
471-
upgradeList = new ArrayList<DbUpgrade>();
472-
}
473-
upgradeList.add(upgrade);
474-
upgradedVersions.put(upgradedVerson, upgradeList);
475-
}
440+
// Run the corresponding '-cleanup.sql' script
441+
txn = TransactionLegacy.open("Cleanup");
442+
try {
443+
s_logger.info("Cleanup upgrade " + upgrade.getClass().getSimpleName() + " to upgrade from " + upgrade.getUpgradableVersionRange()[0] + "-" +
444+
upgrade.getUpgradableVersionRange()[1] + " to " + upgrade.getUpgradedVersion());
476445

477-
for (String upgradedVersion : upgradedVersions.keySet()) {
478-
List<DbUpgrade> versionUpgrades = upgradedVersions.get(upgradedVersion);
479-
VersionVO version = _dao.findByVersion(upgradedVersion, Step.Upgrade);
480-
s_logger.debug("Upgrading to version " + upgradedVersion + "...");
446+
txn.start();
481447

482-
TransactionLegacy txn = TransactionLegacy.open("Cleanup");
448+
Connection conn;
483449
try {
484-
if (version != null) {
485-
for (DbUpgrade upgrade : versionUpgrades) {
486-
s_logger.info("Cleanup upgrade " + upgrade.getClass().getSimpleName() + " to upgrade from " + upgrade.getUpgradableVersionRange()[0] + "-" +
487-
upgrade.getUpgradableVersionRange()[1] + " to " + upgrade.getUpgradedVersion());
488-
489-
txn.start();
490-
491-
Connection conn;
492-
try {
493-
conn = txn.getConnection();
494-
} catch (SQLException e) {
495-
String errorMessage = "Unable to cleanup the database";
496-
s_logger.error(errorMessage, e);
497-
throw new CloudRuntimeException(errorMessage, e);
498-
}
499-
500-
File[] scripts = upgrade.getCleanupScripts();
501-
if (scripts != null) {
502-
for (File script : scripts) {
503-
runScript(conn, script);
504-
s_logger.debug("Cleanup script " + script.getAbsolutePath() + " is executed successfully");
505-
}
506-
}
507-
txn.commit();
508-
}
509-
510-
txn.start();
511-
version.setStep(Step.Complete);
512-
s_logger.debug("Upgrade completed for version " + upgradedVersion);
513-
version.setUpdated(new Date());
514-
_dao.update(version.getId(), version);
515-
txn.commit();
450+
conn = txn.getConnection();
451+
} catch (SQLException e) {
452+
s_logger.error("Unable to cleanup the database", e);
453+
throw new CloudRuntimeException("Unable to cleanup the database", e);
454+
}
455+
456+
File[] scripts = upgrade.getCleanupScripts();
457+
if (scripts != null) {
458+
for (File script : scripts) {
459+
runScript(conn, script);
460+
s_logger.debug("Cleanup script " + script.getAbsolutePath() + " is executed successfully");
516461
}
517-
} finally {
518-
txn.close();
519462
}
463+
txn.commit();
464+
465+
txn.start();
466+
version.setStep(Step.Complete);
467+
version.setUpdated(new Date());
468+
_dao.update(version.getId(), version);
469+
txn.commit();
470+
s_logger.debug("Upgrade completed for version " + version.getVersion());
471+
} finally {
472+
txn.close();
520473
}
521474
}
522-
523475
}
524476

525477
@Override

0 commit comments

Comments
 (0)