Search in sources :

Example 6 with DbUpgrade

use of com.cloud.upgrade.dao.DbUpgrade in project cloudstack by apache.

the class DatabaseUpgradeChecker method upgrade.

protected void upgrade(CloudStackVersion dbVersion, CloudStackVersion currentVersion) {
    s_logger.info("Database upgrade must be performed from " + dbVersion + " to " + currentVersion);
    final DbUpgrade[] upgrades = calculateUpgradePath(dbVersion, currentVersion);
    boolean supportsRollingUpgrade = true;
    for (DbUpgrade upgrade : upgrades) {
        if (!upgrade.supportsRollingUpgrade()) {
            supportsRollingUpgrade = false;
            break;
        }
    }
    if (!supportsRollingUpgrade && false) {
        // FIXME: Needs to detect if there are management servers running
        // ClusterManagerImpl.arePeersRunning(null)) {
        String errorMessage = "Unable to run upgrade because the upgrade sequence does not support rolling update and there are other management server nodes running";
        s_logger.error(errorMessage);
        throw new CloudRuntimeException(errorMessage);
    }
    for (DbUpgrade upgrade : upgrades) {
        VersionVO version;
        s_logger.debug("Running upgrade " + upgrade.getClass().getSimpleName() + " to upgrade from " + upgrade.getUpgradableVersionRange()[0] + "-" + upgrade.getUpgradableVersionRange()[1] + " to " + upgrade.getUpgradedVersion());
        TransactionLegacy txn = TransactionLegacy.open("Upgrade");
        txn.start();
        try {
            Connection conn;
            try {
                conn = txn.getConnection();
            } catch (SQLException e) {
                String errorMessage = "Unable to upgrade the database";
                s_logger.error(errorMessage, e);
                throw new CloudRuntimeException(errorMessage, e);
            }
            File[] scripts = upgrade.getPrepareScripts();
            if (scripts != null) {
                for (File script : scripts) {
                    runScript(conn, script);
                }
            }
            upgrade.performDataMigration(conn);
            version = new VersionVO(upgrade.getUpgradedVersion());
            version = _dao.persist(version);
            txn.commit();
        } catch (CloudRuntimeException e) {
            String errorMessage = "Unable to upgrade the database";
            s_logger.error(errorMessage, e);
            throw new CloudRuntimeException(errorMessage, e);
        } finally {
            txn.close();
        }
        // Run the corresponding '-cleanup.sql' script
        txn = TransactionLegacy.open("Cleanup");
        try {
            s_logger.info("Cleanup upgrade " + upgrade.getClass().getSimpleName() + " to upgrade from " + upgrade.getUpgradableVersionRange()[0] + "-" + upgrade.getUpgradableVersionRange()[1] + " to " + upgrade.getUpgradedVersion());
            txn.start();
            Connection conn;
            try {
                conn = txn.getConnection();
            } catch (SQLException e) {
                s_logger.error("Unable to cleanup the database", e);
                throw new CloudRuntimeException("Unable to cleanup the database", e);
            }
            File[] scripts = upgrade.getCleanupScripts();
            if (scripts != null) {
                for (File script : scripts) {
                    runScript(conn, script);
                    s_logger.debug("Cleanup script " + script.getAbsolutePath() + " is executed successfully");
                }
            }
            txn.commit();
            txn.start();
            version.setStep(Step.Complete);
            version.setUpdated(new Date());
            _dao.update(version.getId(), version);
            txn.commit();
            s_logger.debug("Upgrade completed for version " + version.getVersion());
        } finally {
            txn.close();
        }
    }
}
Also used : TransactionLegacy(com.cloud.utils.db.TransactionLegacy) VersionVO(com.cloud.upgrade.dao.VersionVO) SQLException(java.sql.SQLException) CloudRuntimeException(com.cloud.utils.exception.CloudRuntimeException) Connection(java.sql.Connection) File(java.io.File) Date(java.util.Date) DbUpgrade(com.cloud.upgrade.dao.DbUpgrade)

Aggregations

DbUpgrade (com.cloud.upgrade.dao.DbUpgrade)6 CloudStackVersion (org.apache.cloudstack.utils.CloudStackVersion)5 Test (org.junit.Test)4 Upgrade480to481 (com.cloud.upgrade.dao.Upgrade480to481)3 Upgrade470to471 (com.cloud.upgrade.dao.Upgrade470to471)2 Upgrade471to480 (com.cloud.upgrade.dao.Upgrade471to480)2 Upgrade452to460 (com.cloud.upgrade.dao.Upgrade452to460)1 Upgrade460to461 (com.cloud.upgrade.dao.Upgrade460to461)1 Upgrade461to470 (com.cloud.upgrade.dao.Upgrade461to470)1 Upgrade490to4910 (com.cloud.upgrade.dao.Upgrade490to4910)1 VersionVO (com.cloud.upgrade.dao.VersionVO)1 TransactionLegacy (com.cloud.utils.db.TransactionLegacy)1 CloudRuntimeException (com.cloud.utils.exception.CloudRuntimeException)1 File (java.io.File)1 Connection (java.sql.Connection)1 SQLException (java.sql.SQLException)1 Date (java.util.Date)1