You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ed...@apache.org on 2013/11/07 23:57:53 UTC
git commit: updated refs/heads/master to c233492
Updated Branches:
refs/heads/master 2014866af -> c233492bf
Add quiencevm option on createsnapshotcmd
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/c233492b
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/c233492b
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/c233492b
Branch: refs/heads/master
Commit: c233492bfcf26c3a5c3781ae412b3381c24a6597
Parents: 2014866
Author: Edison Su <su...@gmail.com>
Authored: Thu Nov 7 14:56:51 2013 -0800
Committer: Edison Su <su...@gmail.com>
Committed: Thu Nov 7 14:57:05 2013 -0800
----------------------------------------------------------------------
api/src/com/cloud/storage/VolumeApiService.java | 2 +-
api/src/org/apache/cloudstack/api/ApiConstants.java | 1 +
.../api/command/user/snapshot/CreateSnapshotCmd.java | 10 ++++++++++
.../cloudstack/storage/to/SnapshotObjectTO.java | 10 ++++++++++
.../engine/subsystem/api/storage/SnapshotInfo.java | 1 +
.../cloudstack/storage/snapshot/SnapshotObject.java | 7 +++++++
.../driver/CloudStackPrimaryDataStoreDriverImpl.java | 15 ++++++++-------
.../src/com/cloud/storage/CreateSnapshotPayload.java | 9 +++++++++
.../src/com/cloud/storage/VolumeApiServiceImpl.java | 3 ++-
.../cloud/storage/snapshot/SnapshotManagerImpl.java | 2 +-
10 files changed, 50 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c233492b/api/src/com/cloud/storage/VolumeApiService.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/storage/VolumeApiService.java b/api/src/com/cloud/storage/VolumeApiService.java
index 4806ae7..2865628 100644
--- a/api/src/com/cloud/storage/VolumeApiService.java
+++ b/api/src/com/cloud/storage/VolumeApiService.java
@@ -79,7 +79,7 @@ public interface VolumeApiService {
Volume detachVolumeFromVM(DetachVolumeCmd cmmd);
- Snapshot takeSnapshot(Long volumeId, Long policyId, Long snapshotId, Account account)
+ Snapshot takeSnapshot(Long volumeId, Long policyId, Long snapshotId, Account account, boolean quiescevm)
throws ResourceAllocationException;
Snapshot allocSnapshot(Long volumeId, Long policyId)
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c233492b/api/src/org/apache/cloudstack/api/ApiConstants.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/ApiConstants.java b/api/src/org/apache/cloudstack/api/ApiConstants.java
index bd52593..a348684 100755
--- a/api/src/org/apache/cloudstack/api/ApiConstants.java
+++ b/api/src/org/apache/cloudstack/api/ApiConstants.java
@@ -210,6 +210,7 @@ public class ApiConstants {
public static final String SNAPSHOT_ID = "snapshotid";
public static final String SNAPSHOT_POLICY_ID = "snapshotpolicyid";
public static final String SNAPSHOT_TYPE = "snapshottype";
+ public static final String SNAPSHOT_QUIESCEVM = "quiescevm";
public static final String SOURCE_ZONE_ID = "sourcezoneid";
public static final String START_DATE = "startdate";
public static final String START_IP = "startip";
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c233492b/api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotCmd.java b/api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotCmd.java
index 9fe5ffe..64b3772 100644
--- a/api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotCmd.java
@@ -65,12 +65,22 @@ public class CreateSnapshotCmd extends BaseAsyncCreateCmd {
description = "policy id of the snapshot, if this is null, then use MANUAL_POLICY.")
private Long policyId;
+ @Parameter(name = ApiConstants.SNAPSHOT_QUIESCEVM, type = CommandType.BOOLEAN, required = false, description = "quiesce vm if true")
+ private Boolean quiescevm;
+
private String syncObjectType = BaseAsyncCmd.snapshotHostSyncObject;
// ///////////////////////////////////////////////////
// ///////////////// Accessors ///////////////////////
// ///////////////////////////////////////////////////
+ public Boolean getQuiescevm() {
+ if (quiescevm == null) {
+ return false;
+ } else {
+ return quiescevm;
+ }
+ }
public String getAccountName() {
return accountName;
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c233492b/core/src/org/apache/cloudstack/storage/to/SnapshotObjectTO.java
----------------------------------------------------------------------
diff --git a/core/src/org/apache/cloudstack/storage/to/SnapshotObjectTO.java b/core/src/org/apache/cloudstack/storage/to/SnapshotObjectTO.java
index bacc0f9..34e977c 100644
--- a/core/src/org/apache/cloudstack/storage/to/SnapshotObjectTO.java
+++ b/core/src/org/apache/cloudstack/storage/to/SnapshotObjectTO.java
@@ -33,6 +33,7 @@ public class SnapshotObjectTO implements DataTO {
private String name;
private HypervisorType hypervisorType;
private long id;
+ private boolean quiescevm;
public SnapshotObjectTO() {
@@ -54,6 +55,7 @@ public class SnapshotObjectTO implements DataTO {
this.dataStore = snapshot.getDataStore().getTO();
this.setName(snapshot.getName());
this.hypervisorType = snapshot.getHypervisorType();
+ this.quiescevm = false;
}
@Override
@@ -129,6 +131,14 @@ public class SnapshotObjectTO implements DataTO {
this.hypervisorType = hypervisorType;
}
+ public boolean getquiescevm() {
+ return this.quiescevm;
+ }
+
+ public void setQuiescevm(boolean quiescevm) {
+ this.quiescevm = quiescevm;
+ }
+
@Override
public String toString() {
return new StringBuilder("SnapshotTO[datastore=").append(dataStore).append("|volume=").append(volume).append("|path")
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c233492b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/SnapshotInfo.java
----------------------------------------------------------------------
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/SnapshotInfo.java b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/SnapshotInfo.java
index a0ef7dd..c004334 100644
--- a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/SnapshotInfo.java
+++ b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/SnapshotInfo.java
@@ -28,6 +28,7 @@ public interface SnapshotInfo extends DataObject, Snapshot {
VolumeInfo getBaseVolume();
void addPayload(Object data);
+ Object getPayload();
Long getDataCenterId();
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c233492b/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotObject.java
----------------------------------------------------------------------
diff --git a/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotObject.java b/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotObject.java
index daf6477..ee02eed 100644
--- a/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotObject.java
+++ b/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotObject.java
@@ -62,6 +62,7 @@ public class SnapshotObject implements SnapshotInfo {
private static final Logger s_logger = Logger.getLogger(SnapshotObject.class);
private SnapshotVO snapshot;
private DataStore store;
+ private Object payload;
@Inject
protected SnapshotDao snapshotDao;
@Inject
@@ -358,6 +359,12 @@ public class SnapshotObject implements SnapshotInfo {
@Override
public void addPayload(Object data) {
+ this.payload = data;
+ }
+
+ @Override
+ public Object getPayload() {
+ return this.payload;
}
@Override
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c233492b/plugins/storage/volume/default/src/org/apache/cloudstack/storage/datastore/driver/CloudStackPrimaryDataStoreDriverImpl.java
----------------------------------------------------------------------
diff --git a/plugins/storage/volume/default/src/org/apache/cloudstack/storage/datastore/driver/CloudStackPrimaryDataStoreDriverImpl.java b/plugins/storage/volume/default/src/org/apache/cloudstack/storage/datastore/driver/CloudStackPrimaryDataStoreDriverImpl.java
index 2db0a08..327d87c 100644
--- a/plugins/storage/volume/default/src/org/apache/cloudstack/storage/datastore/driver/CloudStackPrimaryDataStoreDriverImpl.java
+++ b/plugins/storage/volume/default/src/org/apache/cloudstack/storage/datastore/driver/CloudStackPrimaryDataStoreDriverImpl.java
@@ -22,6 +22,8 @@ import java.util.UUID;
import javax.inject.Inject;
+import com.cloud.storage.*;
+import org.apache.cloudstack.storage.to.SnapshotObjectTO;
import org.apache.log4j.Logger;
import org.apache.cloudstack.engine.orchestration.service.VolumeOrchestrationService;
@@ -58,11 +60,6 @@ import com.cloud.agent.api.to.StorageFilerTO;
import com.cloud.configuration.Config;
import com.cloud.exception.StorageUnavailableException;
import com.cloud.host.dao.HostDao;
-import com.cloud.storage.DataStoreRole;
-import com.cloud.storage.ResizeVolumePayload;
-import com.cloud.storage.Storage;
-import com.cloud.storage.StorageManager;
-import com.cloud.storage.StoragePool;
import com.cloud.storage.dao.DiskOfferingDao;
import com.cloud.storage.dao.SnapshotDao;
import com.cloud.storage.dao.VMTemplateDao;
@@ -249,8 +246,12 @@ public class CloudStackPrimaryDataStoreDriverImpl implements PrimaryDataStoreDri
public void takeSnapshot(SnapshotInfo snapshot, AsyncCompletionCallback<CreateCmdResult> callback) {
CreateCmdResult result = null;
try {
- DataTO snapshotTO = snapshot.getTO();
-
+ SnapshotObjectTO snapshotTO = (SnapshotObjectTO)snapshot.getTO();
+ Object payload = snapshot.getPayload();
+ if (payload != null && payload instanceof CreateSnapshotPayload) {
+ CreateSnapshotPayload snapshotPayload = (CreateSnapshotPayload)payload;
+ snapshotTO.setQuiescevm(snapshotPayload.getQuiescevm());
+ }
CreateObjectCommand cmd = new CreateObjectCommand(snapshotTO);
EndPoint ep = epSelector.select(snapshot);
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c233492b/server/src/com/cloud/storage/CreateSnapshotPayload.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/CreateSnapshotPayload.java b/server/src/com/cloud/storage/CreateSnapshotPayload.java
index 5adc746..3bc571e 100644
--- a/server/src/com/cloud/storage/CreateSnapshotPayload.java
+++ b/server/src/com/cloud/storage/CreateSnapshotPayload.java
@@ -22,6 +22,7 @@ public class CreateSnapshotPayload {
private Long snapshotPolicyId;
private Long snapshotId;
private Account account;
+ private boolean quiescevm;
public Long getSnapshotPolicyId() {
return snapshotPolicyId;
@@ -47,4 +48,12 @@ public class CreateSnapshotPayload {
this.account = account;
}
+ public void setQuiescevm(boolean quiescevm) {
+ this.quiescevm = quiescevm;
+ }
+
+ public boolean getQuiescevm() {
+ return this.quiescevm;
+ }
+
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c233492b/server/src/com/cloud/storage/VolumeApiServiceImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/VolumeApiServiceImpl.java b/server/src/com/cloud/storage/VolumeApiServiceImpl.java
index 28df219..c830e3d 100644
--- a/server/src/com/cloud/storage/VolumeApiServiceImpl.java
+++ b/server/src/com/cloud/storage/VolumeApiServiceImpl.java
@@ -1383,7 +1383,7 @@ public class VolumeApiServiceImpl extends ManagerBase implements VolumeApiServic
}
@Override
- public Snapshot takeSnapshot(Long volumeId, Long policyId, Long snapshotId, Account account) throws ResourceAllocationException {
+ public Snapshot takeSnapshot(Long volumeId, Long policyId, Long snapshotId, Account account, boolean quiescevm) throws ResourceAllocationException {
VolumeInfo volume = volFactory.getVolume(volumeId);
if (volume == null) {
throw new InvalidParameterValueException("Creating snapshot failed due to volume:" + volumeId + " doesn't exist");
@@ -1397,6 +1397,7 @@ public class VolumeApiServiceImpl extends ManagerBase implements VolumeApiServic
payload.setSnapshotId(snapshotId);
payload.setSnapshotPolicyId(policyId);
payload.setAccount(account);
+ payload.setQuiescevm(quiescevm);
volume.addPayload(payload);
return volService.takeSnapshot(volume);
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c233492b/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 9888c76..4f6a455 100755
--- a/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java
+++ b/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java
@@ -940,7 +940,7 @@ public class SnapshotManagerImpl extends ManagerBase implements SnapshotManager,
Long snapshotId = payload.getSnapshotId();
Account snapshotOwner = payload.getAccount();
SnapshotInfo snapshot = snapshotFactory.getSnapshot(snapshotId, volume.getDataStore());
-
+ snapshot.addPayload(payload);
try {
SnapshotStrategy snapshotStrategy = _storageStrategyFactory.getSnapshotStrategy(snapshot, SnapshotOperation.TAKE);