mirror of
https://github.com/apache/cloudstack.git
synced 2025-11-02 20:02:29 +01:00
the default delta snapshot number between two full snapshots is 16, it is configurable
This commit is contained in:
parent
9f3b1c3d95
commit
9ee6d69c9f
@ -39,8 +39,7 @@ public interface Snapshot {
|
||||
Creating,
|
||||
CreatedOnPrimary,
|
||||
BackingUp,
|
||||
BackedUp,
|
||||
EmptySnapshot;
|
||||
BackedUp;
|
||||
|
||||
public String toString() {
|
||||
return this.name();
|
||||
|
||||
@ -93,11 +93,12 @@ public enum Config {
|
||||
// ConsoleProxyURLPort("Console Proxy", ManagementServer.class, Integer.class, "consoleproxy.url.port", "80", "Console proxy port for AJAX viewer", null),
|
||||
|
||||
// Snapshots
|
||||
SnapshotHourlyMax("Snapshots", SnapshotManager.class, String.class, "snapshot.max.hourly", "8", "Maximum hourly snapshots for a volume", null),
|
||||
SnapshotDailyMax("Snapshots", SnapshotManager.class, String.class, "snapshot.max.daily", "8", "Maximum dalily snapshots for a volume", null),
|
||||
SnapshotWeeklyMax("Snapshots", SnapshotManager.class, String.class, "snapshot.max.weekly", "8", "Maximum hourly snapshots for a volume", null),
|
||||
SnapshotMonthlyMax("Snapshots", SnapshotManager.class, String.class, "snapshot.max.monthly", "8", "Maximum hourly snapshots for a volume", null),
|
||||
SnapshotPollInterval("Snapshots", SnapshotManager.class, Boolean.class, "snapshot.poll.interval", "300", "The time interval in seconds when the management server polls for snapshots to be scheduled.", null),
|
||||
SnapshotHourlyMax("Snapshots", SnapshotManager.class, Integer.class, "snapshot.max.hourly", "8", "Maximum hourly snapshots for a volume", null),
|
||||
SnapshotDailyMax("Snapshots", SnapshotManager.class, Integer.class, "snapshot.max.daily", "8", "Maximum dalily snapshots for a volume", null),
|
||||
SnapshotWeeklyMax("Snapshots", SnapshotManager.class, Integer.class, "snapshot.max.weekly", "8", "Maximum hourly snapshots for a volume", null),
|
||||
SnapshotMonthlyMax("Snapshots", SnapshotManager.class, Integer.class, "snapshot.max.monthly", "8", "Maximum hourly snapshots for a volume", 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),
|
||||
|
||||
// Advanced
|
||||
JobExpireMinutes("Advanced", ManagementServer.class, String.class, "job.expire.minutes", "1440", "Time (in minutes) for async-jobs to be kept in system", null),
|
||||
|
||||
@ -46,6 +46,7 @@ public interface SnapshotManager extends Manager {
|
||||
public static final int DAILYMAX = 8;
|
||||
public static final int WEEKLYMAX = 8;
|
||||
public static final int MONTHLYMAX = 8;
|
||||
public static final int DELTAMAX = 16;
|
||||
|
||||
/**
|
||||
* Create a snapshot of a volume
|
||||
|
||||
@ -129,6 +129,7 @@ public class SnapshotManagerImpl implements SnapshotManager {
|
||||
String _name;
|
||||
private int _totalRetries;
|
||||
private int _pauseInterval;
|
||||
private int _deltaSnapshotMax;
|
||||
|
||||
protected SearchBuilder<SnapshotVO> PolicySnapshotSearch;
|
||||
protected SearchBuilder<SnapshotPolicyVO> PoliciesForSnapSearch;
|
||||
@ -297,27 +298,15 @@ public class SnapshotManagerImpl implements SnapshotManager {
|
||||
createdSnapshot = _snapshotDao.findById(id);
|
||||
// delete from the snapshots table
|
||||
_snapshotDao.expunge(id);
|
||||
|
||||
createdSnapshot.setStatus(Status.EmptySnapshot);
|
||||
throw new CloudRuntimeException("There is no change for volume " + volumeId + " since last snapshot, please use last snapshot instead.");
|
||||
|
||||
} else {
|
||||
long preSnapshotId = 0;
|
||||
if( preSnapshotVO != null && preSnapshotVO.getBackupSnapshotId() != null) {
|
||||
preSnapshotId = preId;
|
||||
// default delta snap number is 4
|
||||
int deltaSnap = 4;
|
||||
if( policyId != Snapshot.MANUAL_POLICY_ID ) {
|
||||
SnapshotPolicyVO snapshotPolicy = _snapshotPolicyDao.findById(policyId);
|
||||
int maxSnap = snapshotPolicy.getMaxSnaps();
|
||||
deltaSnap = (maxSnap + 1) >> 1;
|
||||
} else {
|
||||
// check if there are policy for this volume
|
||||
SnapshotPolicyVO snapshotPolicy = _snapshotPolicyDao.findOneByVolume(volumeId);
|
||||
if( snapshotPolicy != null ) {
|
||||
int maxSnap = snapshotPolicy.getMaxSnaps();
|
||||
deltaSnap = (maxSnap + 1) >> 1;
|
||||
}
|
||||
}
|
||||
// default delta snap number is 16
|
||||
int deltaSnap = _deltaSnapshotMax;
|
||||
|
||||
int i;
|
||||
for (i = 1; i < deltaSnap; i++) {
|
||||
String prevBackupUuid = preSnapshotVO.getBackupSnapshotId();
|
||||
@ -347,7 +336,6 @@ public class SnapshotManagerImpl implements SnapshotManager {
|
||||
_snapshotScheduleDao.update(snapshotSchedule.getId(), snapshotSchedule);
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
if (answer != null) {
|
||||
s_logger.error(answer.getDetails());
|
||||
@ -355,8 +343,8 @@ public class SnapshotManagerImpl implements SnapshotManager {
|
||||
// The snapshot was not successfully created
|
||||
createdSnapshot = _snapshotDao.findById(id);
|
||||
// delete from the snapshots table
|
||||
_snapshotDao.expunge(id);
|
||||
|
||||
_snapshotDao.expunge(id);
|
||||
throw new CloudRuntimeException("Creating snapshot for volume " + volumeId + " on primary storage failed.");
|
||||
}
|
||||
|
||||
return createdSnapshot;
|
||||
@ -1150,6 +1138,7 @@ public class SnapshotManagerImpl implements SnapshotManager {
|
||||
DateUtil.IntervalType.DAILY.setMax(NumbersUtil.parseInt(configDao.getValue("snapshot.max.daily"), DAILYMAX));
|
||||
DateUtil.IntervalType.WEEKLY.setMax(NumbersUtil.parseInt(configDao.getValue("snapshot.max.weekly"), WEEKLYMAX));
|
||||
DateUtil.IntervalType.MONTHLY.setMax(NumbersUtil.parseInt(configDao.getValue("snapshot.max.monthly"), MONTHLYMAX));
|
||||
_deltaSnapshotMax = NumbersUtil.parseInt(configDao.getValue("snapshot.delta.max"), DELTAMAX);
|
||||
_totalRetries = NumbersUtil.parseInt(configDao.getValue("total.retries"), 4);
|
||||
_pauseInterval = 2*NumbersUtil.parseInt(configDao.getValue("ping.interval"), 60);
|
||||
|
||||
|
||||
@ -199,6 +199,11 @@ public class DatabaseConfig {
|
||||
s_configurationDescriptions.put("use.local.storage", "Indicates whether to use local storage pools or shared storage pools for user VMs");
|
||||
s_configurationDescriptions.put("use.local.storage", "Indicates whether to use local storage pools or shared storage pools for system VMs.");
|
||||
s_configurationDescriptions.put("snapshot.poll.interval", "The time interval in seconds when the management server polls for snapshots to be scheduled.");
|
||||
s_configurationDescriptions.put("snapshot.max.hourly", "Maximum hourly snapshots for a volume");
|
||||
s_configurationDescriptions.put("snapshot.max.daily", "Maximum dalily snapshots for a volume");
|
||||
s_configurationDescriptions.put("snapshot.max.weekly", "Maximum hourly snapshots for a volume");
|
||||
s_configurationDescriptions.put("snapshot.max.monthly", "Maximum hourly snapshots for a volume");
|
||||
s_configurationDescriptions.put("snapshot.delta.max", "max delta snapshots between two full snapshots.");
|
||||
s_configurationDescriptions.put("snapshot.recurring.test", "Flag for testing recurring snapshots");
|
||||
s_configurationDescriptions.put("snapshot.test.minutes.per.hour", "Set it to a smaller value to take more recurring snapshots");
|
||||
s_configurationDescriptions.put("snapshot.test.hours.per.day", "Set it to a smaller value to take more recurring snapshots");
|
||||
@ -272,6 +277,11 @@ public class DatabaseConfig {
|
||||
s_configurationComponents.put("system.vm.use.local.storage", "ManagementServer");
|
||||
s_configurationComponents.put("use.local.storage", "ManagementServer");
|
||||
s_configurationComponents.put("snapshot.poll.interval", "SnapshotManager");
|
||||
s_configurationComponents.put("snapshot.max.hourly", "SnapshotManager");
|
||||
s_configurationComponents.put("snapshot.max.daily", "SnapshotManager");
|
||||
s_configurationComponents.put("snapshot.max.weekly", "SnapshotManager");
|
||||
s_configurationComponents.put("snapshot.max.monthly", "SnapshotManager");
|
||||
s_configurationComponents.put("snapshot.delta.max", "SnapshotManager");
|
||||
s_configurationComponents.put("snapshot.recurring.test", "SnapshotManager");
|
||||
s_configurationComponents.put("snapshot.test.minutes.per.hour", "SnapshotManager");
|
||||
s_configurationComponents.put("snapshot.test.hours.per.day", "SnapshotManager");
|
||||
@ -297,6 +307,11 @@ public class DatabaseConfig {
|
||||
s_defaultConfigurationValues.put("ping.timeout", "2.5");
|
||||
s_defaultConfigurationValues.put("ping.interval", "60");
|
||||
s_defaultConfigurationValues.put("snapshot.poll.interval", "300");
|
||||
s_defaultConfigurationValues.put("snapshot.max.hourly", "8");
|
||||
s_defaultConfigurationValues.put("snapshot.max.daily", "8");
|
||||
s_defaultConfigurationValues.put("snapshot.max.weekly", "8");
|
||||
s_defaultConfigurationValues.put("snapshot.max.monthly", "8");
|
||||
s_defaultConfigurationValues.put("snapshot.delta.max", "16");
|
||||
s_defaultConfigurationValues.put("snapshot.recurring.test", "false");
|
||||
s_defaultConfigurationValues.put("snapshot.test.minutes.per.hour", "60");
|
||||
s_defaultConfigurationValues.put("snapshot.test.hours.per.day", "24");
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user