You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by hu...@apache.org on 2013/01/21 12:18:49 UTC
[45/50] [abbrv] git commit: Fix "Count" for listSnapshotPoliciesCmd.
Fix "Count" for listSnapshotPoliciesCmd.
Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/2955d589
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/2955d589
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/2955d589
Branch: refs/heads/cloud-agent-with-openvswitch
Commit: 2955d5897644a846755ceb9e7568eb65c6f9faa8
Parents: e8c0c1a
Author: Min Chen <mi...@citrix.com>
Authored: Fri Jan 18 13:55:11 2013 -0800
Committer: Min Chen <mi...@citrix.com>
Committed: Fri Jan 18 13:55:11 2013 -0800
----------------------------------------------------------------------
.../cloud/storage/snapshot/SnapshotService.java | 2 +-
.../user/snapshot/ListSnapshotPoliciesCmd.java | 7 +-
.../com/cloud/storage/dao/SnapshotPolicyDao.java | 3 +
.../cloud/storage/dao/SnapshotPolicyDaoImpl.java | 30 ++++--
.../storage/snapshot/SnapshotManagerImpl.java | 96 ++++++++-------
5 files changed, 79 insertions(+), 59 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/2955d589/api/src/com/cloud/storage/snapshot/SnapshotService.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/storage/snapshot/SnapshotService.java b/api/src/com/cloud/storage/snapshot/SnapshotService.java
index 79041c4..18b8507 100644
--- a/api/src/com/cloud/storage/snapshot/SnapshotService.java
+++ b/api/src/com/cloud/storage/snapshot/SnapshotService.java
@@ -82,7 +82,7 @@ public interface SnapshotService {
* the command that specifies the volume criteria
* @return list of snapshot policies
*/
- List<? extends SnapshotPolicy> listPoliciesforVolume(ListSnapshotPoliciesCmd cmd);
+ Pair<List<? extends SnapshotPolicy>, Integer> listPoliciesforVolume(ListSnapshotPoliciesCmd cmd);
boolean deleteSnapshotPolicies(DeleteSnapshotPoliciesCmd cmd);
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/2955d589/api/src/org/apache/cloudstack/api/command/user/snapshot/ListSnapshotPoliciesCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/snapshot/ListSnapshotPoliciesCmd.java b/api/src/org/apache/cloudstack/api/command/user/snapshot/ListSnapshotPoliciesCmd.java
index 647c503..7c78bb7 100644
--- a/api/src/org/apache/cloudstack/api/command/user/snapshot/ListSnapshotPoliciesCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/snapshot/ListSnapshotPoliciesCmd.java
@@ -29,6 +29,7 @@ import org.apache.cloudstack.api.response.ListResponse;
import org.apache.cloudstack.api.response.SnapshotPolicyResponse;
import org.apache.cloudstack.api.response.VolumeResponse;
import com.cloud.storage.snapshot.SnapshotPolicy;
+import com.cloud.utils.Pair;
@APICommand(name = "listSnapshotPolicies", description="Lists snapshot policies.", responseObject=SnapshotPolicyResponse.class)
public class ListSnapshotPoliciesCmd extends BaseListCmd {
@@ -63,15 +64,15 @@ public class ListSnapshotPoliciesCmd extends BaseListCmd {
@Override
public void execute(){
- List<? extends SnapshotPolicy> result = _snapshotService.listPoliciesforVolume(this);
+ Pair<List<? extends SnapshotPolicy>, Integer> result = _snapshotService.listPoliciesforVolume(this);
ListResponse<SnapshotPolicyResponse> response = new ListResponse<SnapshotPolicyResponse>();
List<SnapshotPolicyResponse> policyResponses = new ArrayList<SnapshotPolicyResponse>();
- for (SnapshotPolicy policy : result) {
+ for (SnapshotPolicy policy : result.first()) {
SnapshotPolicyResponse policyResponse = _responseGenerator.createSnapshotPolicyResponse(policy);
policyResponse.setObjectName("snapshotpolicy");
policyResponses.add(policyResponse);
}
- response.setResponses(policyResponses);
+ response.setResponses(policyResponses, result.second());
response.setResponseName(getCommandName());
this.setResponseObject(response);
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/2955d589/server/src/com/cloud/storage/dao/SnapshotPolicyDao.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/dao/SnapshotPolicyDao.java b/server/src/com/cloud/storage/dao/SnapshotPolicyDao.java
index 9f8d170..467d491 100644
--- a/server/src/com/cloud/storage/dao/SnapshotPolicyDao.java
+++ b/server/src/com/cloud/storage/dao/SnapshotPolicyDao.java
@@ -20,6 +20,7 @@ import java.util.List;
import com.cloud.storage.SnapshotPolicyVO;
import com.cloud.utils.DateUtil.IntervalType;
+import com.cloud.utils.Pair;
import com.cloud.utils.db.Filter;
import com.cloud.utils.db.GenericDao;
@@ -29,6 +30,8 @@ import com.cloud.utils.db.GenericDao;
public interface SnapshotPolicyDao extends GenericDao<SnapshotPolicyVO, Long> {
List<SnapshotPolicyVO> listByVolumeId(long volumeId);
List<SnapshotPolicyVO> listByVolumeId(long volumeId, Filter filter);
+ Pair<List<SnapshotPolicyVO>, Integer> listAndCountByVolumeId(long volumeId);
+ Pair<List<SnapshotPolicyVO>, Integer> listAndCountByVolumeId(long volumeId, Filter filter);
SnapshotPolicyVO findOneByVolumeInterval(long volumeId, IntervalType intvType);
List<SnapshotPolicyVO> listActivePolicies();
SnapshotPolicyVO findOneByVolume(long volumeId);
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/2955d589/server/src/com/cloud/storage/dao/SnapshotPolicyDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/dao/SnapshotPolicyDaoImpl.java b/server/src/com/cloud/storage/dao/SnapshotPolicyDaoImpl.java
index 10eaaea..100d53b 100644
--- a/server/src/com/cloud/storage/dao/SnapshotPolicyDaoImpl.java
+++ b/server/src/com/cloud/storage/dao/SnapshotPolicyDaoImpl.java
@@ -23,6 +23,7 @@ import javax.ejb.Local;
import com.cloud.storage.SnapshotPolicyVO;
import com.cloud.utils.DateUtil.IntervalType;
+import com.cloud.utils.Pair;
import com.cloud.utils.db.Filter;
import com.cloud.utils.db.GenericDaoBase;
import com.cloud.utils.db.SearchBuilder;
@@ -33,7 +34,7 @@ public class SnapshotPolicyDaoImpl extends GenericDaoBase<SnapshotPolicyVO, Long
private final SearchBuilder<SnapshotPolicyVO> VolumeIdSearch;
private final SearchBuilder<SnapshotPolicyVO> VolumeIdIntervalSearch;
private final SearchBuilder<SnapshotPolicyVO> ActivePolicySearch;
-
+
@Override
public SnapshotPolicyVO findOneByVolumeInterval(long volumeId, IntervalType intvType) {
SearchCriteria<SnapshotPolicyVO> sc = VolumeIdIntervalSearch.create();
@@ -41,7 +42,7 @@ public class SnapshotPolicyDaoImpl extends GenericDaoBase<SnapshotPolicyVO, Long
sc.setParameters("interval", intvType.ordinal());
return findOneBy(sc);
}
-
+
@Override
public SnapshotPolicyVO findOneByVolume(long volumeId) {
SearchCriteria<SnapshotPolicyVO> sc = VolumeIdSearch.create();
@@ -49,12 +50,12 @@ public class SnapshotPolicyDaoImpl extends GenericDaoBase<SnapshotPolicyVO, Long
sc.setParameters("active", true);
return findOneBy(sc);
}
-
+
@Override
public List<SnapshotPolicyVO> listByVolumeId(long volumeId) {
return listByVolumeId(volumeId, null);
}
-
+
@Override
public List<SnapshotPolicyVO> listByVolumeId(long volumeId, Filter filter) {
SearchCriteria<SnapshotPolicyVO> sc = VolumeIdSearch.create();
@@ -62,18 +63,31 @@ public class SnapshotPolicyDaoImpl extends GenericDaoBase<SnapshotPolicyVO, Long
sc.setParameters("active", true);
return listBy(sc, filter);
}
-
+
+ @Override
+ public Pair<List<SnapshotPolicyVO>, Integer> listAndCountByVolumeId(long volumeId) {
+ return listAndCountByVolumeId(volumeId, null);
+ }
+
+ @Override
+ public Pair<List<SnapshotPolicyVO>, Integer> listAndCountByVolumeId(long volumeId, Filter filter) {
+ SearchCriteria<SnapshotPolicyVO> sc = VolumeIdSearch.create();
+ sc.setParameters("volumeId", volumeId);
+ sc.setParameters("active", true);
+ return searchAndCount(sc, filter);
+ }
+
protected SnapshotPolicyDaoImpl() {
VolumeIdSearch = createSearchBuilder();
VolumeIdSearch.and("volumeId", VolumeIdSearch.entity().getVolumeId(), SearchCriteria.Op.EQ);
VolumeIdSearch.and("active", VolumeIdSearch.entity().isActive(), SearchCriteria.Op.EQ);
VolumeIdSearch.done();
-
+
VolumeIdIntervalSearch = createSearchBuilder();
VolumeIdIntervalSearch.and("volumeId", VolumeIdIntervalSearch.entity().getVolumeId(), SearchCriteria.Op.EQ);
VolumeIdIntervalSearch.and("interval", VolumeIdIntervalSearch.entity().getInterval(), SearchCriteria.Op.EQ);
VolumeIdIntervalSearch.done();
-
+
ActivePolicySearch = createSearchBuilder();
ActivePolicySearch.and("active", ActivePolicySearch.entity().isActive(), SearchCriteria.Op.EQ);
ActivePolicySearch.done();
@@ -84,5 +98,5 @@ public class SnapshotPolicyDaoImpl extends GenericDaoBase<SnapshotPolicyVO, Long
SearchCriteria<SnapshotPolicyVO> sc = ActivePolicySearch.create();
sc.setParameters("active", true);
return listIncludingRemovedBy(sc);
- }
+ }
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/2955d589/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java b/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java
index 6a0f71d..15d8c53 100755
--- a/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java
+++ b/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java
@@ -69,6 +69,7 @@ import com.cloud.exception.StorageUnavailableException;
import com.cloud.host.HostVO;
import com.cloud.host.dao.HostDao;
import com.cloud.hypervisor.Hypervisor.HypervisorType;
+import com.cloud.network.PhysicalNetworkTrafficType;
import com.cloud.org.Grouping;
import com.cloud.projects.Project.ListProjectResourcesCriteria;
import com.cloud.resource.ResourceManager;
@@ -177,7 +178,7 @@ public class SnapshotManagerImpl implements SnapshotManager, SnapshotService, Ma
private SwiftManager _swiftMgr;
@Inject
private S3Manager _s3Mgr;
- @Inject
+ @Inject
private SecondaryStorageVmManager _ssvmMgr;
@Inject
private ResourceManager _resourceMgr;
@@ -187,7 +188,7 @@ public class SnapshotManagerImpl implements SnapshotManager, SnapshotService, Ma
private VolumeDao _volumeDao;
@Inject
private ResourceTagDao _resourceTagDao;
-
+
String _name;
private int _totalRetries;
private int _pauseInterval;
@@ -197,15 +198,15 @@ public class SnapshotManagerImpl implements SnapshotManager, SnapshotService, Ma
protected SearchBuilder<SnapshotVO> PolicySnapshotSearch;
protected SearchBuilder<SnapshotPolicyVO> PoliciesForSnapSearch;
-
-
+
+
protected Answer sendToPool(Volume vol, Command cmd) {
StoragePool pool = _storagePoolDao.findById(vol.getPoolId());
-
+
long[] hostIdsToTryFirst = null;
-
+
Long vmHostId = getHostIdForSnapshotOperation(vol);
-
+
if (vmHostId != null) {
hostIdsToTryFirst = new long[] { vmHostId };
}
@@ -280,7 +281,7 @@ public class SnapshotManagerImpl implements SnapshotManager, SnapshotService, Ma
}
ManageSnapshotCommand cmd = new ManageSnapshotCommand(snapshotId, volume.getPath(), srcPool, preSnapshotPath, snapshot.getName(), vmName);
-
+
ManageSnapshotAnswer answer = (ManageSnapshotAnswer) sendToPool(volume, cmd);
// Update the snapshot in the database
if ((answer != null) && answer.getResult()) {
@@ -298,7 +299,7 @@ public class SnapshotManagerImpl implements SnapshotManager, SnapshotService, Ma
_snapshotDao.update(snapshotId, snapshot);
} else {
long preSnapshotId = 0;
-
+
if (preSnapshotVO != null && preSnapshotVO.getBackupSnapshotId() != null) {
preSnapshotId = preId;
// default delta snap number is 16
@@ -322,7 +323,7 @@ public class SnapshotManagerImpl implements SnapshotManager, SnapshotService, Ma
preSnapshotId = 0;
}
}
-
+
//If the volume is moved around, backup a full snapshot to secondary storage
if (volume.getLastPoolId() != null && !volume.getLastPoolId().equals(volume.getPoolId())) {
preSnapshotId = 0;
@@ -359,24 +360,24 @@ public class SnapshotManagerImpl implements SnapshotManager, SnapshotService, Ma
@DB
@ActionEvent(eventType = EventTypes.EVENT_SNAPSHOT_CREATE, eventDescription = "creating snapshot", async = true)
public SnapshotVO createSnapshot(Long volumeId, Long policyId, Long snapshotId, Account snapshotOwner) {
- VolumeVO volume = _volsDao.findById(volumeId);
+ VolumeVO volume = _volsDao.findById(volumeId);
if (volume == null) {
throw new InvalidParameterValueException("No such volume exist");
}
-
+
if (volume.getState() != Volume.State.Ready) {
throw new InvalidParameterValueException("Volume is not in ready state");
}
-
+
SnapshotVO snapshot = null;
-
+
boolean backedUp = false;
UserVmVO uservm = null;
// does the caller have the authority to act on this volume
_accountMgr.checkAccess(UserContext.current().getCaller(), null, true, volume);
-
+
try {
-
+
Long poolId = volume.getPoolId();
if (poolId == null) {
throw new CloudRuntimeException("You cannot take a snapshot of a volume until it has been attached to an instance");
@@ -387,7 +388,7 @@ public class SnapshotManagerImpl implements SnapshotManager, SnapshotService, Ma
if (uservm != null && uservm.getType() != VirtualMachine.Type.User) {
throw new CloudRuntimeException("Can't take a snapshot on system vm ");
}
-
+
StoragePoolVO storagePool = _storagePoolDao.findById(volume.getPoolId());
ClusterVO cluster = _clusterDao.findById(storagePool.getClusterId());
List<HostVO> hosts = _resourceMgr.listAllHostsInCluster(cluster.getId());
@@ -407,7 +408,7 @@ public class SnapshotManagerImpl implements SnapshotManager, SnapshotService, Ma
throw new CloudRuntimeException("Creating snapshot failed due to volume:" + volumeId + " is associated with vm:" + userVm.getInstanceName() + " is in "
+ userVm.getState().toString() + " state");
}
-
+
if(userVm.getHypervisorType() == HypervisorType.VMware || userVm.getHypervisorType() == HypervisorType.KVM) {
List<SnapshotVO> activeSnapshots = _snapshotDao.listByInstanceId(volume.getInstanceId(), Snapshot.Status.Creating, Snapshot.Status.CreatedOnPrimary, Snapshot.Status.BackingUp);
if(activeSnapshots.size() > 1)
@@ -560,7 +561,7 @@ public class SnapshotManagerImpl implements SnapshotManager, SnapshotService, Ma
} catch (Exception e) {
throw new CloudRuntimeException("downloadSnapshotsFromSwift failed due to " + e.toString());
}
-
+
}
private List<String> determineBackupUuids(final SnapshotVO snapshot) {
@@ -630,9 +631,9 @@ public class SnapshotManagerImpl implements SnapshotManager, SnapshotService, Ma
Long dcId = volume.getDataCenterId();
Long accountId = volume.getAccountId();
-
+
HostVO secHost = getSecHost(volumeId, volume.getDataCenterId());
-
+
String secondaryStoragePoolUrl = secHost.getStorageUrl();
String snapshotUuid = snapshot.getPath();
// In order to verify that the snapshot is not empty,
@@ -647,12 +648,12 @@ public class SnapshotManagerImpl implements SnapshotManager, SnapshotService, Ma
S3TO s3 = _s3Mgr.getS3TO();
checkObjectStorageConfiguration(swift, s3);
-
+
long prevSnapshotId = snapshot.getPrevSnapshotId();
if (prevSnapshotId > 0) {
prevSnapshot = _snapshotDao.findByIdIncludingRemoved(prevSnapshotId);
if ( prevSnapshot.getBackupSnapshotId() != null && swift == null) {
- if (prevSnapshot.getVersion() != null && prevSnapshot.getVersion().equals("2.2")) {
+ if (prevSnapshot.getVersion() != null && prevSnapshot.getVersion().equals("2.2")) {
prevBackupUuid = prevSnapshot.getBackupSnapshotId();
prevSnapshotUuid = prevSnapshot.getPath();
}
@@ -724,7 +725,7 @@ public class SnapshotManagerImpl implements SnapshotManager, SnapshotService, Ma
private HostVO getSecHost(long volumeId, long dcId) {
Long id = _snapshotDao.getSecHostId(volumeId);
- if ( id != null) {
+ if ( id != null) {
return _hostDao.findById(id);
}
return _storageMgr.getSecondaryStorageHost(dcId);
@@ -743,7 +744,7 @@ public class SnapshotManagerImpl implements SnapshotManager, SnapshotService, Ma
public void postCreateSnapshot(Long volumeId, Long snapshotId, Long policyId, boolean backedUp) {
Long userId = getSnapshotUserId();
SnapshotVO snapshot = _snapshotDao.findById(snapshotId);
-
+
if (snapshot != null && snapshot.isRecursive()) {
postCreateRecurringSnapshotForPolicy(userId, volumeId, snapshotId, policyId);
}
@@ -783,13 +784,13 @@ public class SnapshotManagerImpl implements SnapshotManager, SnapshotService, Ma
if (snapshotCheck == null) {
throw new InvalidParameterValueException("unable to find a snapshot with id " + snapshotId);
}
-
+
_accountMgr.checkAccess(caller, null, true, snapshotCheck);
-
+
if( !Status.BackedUp.equals(snapshotCheck.getStatus() ) ) {
throw new InvalidParameterValueException("Can't delete snapshotshot " + snapshotId + " due to it is not in BackedUp Status");
}
-
+
return deleteSnapshotInternal(snapshotId);
}
@@ -943,7 +944,7 @@ public class SnapshotManagerImpl implements SnapshotManager, SnapshotService, Ma
String snapshotTypeStr = cmd.getSnapshotType();
String intervalTypeStr = cmd.getIntervalType();
Map<String, String> tags = cmd.getTags();
-
+
Account caller = UserContext.current().getCaller();
List<Long> permittedAccounts = new ArrayList<Long>();
@@ -959,8 +960,8 @@ public class SnapshotManagerImpl implements SnapshotManager, SnapshotService, Ma
_accountMgr.buildACLSearchParameters(caller, id, cmd.getAccountName(), cmd.getProjectId(), permittedAccounts, domainIdRecursiveListProject, cmd.listAll(), false);
Long domainId = domainIdRecursiveListProject.first();
Boolean isRecursive = domainIdRecursiveListProject.second();
- ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.third();
-
+ ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.third();
+
Filter searchFilter = new Filter(SnapshotVO.class, "created", false, cmd.getStartIndex(), cmd.getPageSizeVal());
SearchBuilder<SnapshotVO> sb = _snapshotDao.createSearchBuilder();
_accountMgr.buildACLSearchBuilder(sb, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria);
@@ -971,7 +972,7 @@ public class SnapshotManagerImpl implements SnapshotManager, SnapshotService, Ma
sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ);
sb.and("snapshotTypeEQ", sb.entity().getsnapshotType(), SearchCriteria.Op.IN);
sb.and("snapshotTypeNEQ", sb.entity().getsnapshotType(), SearchCriteria.Op.NEQ);
-
+
if (tags != null && !tags.isEmpty()) {
SearchBuilder<ResourceTagVO> tagSearch = _resourceTagDao.createSearchBuilder();
for (int count=0; count < tags.size(); count++) {
@@ -990,7 +991,7 @@ public class SnapshotManagerImpl implements SnapshotManager, SnapshotService, Ma
if (volumeId != null) {
sc.setParameters("volumeId", volumeId);
}
-
+
if (tags != null && !tags.isEmpty()) {
int count = 0;
sc.setJoinParameters("tagSearch", "resourceType", TaggedResourceType.Snapshot.toString());
@@ -1133,9 +1134,9 @@ public class SnapshotManagerImpl implements SnapshotManager, SnapshotService, Ma
if (volume == null) {
throw new InvalidParameterValueException("Failed to create snapshot policy, unable to find a volume with id " + volumeId);
}
-
+
_accountMgr.checkAccess(UserContext.current().getCaller(), null, true, volume);
-
+
if (volume.getState() != Volume.State.Ready) {
throw new InvalidParameterValueException("VolumeId: " + volumeId + " is not in " + Volume.State.Ready + " state but " + volume.getState() + ". Cannot take snapshot.");
}
@@ -1191,7 +1192,7 @@ public class SnapshotManagerImpl implements SnapshotManager, SnapshotService, Ma
if (owner.getType() == Account.ACCOUNT_TYPE_PROJECT) {
message = "domain/project";
}
-
+
throw new InvalidParameterValueException("Max number of snapshots shouldn't exceed the " + message + " level snapshot limit");
}
@@ -1227,14 +1228,15 @@ public class SnapshotManagerImpl implements SnapshotManager, SnapshotService, Ma
}
@Override
- public List<SnapshotPolicyVO> listPoliciesforVolume(ListSnapshotPoliciesCmd cmd) {
+ public Pair<List<? extends SnapshotPolicy>, Integer> listPoliciesforVolume(ListSnapshotPoliciesCmd cmd) {
Long volumeId = cmd.getVolumeId();
VolumeVO volume = _volsDao.findById(volumeId);
if (volume == null) {
throw new InvalidParameterValueException("Unable to find a volume with id " + volumeId);
}
_accountMgr.checkAccess(UserContext.current().getCaller(), null, true, volume);
- return listPoliciesforVolume(cmd.getVolumeId());
+ Pair<List<SnapshotPolicyVO>, Integer> result = _snapshotPolicyDao.listAndCountByVolumeId(volumeId);
+ return new Pair<List<? extends SnapshotPolicy>, Integer>(result.first(), result.second());
}
@Override
@@ -1352,7 +1354,7 @@ public class SnapshotManagerImpl implements SnapshotManager, SnapshotService, Ma
@Override
public SnapshotVO allocSnapshot(Long volumeId, Long policyId) throws ResourceAllocationException {
Account caller = UserContext.current().getCaller();
-
+
VolumeVO volume = _volsDao.findById(volumeId);
if (volume == null) {
throw new InvalidParameterValueException("Creating snapshot failed due to volume:" + volumeId + " doesn't exist");
@@ -1361,11 +1363,11 @@ public class SnapshotManagerImpl implements SnapshotManager, SnapshotService, Ma
if (zone == null) {
throw new InvalidParameterValueException("Can't find zone by id " + volume.getDataCenterId());
}
-
+
if (Grouping.AllocationState.Disabled == zone.getAllocationState() && !_accountMgr.isRootAdmin(caller.getType())) {
throw new PermissionDeniedException("Cannot perform this operation, Zone is currently disabled: " + zone.getName());
}
-
+
if (volume.getState() != Volume.State.Ready) {
throw new InvalidParameterValueException("VolumeId: " + volumeId + " is not in " + Volume.State.Ready + " state but " + volume.getState() + ". Cannot take snapshot.");
}
@@ -1376,7 +1378,7 @@ public class SnapshotManagerImpl implements SnapshotManager, SnapshotService, Ma
throw new InvalidParameterValueException("VolumeId: " + volumeId + " is for System VM , Creating snapshot against System VM volumes is not supported");
}
}
-
+
StoragePoolVO storagePoolVO = _storagePoolDao.findById(volume.getPoolId());
if (storagePoolVO == null) {
throw new InvalidParameterValueException("VolumeId: " + volumeId + " please attach this volume to a VM before create snapshot for it");
@@ -1386,7 +1388,7 @@ public class SnapshotManagerImpl implements SnapshotManager, SnapshotService, Ma
if (cluster != null && cluster.getHypervisorType() == HypervisorType.Ovm) {
throw new InvalidParameterValueException("Ovm won't support taking snapshot");
}
-
+
// Verify permissions
_accountMgr.checkAccess(caller, null, true, volume);
Type snapshotType = getSnapshotType(policyId);
@@ -1397,7 +1399,7 @@ public class SnapshotManagerImpl implements SnapshotManager, SnapshotService, Ma
if (snapshotType != Type.MANUAL){
String msg = "Snapshot resource limit exceeded for account id : " + owner.getId() + ". Failed to create recurring snapshots";
s_logger.warn(msg);
- _alertMgr.sendAlert(AlertManager.ALERT_TYPE_UPDATE_RESOURCE_COUNT, 0L, 0L, msg,
+ _alertMgr.sendAlert(AlertManager.ALERT_TYPE_UPDATE_RESOURCE_COUNT, 0L, 0L, msg,
"Snapshot resource limit exceeded for account id : " + owner.getId() + ". Failed to create recurring snapshots; please use updateResourceLimit to increase the limit");
}
throw e;
@@ -1415,7 +1417,7 @@ public class SnapshotManagerImpl implements SnapshotManager, SnapshotService, Ma
String snapshotName = vmDisplayName + "_" + volume.getName() + "_" + timeString;
// Create the Snapshot object and save it so we can return it to the
- // user
+ // user
HypervisorType hypervisorType = this._volsDao.getHypervisorType(volumeId);
SnapshotVO snapshotVO = new SnapshotVO(volume.getDataCenterId(), volume.getAccountId(), volume.getDomainId(), volume.getId(), volume.getDiskOfferingId(), null, snapshotName,
(short) snapshotType.ordinal(), snapshotType.name(), volume.getSize(), hypervisorType);
@@ -1436,7 +1438,7 @@ public class SnapshotManagerImpl implements SnapshotManager, SnapshotService, Ma
if (configDao == null) {
throw new ConfigurationException("Unable to get the configuration dao.");
}
-
+
String value = configDao.getValue(Config.BackupSnapshotWait.toString());
_backupsnapshotwait = NumbersUtil.parseInt(value, Integer.parseInt(Config.BackupSnapshotWait.getDefaultValue()));
@@ -1533,7 +1535,7 @@ public class SnapshotManagerImpl implements SnapshotManager, SnapshotService, Ma
}
return false;
}
-
+
@Override
public boolean canOperateOnVolume(VolumeVO volume) {
List<SnapshotVO> snapshots = _snapshotDao.listByStatus(volume.getId(), Status.Creating, Status.CreatedOnPrimary, Status.BackingUp);