Search in sources :

Example 1 with CloudStackVersion

use of org.apache.cloudstack.utils.CloudStackVersion in project cloudstack by apache.

the class DatabaseUpgradeChecker method calculateUpgradePath.

// Default visibility to support unit testing ...
DbUpgrade[] calculateUpgradePath(final CloudStackVersion dbVersion, final CloudStackVersion currentVersion) {
    checkArgument(dbVersion != null);
    checkArgument(currentVersion != null);
    checkArgument(currentVersion.compareTo(dbVersion) > 0);
    final DbUpgrade[] upgrades = _upgradeMap.containsKey(dbVersion) ? _upgradeMap.get(dbVersion) : findMostRecentUpgradePath(dbVersion);
    // When there is no upgrade defined for the target version, we assume that there were no schema changes or
    // data migrations required.  Based on that assumption, we add a noop DbUpgrade to the end of the list ...
    final CloudStackVersion tailVersion = upgrades.length > 0 ? CloudStackVersion.parse(upgrades[upgrades.length - 1].getUpgradedVersion()) : dbVersion;
    if (currentVersion.compareTo(tailVersion) != 0) {
        return concat(upgrades, new NoopDbUpgrade(tailVersion, currentVersion));
    }
    return upgrades;
}
Also used : CloudStackVersion(org.apache.cloudstack.utils.CloudStackVersion) DbUpgrade(com.cloud.upgrade.dao.DbUpgrade)

Example 2 with CloudStackVersion

use of org.apache.cloudstack.utils.CloudStackVersion in project cloudstack by apache.

the class DatabaseUpgradeCheckerTest method testCalculateUpgradePath490to4910.

@Test
public void testCalculateUpgradePath490to4910() {
    final CloudStackVersion dbVersion = CloudStackVersion.parse("4.9.0");
    assertNotNull(dbVersion);
    final CloudStackVersion currentVersion = CloudStackVersion.parse("4.9.1.0");
    assertNotNull(currentVersion);
    final DatabaseUpgradeChecker checker = new DatabaseUpgradeChecker();
    final DbUpgrade[] upgrades = checker.calculateUpgradePath(dbVersion, currentVersion);
    assertNotNull(upgrades);
    assertTrue(upgrades.length >= 1);
    assertTrue(upgrades[0] instanceof Upgrade490to4910);
    assertTrue(Arrays.equals(new String[] { "4.9.0", currentVersion.toString() }, upgrades[0].getUpgradableVersionRange()));
    assertEquals(currentVersion.toString(), upgrades[0].getUpgradedVersion());
}
Also used : Upgrade490to4910(com.cloud.upgrade.dao.Upgrade490to4910) CloudStackVersion(org.apache.cloudstack.utils.CloudStackVersion) DbUpgrade(com.cloud.upgrade.dao.DbUpgrade) Test(org.junit.Test)

Example 3 with CloudStackVersion

use of org.apache.cloudstack.utils.CloudStackVersion in project cloudstack by apache.

the class DatabaseUpgradeCheckerTest method testFindUpgradePath452to490.

@Test
public void testFindUpgradePath452to490() {
    final CloudStackVersion dbVersion = CloudStackVersion.parse("4.5.2");
    assertNotNull(dbVersion);
    final CloudStackVersion currentVersion = CloudStackVersion.parse("4.9.0");
    assertNotNull(currentVersion);
    final DatabaseUpgradeChecker checker = new DatabaseUpgradeChecker();
    final DbUpgrade[] upgrades = checker.calculateUpgradePath(dbVersion, currentVersion);
    assertNotNull(upgrades);
    assertTrue(upgrades[0] instanceof Upgrade452to460);
    assertTrue(upgrades[1] instanceof Upgrade460to461);
    assertTrue(upgrades[2] instanceof Upgrade461to470);
    assertTrue(upgrades[3] instanceof Upgrade470to471);
    assertTrue(upgrades[4] instanceof Upgrade471to480);
    assertTrue(upgrades[5] instanceof Upgrade480to481);
    assertTrue(Arrays.equals(new String[] { "4.8.1", currentVersion.toString() }, upgrades[6].getUpgradableVersionRange()));
    assertEquals(currentVersion.toString(), upgrades[6].getUpgradedVersion());
}
Also used : Upgrade461to470(com.cloud.upgrade.dao.Upgrade461to470) Upgrade452to460(com.cloud.upgrade.dao.Upgrade452to460) Upgrade480to481(com.cloud.upgrade.dao.Upgrade480to481) CloudStackVersion(org.apache.cloudstack.utils.CloudStackVersion) Upgrade460to461(com.cloud.upgrade.dao.Upgrade460to461) Upgrade471to480(com.cloud.upgrade.dao.Upgrade471to480) Upgrade470to471(com.cloud.upgrade.dao.Upgrade470to471) DbUpgrade(com.cloud.upgrade.dao.DbUpgrade) Test(org.junit.Test)

Example 4 with CloudStackVersion

use of org.apache.cloudstack.utils.CloudStackVersion in project cloudstack by apache.

the class DatabaseUpgradeChecker method check.

@Override
public void check() {
    GlobalLock lock = GlobalLock.getInternLock("DatabaseUpgrade");
    try {
        s_logger.info("Grabbing lock to check for database upgrade.");
        if (!lock.lock(20 * 60)) {
            throw new CloudRuntimeException("Unable to acquire lock to check for database integrity.");
        }
        try {
            final CloudStackVersion dbVersion = CloudStackVersion.parse(_dao.getCurrentVersion());
            final String currentVersionValue = this.getClass().getPackage().getImplementationVersion();
            if (StringUtils.isBlank(currentVersionValue)) {
                return;
            }
            final CloudStackVersion currentVersion = CloudStackVersion.parse(currentVersionValue);
            s_logger.info("DB version = " + dbVersion + " Code Version = " + currentVersion);
            if (dbVersion.compareTo(currentVersion) > 0) {
                throw new CloudRuntimeException("Database version " + dbVersion + " is higher than management software version " + currentVersionValue);
            }
            if (dbVersion.compareTo(currentVersion) == 0) {
                s_logger.info("DB version and code version matches so no upgrade needed.");
                return;
            }
            upgrade(dbVersion, currentVersion);
        } finally {
            lock.unlock();
        }
    } finally {
        lock.releaseRef();
    }
}
Also used : GlobalLock(com.cloud.utils.db.GlobalLock) CloudRuntimeException(com.cloud.utils.exception.CloudRuntimeException) CloudStackVersion(org.apache.cloudstack.utils.CloudStackVersion)

Example 5 with CloudStackVersion

use of org.apache.cloudstack.utils.CloudStackVersion in project cloudstack by apache.

the class DatabaseUpgradeCheckerTest method testCalculateUpgradePath480to481.

@Test
public void testCalculateUpgradePath480to481() {
    final CloudStackVersion dbVersion = CloudStackVersion.parse("4.8.0");
    assertNotNull(dbVersion);
    final CloudStackVersion currentVersion = CloudStackVersion.parse("4.8.1");
    assertNotNull(currentVersion);
    final DatabaseUpgradeChecker checker = new DatabaseUpgradeChecker();
    final DbUpgrade[] upgrades = checker.calculateUpgradePath(dbVersion, currentVersion);
    assertNotNull(upgrades);
    assertTrue(upgrades.length >= 1);
    assertTrue(upgrades[0] instanceof Upgrade480to481);
}
Also used : Upgrade480to481(com.cloud.upgrade.dao.Upgrade480to481) CloudStackVersion(org.apache.cloudstack.utils.CloudStackVersion) DbUpgrade(com.cloud.upgrade.dao.DbUpgrade) Test(org.junit.Test)

Aggregations

CloudStackVersion (org.apache.cloudstack.utils.CloudStackVersion)6 DbUpgrade (com.cloud.upgrade.dao.DbUpgrade)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 GlobalLock (com.cloud.utils.db.GlobalLock)1 CloudRuntimeException (com.cloud.utils.exception.CloudRuntimeException)1