Search in sources :

Example 1 with VersionVO

use of com.cloud.upgrade.dao.VersionVO 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)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