CLOUDSTACK-732 Add disk snapshot for KVM 6.3, add the flag in CS.

Signed-off-by: Edison Su <sudison@gmail.com>

Conflicts:

	engine/schema/src/com/cloud/upgrade/dao/Upgrade410to420.java
This commit is contained in:
Edison Su 2013-07-19 13:26:19 -07:00
parent 823c72552e
commit cd6853cc1a
3 changed files with 48 additions and 3 deletions

View File

@ -90,6 +90,7 @@ public class Upgrade410to420 implements DbUpgrade {
correctExternalNetworkDevicesSetup(conn); correctExternalNetworkDevicesSetup(conn);
removeFirewallServiceFromSharedNetworkOfferingWithSGService(conn); removeFirewallServiceFromSharedNetworkOfferingWithSGService(conn);
fix22xKVMSnapshots(conn); fix22xKVMSnapshots(conn);
setKVMSnapshotFlag(conn);
addIndexForAlert(conn); addIndexForAlert(conn);
fixBaremetalForeignKeys(conn); fixBaremetalForeignKeys(conn);
// storage refactor related migration // storage refactor related migration
@ -297,6 +298,43 @@ public class Upgrade410to420 implements DbUpgrade {
*/ */
} }
//KVM snapshot flag: only turn on if Customers is using snapshot;
private void setKVMSnapshotFlag(Connection conn) {
s_logger.debug("Verify and set the KVM snapshot flag if snapshot was used. ");
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
int numRows = 0;
pstmt = conn.prepareStatement("select count(*) from `cloud`.`snapshots` where hypervisor_type = 'KVM'");
rs = pstmt.executeQuery();
if(rs.next()){
numRows = rs.getInt(1);
}
rs.close();
pstmt.close();
if (numRows > 0){
//Add the configuration flag
pstmt = conn.prepareStatement("UPDATE `cloud`.`configuration` SET value = ? WHERE name = 'KVM.snapshot.enabled'");
pstmt.setString(1, "true");
pstmt.executeUpdate();
}
} catch (SQLException e) {
throw new CloudRuntimeException("Failed to read the snapshot table for KVM upgrade. ", e);
} finally {
try {
if (rs != null) {
rs.close();
}
if (pstmt != null) {
pstmt.close();
}
} catch (SQLException e) {
}
}
s_logger.debug("Done set KVM snapshot flag. ");
}
private void updatePrimaryStore(Connection conn) { private void updatePrimaryStore(Connection conn) {
PreparedStatement sql = null; PreparedStatement sql = null;
PreparedStatement sql2 = null; PreparedStatement sql2 = null;

View File

@ -145,6 +145,7 @@ public enum Config {
SnapshotPollInterval("Snapshots", SnapshotManager.class, Integer.class, "snapshot.poll.interval", "300", "The time interval in seconds when the management server polls for snapshots to be scheduled.", null), SnapshotPollInterval("Snapshots", SnapshotManager.class, Integer.class, "snapshot.poll.interval", "300", "The time interval in seconds when the management server polls for snapshots to be scheduled.", null),
SnapshotDeltaMax("Snapshots", SnapshotManager.class, Integer.class, "snapshot.delta.max", "16", "max delta snapshots between two full snapshots.", null), SnapshotDeltaMax("Snapshots", SnapshotManager.class, Integer.class, "snapshot.delta.max", "16", "max delta snapshots between two full snapshots.", null),
BackupSnapshotAferTakingSnapshot("Snapshots", SnapshotManager.class, Boolean.class, "snapshot.backup.rightafter", "true", "backup snapshot right after snapshot is taken", null), BackupSnapshotAferTakingSnapshot("Snapshots", SnapshotManager.class, Boolean.class, "snapshot.backup.rightafter", "true", "backup snapshot right after snapshot is taken", null),
KVMSnapshotEnabled("Snapshots", SnapshotManager.class, Boolean.class, "KVM.snapshot.enabled", "false", "whether snapshot is enabled for KVM hosts", null),
// Advanced // Advanced
JobExpireMinutes("Advanced", ManagementServer.class, String.class, "job.expire.minutes", "1440", "Time (in minutes) for async-jobs to be kept in system", null), JobExpireMinutes("Advanced", ManagementServer.class, String.class, "job.expire.minutes", "1440", "Time (in minutes) for async-jobs to be kept in system", null),

View File

@ -910,6 +910,12 @@ public class SnapshotManagerImpl extends ManagerBase implements SnapshotManager,
if (host.getHypervisorType() != HypervisorType.KVM) { if (host.getHypervisorType() != HypervisorType.KVM) {
return true; return true;
} }
//Turn off snapshot by default for KVM, unless it is set in the global flag
boolean snapshotEnabled = Boolean.parseBoolean(_configDao.getValue("KVM.snapshot.enabled"));
if (!snapshotEnabled) {
return false;
}
// Determine host capabilities // Determine host capabilities
String caps = host.getCapabilities(); String caps = host.getCapabilities();