Updated Branches: refs/heads/master 2e07c452e -> c5bec6b33
add quiescevm in createvmsnapshotcmd Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/c5bec6b3 Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/c5bec6b3 Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/c5bec6b3 Branch: refs/heads/master Commit: c5bec6b336c5fe5c3f84294901586d27cdca30e5 Parents: 2e07c45 Author: Edison Su <sudi...@gmail.com> Authored: Thu Oct 31 16:44:44 2013 -0700 Committer: Edison Su <sudi...@gmail.com> Committed: Thu Oct 31 16:45:05 2013 -0700 ---------------------------------------------------------------------- .../cloud/vm/snapshot/VMSnapshotService.java | 2 +- .../org/apache/cloudstack/api/ApiConstants.java | 1 + .../user/vmsnapshot/CreateVMSnapshotCmd.java | 13 ++++++++- .../api/storage/VMSnapshotOptions.java | 30 ++++++++++++++++++++ .../src/com/cloud/vm/snapshot/VMSnapshotVO.java | 16 ++++++++++- .../vm/snapshot/VMSnapshotManagerImpl.java | 5 +++- 6 files changed, 63 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c5bec6b3/api/src/com/cloud/vm/snapshot/VMSnapshotService.java ---------------------------------------------------------------------- diff --git a/api/src/com/cloud/vm/snapshot/VMSnapshotService.java b/api/src/com/cloud/vm/snapshot/VMSnapshotService.java index 83f86bc..1ae7edc 100644 --- a/api/src/com/cloud/vm/snapshot/VMSnapshotService.java +++ b/api/src/com/cloud/vm/snapshot/VMSnapshotService.java @@ -35,7 +35,7 @@ public interface VMSnapshotService { VMSnapshot getVMSnapshotById(Long id); - VMSnapshot creatVMSnapshot(Long vmId, Long vmSnapshotId); + VMSnapshot creatVMSnapshot(Long vmId, Long vmSnapshotId, Boolean quiescevm); VMSnapshot allocVMSnapshot(Long vmId, String vsDisplayName, String vsDescription, Boolean snapshotMemory) throws ResourceAllocationException; http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c5bec6b3/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 b1bfcfb..3b2bc67 100755 --- a/api/src/org/apache/cloudstack/api/ApiConstants.java +++ b/api/src/org/apache/cloudstack/api/ApiConstants.java @@ -490,6 +490,7 @@ public class ApiConstants { public static final String VM_SNAPSHOT_ID = "vmsnapshotid"; public static final String VM_SNAPSHOT_DISK_IDS = "vmsnapshotdiskids"; public static final String VM_SNAPSHOT_MEMORY = "snapshotmemory"; + public static final String VM_SNAPSHOT_QUIESCEVM = "quiescevm"; public static final String IMAGE_STORE_UUID = "imagestoreuuid"; public static final String GUEST_VM_CIDR = "guestvmcidr"; public static final String NETWORK_CIDR = "networkcidr"; http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c5bec6b3/api/src/org/apache/cloudstack/api/command/user/vmsnapshot/CreateVMSnapshotCmd.java ---------------------------------------------------------------------- diff --git a/api/src/org/apache/cloudstack/api/command/user/vmsnapshot/CreateVMSnapshotCmd.java b/api/src/org/apache/cloudstack/api/command/user/vmsnapshot/CreateVMSnapshotCmd.java index 542215a..252a206 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vmsnapshot/CreateVMSnapshotCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vmsnapshot/CreateVMSnapshotCmd.java @@ -53,6 +53,9 @@ public class CreateVMSnapshotCmd extends BaseAsyncCreateCmd { @Parameter(name = ApiConstants.VM_SNAPSHOT_MEMORY, type = CommandType.BOOLEAN, required = false, description = "snapshot memory if true") private Boolean snapshotMemory; + @Parameter(name = ApiConstants.VM_SNAPSHOT_QUIESCEVM, type = CommandType.BOOLEAN, required = false, description = "quiesce vm if true") + private Boolean quiescevm; + public Boolean snapshotMemory() { if (snapshotMemory == null) { return false; @@ -61,6 +64,14 @@ public class CreateVMSnapshotCmd extends BaseAsyncCreateCmd { } } + public Boolean getQuiescevm() { + if (quiescevm == null) { + return false; + } else { + return quiescevm; + } + } + public String getDisplayName() { return displayName; } @@ -97,7 +108,7 @@ public class CreateVMSnapshotCmd extends BaseAsyncCreateCmd { @Override public void execute() { CallContext.current().setEventDetails("VM Id: " + getVmId()); - VMSnapshot result = _vmSnapshotService.creatVMSnapshot(getVmId(),getEntityId()); + VMSnapshot result = _vmSnapshotService.creatVMSnapshot(getVmId(),getEntityId(), getQuiescevm()); if (result != null) { VMSnapshotResponse response = _responseGenerator .createVMSnapshotResponse(result); http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c5bec6b3/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/VMSnapshotOptions.java ---------------------------------------------------------------------- diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/VMSnapshotOptions.java b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/VMSnapshotOptions.java new file mode 100644 index 0000000..84a440d --- /dev/null +++ b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/VMSnapshotOptions.java @@ -0,0 +1,30 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.cloudstack.engine.subsystem.api.storage; + +public class VMSnapshotOptions { + private final boolean quiesceVM; + public VMSnapshotOptions(boolean quiesceVM) { + this.quiesceVM = quiesceVM; + } + + public boolean needQuiesceVM() { + return quiesceVM; + } +} http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c5bec6b3/engine/schema/src/com/cloud/vm/snapshot/VMSnapshotVO.java ---------------------------------------------------------------------- diff --git a/engine/schema/src/com/cloud/vm/snapshot/VMSnapshotVO.java b/engine/schema/src/com/cloud/vm/snapshot/VMSnapshotVO.java index 477148c..a888c12 100644 --- a/engine/schema/src/com/cloud/vm/snapshot/VMSnapshotVO.java +++ b/engine/schema/src/com/cloud/vm/snapshot/VMSnapshotVO.java @@ -31,6 +31,9 @@ import javax.persistence.Table; import javax.persistence.TableGenerator; import javax.persistence.Temporal; import javax.persistence.TemporalType; +import javax.persistence.Transient; + +import org.apache.cloudstack.engine.subsystem.api.storage.VMSnapshotOptions; import com.cloud.utils.db.GenericDao; @@ -90,7 +93,18 @@ public class VMSnapshotVO implements VMSnapshot { @Column(name="update_count", updatable = true, nullable=false) protected long updatedCount; - + + @Transient + VMSnapshotOptions options; + + public VMSnapshotOptions getOptions() { + return options; + } + + public void setOptions(VMSnapshotOptions options) { + this.options = options; + } + public Long getParent() { return parent; } http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c5bec6b3/server/src/com/cloud/vm/snapshot/VMSnapshotManagerImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/vm/snapshot/VMSnapshotManagerImpl.java b/server/src/com/cloud/vm/snapshot/VMSnapshotManagerImpl.java index ee81c82..3e6d7f9 100644 --- a/server/src/com/cloud/vm/snapshot/VMSnapshotManagerImpl.java +++ b/server/src/com/cloud/vm/snapshot/VMSnapshotManagerImpl.java @@ -30,6 +30,7 @@ import javax.naming.ConfigurationException; import org.apache.cloudstack.api.command.user.vmsnapshot.ListVMSnapshotCmd; import org.apache.cloudstack.context.CallContext; import org.apache.cloudstack.engine.subsystem.api.storage.StorageStrategyFactory; +import org.apache.cloudstack.engine.subsystem.api.storage.VMSnapshotOptions; import org.apache.cloudstack.engine.subsystem.api.storage.VMSnapshotStrategy; import org.apache.cloudstack.framework.config.dao.ConfigurationDao; import org.apache.log4j.Logger; @@ -310,7 +311,7 @@ public class VMSnapshotManagerImpl extends ManagerBase implements VMSnapshotMana @Override @ActionEvent(eventType = EventTypes.EVENT_VM_SNAPSHOT_CREATE, eventDescription = "creating VM snapshot", async = true) - public VMSnapshot creatVMSnapshot(Long vmId, Long vmSnapshotId) { + public VMSnapshot creatVMSnapshot(Long vmId, Long vmSnapshotId, Boolean quiescevm) { UserVmVO userVm = _userVMDao.findById(vmId); if (userVm == null) { throw new InvalidParameterValueException("Create vm to snapshot failed due to vm: " + vmId + " is not found"); @@ -319,6 +320,8 @@ public class VMSnapshotManagerImpl extends ManagerBase implements VMSnapshotMana if(vmSnapshot == null){ throw new CloudRuntimeException("VM snapshot id: " + vmSnapshotId + " can not be found"); } + VMSnapshotOptions options = new VMSnapshotOptions(quiescevm); + vmSnapshot.setOptions(options); try { VMSnapshotStrategy strategy = findVMSnapshotStrategy(vmSnapshot); VMSnapshot snapshot = strategy.takeVMSnapshot(vmSnapshot);