Arik Hadas has uploaded a new change for review. Change subject: core: [WIP] add memory snapshots capability to VdsBroker ......................................................................
core: [WIP] add memory snapshots capability to VdsBroker This patch adds the capability of taking a snapshot with memory state to VdsBroker project: 1. add new call in the interface against VDSM that also pass an image which will contain the memory state when calling to snapshot verb 2. a memory image parameter was added to SnapshotVDSCommandParameters that indicates where to dump the memory to 3. SnapshotVDSCommand was changed such that if the parameters contain memory image, then it invokes the new call added to the interfact against VDSM Change-Id: Id928c76562d520acbf36ca01e074e51cbdcccaf9 Signed-off-by: Arik Hadas <[email protected]> --- M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/SnapshotVDSCommandParameters.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/IVdsServer.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/SnapshotVDSCommand.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerConnector.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerWrapper.java 5 files changed, 57 insertions(+), 9 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/01/14201/1 diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/SnapshotVDSCommandParameters.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/SnapshotVDSCommandParameters.java index 4ecbf67..8e05813 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/SnapshotVDSCommandParameters.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/SnapshotVDSCommandParameters.java @@ -6,14 +6,30 @@ import org.ovirt.engine.core.compat.Guid; public class SnapshotVDSCommandParameters extends VdsAndVmIDVDSParametersBase { + /** Those are the disks images that snapshot should be taken for */ private List<DiskImage> images; + /** This is the image to which the memory would be dump to */ + private DiskImage memoryImage; public SnapshotVDSCommandParameters(Guid vdsId, Guid vmId, List<DiskImage> images) { super(vdsId, vmId); this.images = images; } + public SnapshotVDSCommandParameters(Guid vdsId, Guid vmId, List<DiskImage> images, DiskImage memoryImage) { + this(vdsId, vmId, images); + this.memoryImage = memoryImage; + } + public List<DiskImage> getImages() { return images; } + + public DiskImage getMemoryImage() { + return memoryImage; + } + + public boolean isMemoryImageExists() { + return memoryImage != null; + } } diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/IVdsServer.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/IVdsServer.java index 41fe126..edaf644 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/IVdsServer.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/IVdsServer.java @@ -181,7 +181,9 @@ FutureTask<Map<String, Object>> poll(); - StatusOnlyReturnForXmlRpc snapshot(String vmId, Map<String, String>[] snapParams); + StatusOnlyReturnForXmlRpc snapshot(String vmId, Map<String, String>[] disks); + + StatusOnlyReturnForXmlRpc snapshot(String vmId, Map<String, String>[] disks, Map<String, String> memory); // Gluster vdsm Commands OneUuidReturnForXmlRpc glusterVolumeCreate(String volumeName, diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/SnapshotVDSCommand.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/SnapshotVDSCommand.java index 9787b0c..dabff9d 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/SnapshotVDSCommand.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/SnapshotVDSCommand.java @@ -21,24 +21,41 @@ @Override protected void ExecuteVdsBrokerCommand() { - status = getBroker().snapshot(getParameters().getVmId().toString(), createSnapshotParameters()); + status = snapshot(); ProceedProxyReturnValue(); } - private Map<String, String>[] createSnapshotParameters() { + private StatusOnlyReturnForXmlRpc snapshot() { + String vmId = getParameters().getVmId().toString(); + return getParameters().isMemoryImageExists() ? + getBroker().snapshot(vmId, createDisksMap()) + : getBroker().snapshot(vmId, createDisksMap(), createMemoryMap()); + } + + private Map<String, String>[] createDisksMap() { @SuppressWarnings("unchecked") Map<String, String>[] result = new HashMap[getParameters().getImages().size()]; for (int i = 0; i < result.length; i++) { DiskImage image = getParameters().getImages().get(i); Map<String, String> imageParams = new HashMap<String, String>(); - imageParams.put("domainID", image.getStorageIds().get(0).toString()); - imageParams.put("imageID", image.getimage_group_id().toString()); + imageParams.put("domainID", image.getStorageIds().get(0).toString()); + imageParams.put("imageID", image.getimage_group_id().toString()); imageParams.put("baseVolumeID", image.getParentId().toString()); - imageParams.put("volumeID", image.getImageId().toString()); + imageParams.put("volumeID", image.getImageId().toString()); result[i] = imageParams; } return result; } + + private Map<String, String> createMemoryMap() { + Map<String, String> result = new HashMap<String, String>(); + DiskImage memoryImage = getParameters().getMemoryImage(); + result.put("domainID", memoryImage.getStorageIds().get(0).toString()); + result.put("imageID", memoryImage.getimage_group_id().toString()); + result.put("baseVolumeID", memoryImage.getParentId().toString()); + result.put("volumeID", memoryImage.getImageId().toString()); + return result; + } } diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerConnector.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerConnector.java index 70b2e59..62fd7fc 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerConnector.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerConnector.java @@ -166,7 +166,9 @@ public Map<String, Object> vmUpdateDevice(String vmId, Map<String, Object> device); - Map<String, Object> snapshot(String vmId, Map<String, String>[] snapParams); + Map<String, Object> snapshot(String vmId, Map<String, String>[] disks); + + Map<String, Object> snapshot(String vmId, Map<String, String>[] disks, Map<String, String> memory); // Gluster vdsm commands public Map<String, Object> glusterVolumeCreate(String volumeName, diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerWrapper.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerWrapper.java index b7d8764..8e34fb1 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerWrapper.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerWrapper.java @@ -902,9 +902,20 @@ } @Override - public StatusOnlyReturnForXmlRpc snapshot(String vmId, Map<String, String>[] snapParams) { + public StatusOnlyReturnForXmlRpc snapshot(String vmId, Map<String, String>[] disks) { try { - Map<String, Object> xmlRpcReturnValue = vdsServer.snapshot(vmId, snapParams); + Map<String, Object> xmlRpcReturnValue = vdsServer.snapshot(vmId, disks); + StatusOnlyReturnForXmlRpc wrapper = new StatusOnlyReturnForXmlRpc(xmlRpcReturnValue); + return wrapper; + } catch (UndeclaredThrowableException ute) { + throw new XmlRpcRunTimeException(ute); + } + } + + @Override + public StatusOnlyReturnForXmlRpc snapshot(String vmId, Map<String, String>[] disks, Map<String, String> memory) { + try { + Map<String, Object> xmlRpcReturnValue = vdsServer.snapshot(vmId, disks, memory); StatusOnlyReturnForXmlRpc wrapper = new StatusOnlyReturnForXmlRpc(xmlRpcReturnValue); return wrapper; } catch (UndeclaredThrowableException ute) { -- To view, visit http://gerrit.ovirt.org/14201 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Id928c76562d520acbf36ca01e074e51cbdcccaf9 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Arik Hadas <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
