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

Reply via email to