mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
checking in the upgrade stuff for now
This commit is contained in:
parent
ec96a9afea
commit
82f7504832
@ -3,7 +3,7 @@
|
||||
# major.minor.patch versioning scheme for vmops
|
||||
company.major.version=2
|
||||
company.minor.version=2
|
||||
company.patch.version=3
|
||||
company.patch.version=4
|
||||
|
||||
svn.revision=2
|
||||
|
||||
|
||||
@ -160,6 +160,19 @@ public class ClusterManagerImpl implements ClusterManager {
|
||||
return answers[0].getResult();
|
||||
}
|
||||
|
||||
/**
|
||||
* called by DatabaseUpgradeChecker to see if there are other peers running.
|
||||
* @param notVersion If version is passed in, the peers CANNOT be running at this
|
||||
* version. If version is null, return true if any peer is
|
||||
* running regardless of version.
|
||||
* @return true if there are peers running and false if not.
|
||||
*/
|
||||
public static final boolean arePeersRunning(String notVersion) {
|
||||
return false; //TODO: Leaving this for Kelven to take care of.
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public void broadcast(long agentId, Command[] cmds) {
|
||||
Date cutTime = DateUtil.currentGMTTime();
|
||||
@ -564,9 +577,10 @@ public class ClusterManagerImpl implements ClusterManager {
|
||||
// missed cleanup
|
||||
Date cutTime = DateUtil.currentGMTTime();
|
||||
List<ManagementServerHostVO> inactiveList = _mshostDao.getInactiveList(new Date(cutTime.getTime() - heartbeatThreshold));
|
||||
if(inactiveList.size() > 0)
|
||||
if(inactiveList.size() > 0) {
|
||||
notifyNodeLeft(inactiveList);
|
||||
}
|
||||
}
|
||||
|
||||
private void peerScan() {
|
||||
Date cutTime = DateUtil.currentGMTTime();
|
||||
@ -632,8 +646,9 @@ public class ClusterManagerImpl implements ClusterManager {
|
||||
|
||||
profiler.stop();
|
||||
if(profiler.getDuration() > 1000) {
|
||||
if(s_logger.isDebugEnabled())
|
||||
if(s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Notifying management server join event took " + profiler.getDuration() + " ms");
|
||||
}
|
||||
} else {
|
||||
s_logger.warn("Notifying management server join event took " + profiler.getDuration() + " ms");
|
||||
}
|
||||
@ -647,8 +662,9 @@ public class ClusterManagerImpl implements ClusterManager {
|
||||
|
||||
profiler.stop();
|
||||
if(profiler.getDuration() > 1000) {
|
||||
if(s_logger.isDebugEnabled())
|
||||
if(s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Notifying management server leave event took " + profiler.getDuration() + " ms");
|
||||
}
|
||||
} else {
|
||||
s_logger.warn("Notifying management server leave event took " + profiler.getDuration() + " ms");
|
||||
}
|
||||
@ -855,9 +871,10 @@ public class ClusterManagerImpl implements ClusterManager {
|
||||
public boolean isManagementNodeAlive(long msid) {
|
||||
ManagementServerHostVO mshost = _mshostDao.findByMsid(msid);
|
||||
if(mshost != null) {
|
||||
if(mshost.getLastUpdateTime().getTime() >= DateUtil.currentGMTTime().getTime() - heartbeatThreshold)
|
||||
if(mshost.getLastUpdateTime().getTime() >= DateUtil.currentGMTTime().getTime() - heartbeatThreshold) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
@ -865,8 +882,9 @@ public class ClusterManagerImpl implements ClusterManager {
|
||||
@Override
|
||||
public boolean pingManagementNode(long msid) {
|
||||
ManagementServerHostVO mshost = _mshostDao.findByMsid(msid);
|
||||
if(mshost == null)
|
||||
if(mshost == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
String targetIp = mshost.getServiceIP();
|
||||
if("127.0.0.1".equals(targetIp) || "0.0.0.0".equals(targetIp)) {
|
||||
|
||||
@ -28,11 +28,12 @@ import java.util.HashMap;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import com.cloud.cluster.ClusterManagerImpl;
|
||||
import com.cloud.maint.Version;
|
||||
import com.cloud.upgrade.dao.VersionVO.Step;
|
||||
import com.cloud.utils.Pair;
|
||||
import com.cloud.utils.component.ComponentLocator;
|
||||
import com.cloud.utils.component.SystemIntegrityChecker;
|
||||
import com.cloud.utils.db.GlobalLock;
|
||||
import com.cloud.utils.db.ScriptRunner;
|
||||
import com.cloud.utils.db.Transaction;
|
||||
import com.cloud.utils.exception.CloudRuntimeException;
|
||||
@ -40,12 +41,14 @@ import com.cloud.utils.exception.CloudRuntimeException;
|
||||
public class DatabaseUpgradeChecker implements SystemIntegrityChecker {
|
||||
private final Logger s_logger = Logger.getLogger(DatabaseUpgradeChecker.class);
|
||||
|
||||
protected HashMap<Pair<String, String>, DbUpgrade[]> _upgradeMap = new HashMap<Pair<String, String>, DbUpgrade[]>();
|
||||
protected HashMap<String, DbUpgrade[]> _upgradeMap = new HashMap<String, DbUpgrade[]>();
|
||||
|
||||
VersionDao _dao;
|
||||
public DatabaseUpgradeChecker() {
|
||||
_dao = ComponentLocator.inject(VersionDaoImpl.class);
|
||||
_upgradeMap.put(new Pair<String, String>("2.1.7", "2.2.3"), new DbUpgrade[] { new Upgrade217to22(), new Upgrade221to222(), new UpgradeSnapshot217to223(), new Upgrade222to224()});
|
||||
_upgradeMap.put("2.1.7", new DbUpgrade[] { new Upgrade217to22(), new Upgrade221to222(), new UpgradeSnapshot217to223(), new Upgrade222to224()});
|
||||
_upgradeMap.put("2.2.2", new DbUpgrade[] { new Upgrade222to224() });
|
||||
_upgradeMap.put("2.2.3", new DbUpgrade[] { new Upgrade222to224() });
|
||||
}
|
||||
|
||||
protected void runScript(File file) {
|
||||
@ -55,11 +58,11 @@ public class DatabaseUpgradeChecker implements SystemIntegrityChecker {
|
||||
ScriptRunner runner = new ScriptRunner(conn, false, true);
|
||||
runner.runScript(reader);
|
||||
} catch (FileNotFoundException e) {
|
||||
throw new CloudRuntimeException("Unable to find upgrade script, schema-21to22.sql", e);
|
||||
throw new CloudRuntimeException("Unable to find upgrade script: " + file.getAbsolutePath(), e);
|
||||
} catch (IOException e) {
|
||||
throw new CloudRuntimeException("Unable to read upgrade script, schema-21to22.sql", e);
|
||||
throw new CloudRuntimeException("Unable to read upgrade script: " + file.getAbsolutePath(), e);
|
||||
} catch (SQLException e) {
|
||||
throw new CloudRuntimeException("Unable to execute upgrade script, schema-21to22.sql", e);
|
||||
throw new CloudRuntimeException("Unable to execute upgrade script: " + file.getAbsolutePath(), e);
|
||||
}
|
||||
}
|
||||
|
||||
@ -69,7 +72,7 @@ public class DatabaseUpgradeChecker implements SystemIntegrityChecker {
|
||||
String trimmedDbVersion = Version.trimToPatch(dbVersion);
|
||||
String trimmedCurrentVersion = Version.trimToPatch(currentVersion);
|
||||
|
||||
DbUpgrade[] upgrades = _upgradeMap.get(new Pair<String, String>(trimmedDbVersion, trimmedCurrentVersion));
|
||||
DbUpgrade[] upgrades = _upgradeMap.get(trimmedDbVersion);
|
||||
if (upgrades == null) {
|
||||
throw new CloudRuntimeException("There is no upgrade path from " + dbVersion + " to " + currentVersion);
|
||||
}
|
||||
@ -86,8 +89,8 @@ public class DatabaseUpgradeChecker implements SystemIntegrityChecker {
|
||||
}
|
||||
}
|
||||
|
||||
if (!supportsRollingUpgrade) {
|
||||
// TODO: Check if the other management server is still running by looking at the database. If so, then throw an exception.
|
||||
if (!supportsRollingUpgrade && ClusterManagerImpl.arePeersRunning(null)) {
|
||||
throw new CloudRuntimeException("Unable to run upgrade because the upgrade sequence does not support rolling update and there are other management server nodes running");
|
||||
}
|
||||
|
||||
for (DbUpgrade upgrade : upgrades) {
|
||||
@ -116,6 +119,8 @@ public class DatabaseUpgradeChecker implements SystemIntegrityChecker {
|
||||
}
|
||||
}
|
||||
|
||||
if (!ClusterManagerImpl.arePeersRunning(trimmedCurrentVersion)) {
|
||||
s_logger.info("Cleaning upgrades because all management server are now at the same version");
|
||||
for (DbUpgrade upgrade : upgrades) {
|
||||
s_logger.info("Cleanup upgrade " + upgrade.getClass().getSimpleName() + " to upgrade from " + upgrade.getUpgradableVersionRange()[0] + "-" + upgrade.getUpgradableVersionRange()[1] + " to " + upgrade.getUpgradedVersion());
|
||||
VersionVO version = _dao.findByVersion(upgrade.getUpgradedVersion(), Step.Upgrade);
|
||||
@ -137,27 +142,41 @@ public class DatabaseUpgradeChecker implements SystemIntegrityChecker {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void check() {
|
||||
GlobalLock lock = GlobalLock.getInternLock("DatabaseUpgrade");
|
||||
try {
|
||||
s_logger.info("Grabbing lock to check for database integrity.");
|
||||
if (!lock.lock(20*60)) {
|
||||
throw new CloudRuntimeException("Unable to acquire lock to check for database integrity.");
|
||||
}
|
||||
|
||||
try {
|
||||
String dbVersion = _dao.getCurrentVersion();
|
||||
String currentVersion = this.getClass().getPackage().getImplementationVersion();
|
||||
if (currentVersion == null) {
|
||||
currentVersion = this.getClass().getSuperclass().getPackage().getImplementationVersion();
|
||||
}
|
||||
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("DB version = " + dbVersion + " Code Version = " + currentVersion);
|
||||
}
|
||||
s_logger.info("DB version = " + dbVersion + " Code Version = " + currentVersion);
|
||||
|
||||
if (Version.compare(Version.trimToPatch(dbVersion), Version.trimToPatch(currentVersion)) > 0) {
|
||||
throw new CloudRuntimeException("Database version " + dbVersion + " is higher than management software version " + currentVersion);
|
||||
}
|
||||
|
||||
if (Version.compare(Version.trimToPatch(dbVersion), Version.trimToPatch(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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -34,9 +34,7 @@ import javax.persistence.TemporalType;
|
||||
@Table(name="version")
|
||||
public class VersionVO {
|
||||
public enum Step {
|
||||
Dump,
|
||||
Upgrade,
|
||||
Cleanup,
|
||||
Complete
|
||||
};
|
||||
|
||||
|
||||
@ -35,8 +35,8 @@ import com.cloud.utils.db.DbTestUtils;
|
||||
import com.cloud.utils.db.Transaction;
|
||||
import com.cloud.utils.exception.CloudRuntimeException;
|
||||
|
||||
public class AdvanceZone217To223UpgradeTest extends TestCase {
|
||||
private static final Logger s_logger = Logger.getLogger(AdvanceZone217To223UpgradeTest.class);
|
||||
public class AdvanceZone217To224UpgradeTest extends TestCase {
|
||||
private static final Logger s_logger = Logger.getLogger(AdvanceZone217To224UpgradeTest.class);
|
||||
|
||||
@Override
|
||||
@Before
|
||||
@ -64,14 +64,14 @@ public class AdvanceZone217To223UpgradeTest extends TestCase {
|
||||
String version = dao.getCurrentVersion();
|
||||
assert version.equals("2.1.7") : "Version returned is not 2.1.7 but " + version;
|
||||
|
||||
checker.upgrade("2.1.7", "2.2.3");
|
||||
checker.upgrade("2.1.7", "2.2.4");
|
||||
|
||||
conn = Transaction.getStandaloneConnection();
|
||||
try {
|
||||
pstmt = conn.prepareStatement("SELECT version FROM version ORDER BY id DESC LIMIT 1");
|
||||
ResultSet rs = pstmt.executeQuery();
|
||||
assert rs.next() : "No version selected";
|
||||
assert rs.getString(1).equals("2.2.3") : "VERSION stored is not 2.2.3: " + rs.getString(1);
|
||||
assert rs.getString(1).equals("2.2.4") : "VERSION stored is not 2.2.4: " + rs.getString(1);
|
||||
rs.close();
|
||||
pstmt.close();
|
||||
|
||||
@ -35,8 +35,8 @@ import com.cloud.utils.db.DbTestUtils;
|
||||
import com.cloud.utils.db.Transaction;
|
||||
import com.cloud.utils.exception.CloudRuntimeException;
|
||||
|
||||
public class BasicZone217To223UpgradeTest extends TestCase {
|
||||
private static final Logger s_logger = Logger.getLogger(BasicZone217To223UpgradeTest.class);
|
||||
public class BasicZone217To224UpgradeTest extends TestCase {
|
||||
private static final Logger s_logger = Logger.getLogger(BasicZone217To224UpgradeTest.class);
|
||||
|
||||
@Override
|
||||
@Before
|
||||
@ -69,12 +69,12 @@ public class BasicZone217To223UpgradeTest extends TestCase {
|
||||
s_logger.debug("Basic zone test version is " + version);
|
||||
}
|
||||
|
||||
checker.upgrade("2.1.7", "2.2.3");
|
||||
checker.upgrade("2.1.7", "2.2.4");
|
||||
|
||||
conn = Transaction.getStandaloneConnection();
|
||||
try {
|
||||
|
||||
s_logger.debug("Starting tesing upgrade from 2.1.7 to 2.2.3 for Basic zone...");
|
||||
s_logger.debug("Starting tesing upgrade from 2.1.7 to 2.2.4 for Basic zone...");
|
||||
|
||||
//Version check
|
||||
pstmt = conn.prepareStatement(" SELECT version FROM version ORDER BY id DESC LIMIT 1");
|
||||
@ -82,8 +82,8 @@ public class BasicZone217To223UpgradeTest extends TestCase {
|
||||
|
||||
if (!rs.next()) {
|
||||
s_logger.error("ERROR: No version selected");
|
||||
} else if (!rs.getString(1).equals("2.2.3")) {
|
||||
s_logger.error("ERROR: VERSION stored is not 2.2.3: " + rs.getString(1));
|
||||
} else if (!rs.getString(1).equals("2.2.4")) {
|
||||
s_logger.error("ERROR: VERSION stored is not 2.2.4: " + rs.getString(1));
|
||||
}
|
||||
rs.close();
|
||||
pstmt.close();
|
||||
@ -36,8 +36,8 @@ import com.cloud.utils.db.DbTestUtils;
|
||||
import com.cloud.utils.db.Transaction;
|
||||
import com.cloud.utils.exception.CloudRuntimeException;
|
||||
|
||||
public class InstanceGroup217To223UpgradeTest extends TestCase {
|
||||
private static final Logger s_logger = Logger.getLogger(InstanceGroup217To223UpgradeTest.class);
|
||||
public class InstanceGroup217To224UpgradeTest extends TestCase {
|
||||
private static final Logger s_logger = Logger.getLogger(InstanceGroup217To224UpgradeTest.class);
|
||||
|
||||
@Override
|
||||
@Before
|
||||
@ -70,12 +70,12 @@ public class InstanceGroup217To223UpgradeTest extends TestCase {
|
||||
s_logger.debug("Basic zone test version is " + version);
|
||||
}
|
||||
|
||||
checker.upgrade("2.1.7", "2.2.3");
|
||||
checker.upgrade("2.1.7", "2.2.4");
|
||||
|
||||
conn = Transaction.getStandaloneConnection();
|
||||
try {
|
||||
|
||||
s_logger.debug("Starting tesing upgrade from 2.1.7 to 2.2.3 for Instance groups...");
|
||||
s_logger.debug("Starting tesing upgrade from 2.1.7 to 2.2.4 for Instance groups...");
|
||||
|
||||
//Version check
|
||||
pstmt = conn.prepareStatement("SELECT version FROM version");
|
||||
@ -83,8 +83,8 @@ public class InstanceGroup217To223UpgradeTest extends TestCase {
|
||||
|
||||
if (!rs.next()) {
|
||||
s_logger.error("ERROR: No version selected");
|
||||
} else if (!rs.getString(1).equals("2.2.3")) {
|
||||
s_logger.error("ERROR: VERSION stored is not 2.2.3: " + rs.getString(1));
|
||||
} else if (!rs.getString(1).equals("2.2.4")) {
|
||||
s_logger.error("ERROR: VERSION stored is not 2.2.4: " + rs.getString(1));
|
||||
}
|
||||
rs.close();
|
||||
pstmt.close();
|
||||
@ -36,8 +36,8 @@ import com.cloud.utils.db.DbTestUtils;
|
||||
import com.cloud.utils.db.Transaction;
|
||||
import com.cloud.utils.exception.CloudRuntimeException;
|
||||
|
||||
public class PortForwarding217To221UpgradeTest extends TestCase {
|
||||
private static final Logger s_logger = Logger.getLogger(PortForwarding217To221UpgradeTest.class);
|
||||
public class PortForwarding217To224UpgradeTest extends TestCase {
|
||||
private static final Logger s_logger = Logger.getLogger(PortForwarding217To224UpgradeTest.class);
|
||||
|
||||
@Override
|
||||
@Before
|
||||
@ -70,12 +70,12 @@ public class PortForwarding217To221UpgradeTest extends TestCase {
|
||||
s_logger.debug("Port forwarding test version is " + version);
|
||||
}
|
||||
|
||||
checker.upgrade("2.1.7", "2.2.3");
|
||||
checker.upgrade("2.1.7", "2.2.4");
|
||||
|
||||
conn = Transaction.getStandaloneConnection();
|
||||
try {
|
||||
|
||||
s_logger.debug("Starting tesing upgrade from 2.1.7 to 2.2.3 for Port forwarding rules...");
|
||||
s_logger.debug("Starting tesing upgrade from 2.1.7 to 2.2.4 for Port forwarding rules...");
|
||||
|
||||
//Version check
|
||||
pstmt = conn.prepareStatement("SELECT version FROM version");
|
||||
@ -83,8 +83,8 @@ public class PortForwarding217To221UpgradeTest extends TestCase {
|
||||
|
||||
if (!rs.next()) {
|
||||
s_logger.error("ERROR: No version selected");
|
||||
} else if (!rs.getString(1).equals("2.2.3")) {
|
||||
s_logger.error("ERROR: VERSION stored is not 2.2.3: " + rs.getString(1));
|
||||
} else if (!rs.getString(1).equals("2.2.4")) {
|
||||
s_logger.error("ERROR: VERSION stored is not 2.2.4: " + rs.getString(1));
|
||||
}
|
||||
rs.close();
|
||||
pstmt.close();
|
||||
Loading…
x
Reference in New Issue
Block a user