Greg Padgett has uploaded a new change for review.

Change subject: [WIP] vdsbroker: introduce LiveMergeVDSCommand
......................................................................

[WIP] vdsbroker: introduce LiveMergeVDSCommand

This command calls a new VDSM verb, merge, which will merge VM snapshots
while a VM is running.

Change-Id: I320d1ac7de50f4a24236c6d26af75a3483b8bc5e
Bug-Url: https://bugzilla.redhat.com/??????
Signed-off-by: Greg Padgett <gpadg...@redhat.com>
---
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/asynctasks/AsyncTaskType.java
A 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/MergeVDSCommandParameters.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/IVdsServer.java
A 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/MergeVDSCommand.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
7 files changed, 146 insertions(+), 1 deletion(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/07/26907/1

diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/asynctasks/AsyncTaskType.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/asynctasks/AsyncTaskType.java
index 2a33b56..7fbcb96 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/asynctasks/AsyncTaskType.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/asynctasks/AsyncTaskType.java
@@ -11,7 +11,8 @@
     cloneImageStructure(AsyncTaskCategory.CommandAsyncTask),
     syncImageData(AsyncTaskCategory.CommandAsyncTask),
     extendImageSize(AsyncTaskCategory.CommandAsyncTask),
-    downloadImageFromStream(AsyncTaskCategory.CommandAsyncTask);
+    downloadImageFromStream(AsyncTaskCategory.CommandAsyncTask),
+    liveMerge(AsyncTaskCategory.EntityAsyncTask);
 
     private AsyncTaskCategory taskCategory;
 
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/MergeVDSCommandParameters.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/MergeVDSCommandParameters.java
new file mode 100644
index 0000000..dd1882b
--- /dev/null
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/MergeVDSCommandParameters.java
@@ -0,0 +1,89 @@
+package org.ovirt.engine.core.common.vdscommands;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.ovirt.engine.core.compat.Guid;
+
+public class MergeVDSCommandParameters extends VdsAndVmIDVDSParametersBase {
+    private Guid storagePoolId;
+    private Guid storageDomainId;
+    private Guid imageGroupId;
+    private Guid imageId;
+    private Guid baseImageId;
+    private Guid topImageId;
+    private long bandwidth;
+
+    private MergeVDSCommandParameters() {}
+
+    public MergeVDSCommandParameters(
+            Guid vdsId,
+            Guid vmId,
+            Guid storagePoolId,
+            Guid storageDomainId,
+            Guid imageGroupId,
+            Guid imageId,
+            Guid baseImageId,
+            Guid topImageId,
+            long bandwidth) {
+        super(vdsId, vmId);
+        this.storagePoolId = storagePoolId;
+        this.storageDomainId = storageDomainId;
+        this.imageGroupId = imageGroupId;
+        this.imageId = imageId;
+        this.baseImageId = baseImageId;
+        this.topImageId = topImageId;
+        this.bandwidth = bandwidth;
+    }
+
+    public Guid getStoragePoolId() {
+        return storagePoolId;
+    }
+
+    public Guid getStorageDomainId() {
+        return storageDomainId;
+    }
+
+    public Guid getImageGroupId() {
+        return imageGroupId;
+    }
+
+    public Guid getImageId() {
+        return imageId;
+    }
+
+    public Guid getBaseImageId() {
+        return baseImageId;
+    }
+
+    public Guid getTopImageId() {
+        return topImageId;
+    }
+
+    public long getBandwidth() {
+        return bandwidth;
+    }
+
+    public Map<String, String> getDriveSpecs() {
+        Map<String, String> driveSpecs = new HashMap<String, String>();
+        driveSpecs.put("poolID", getStoragePoolId().toString());
+        driveSpecs.put("domainID", getStorageDomainId().toString());
+        driveSpecs.put("imageID", getImageGroupId().toString());
+        driveSpecs.put("volumeID", getImageId().toString());
+        return driveSpecs;
+    }
+
+    @Override
+    public String toString() {
+        return new StringBuilder("MergeVDSCommandParameters{")
+                .append(super.toString())
+                .append(", storagePoolId=").append(storagePoolId)
+                .append(", storageDomainId=").append(storageDomainId)
+                .append(", imageGroupId=").append(imageGroupId)
+                .append(", imageId=").append(imageId)
+                .append(", baseImageId=").append(baseImageId)
+                .append(", topImageId=").append(topImageId)
+                .append(", bandwidth=").append(bandwidth)
+                .append('}').toString();
+    }
+}
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java
index 0500a64..92368f8 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java
@@ -66,6 +66,7 @@
     UploadImage("org.ovirt.engine.core.vdsbroker.irsbroker"),
     CreateSnapshot("org.ovirt.engine.core.vdsbroker.irsbroker"),
     MergeSnapshots("org.ovirt.engine.core.vdsbroker.irsbroker"),
+    Merge("org.ovirt.engine.core.vdsbroker.vdsbroker"),
     IsoPrefix("org.ovirt.engine.core.vdsbroker.vdsbroker"),
     IsoDirectory("org.ovirt.engine.core.vdsbroker.irsbroker"),
     ResetIrs("org.ovirt.engine.core.vdsbroker.irsbroker"),
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 d9bbe93..02731db 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
@@ -192,6 +192,9 @@
 
     ImageSizeReturnForXmlRpc diskSizeExtend(String vmId, Map<String, String> 
diskParams, String newSize);
 
+    StatusOnlyReturnForXmlRpc merge(String vmId, Map<String, String> drive,
+            String baseVolUUID, String topVolUUID, String bandwidth, String 
jobUUID);
+
     // Gluster vdsm Commands
     OneUuidReturnForXmlRpc glusterVolumeCreate(String volumeName,
             String[] brickList,
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/MergeVDSCommand.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/MergeVDSCommand.java
new file mode 100644
index 0000000..175bad6
--- /dev/null
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/MergeVDSCommand.java
@@ -0,0 +1,35 @@
+package org.ovirt.engine.core.vdsbroker.vdsbroker;
+
+import org.ovirt.engine.core.common.asynctasks.AsyncTaskCreationInfo;
+import org.ovirt.engine.core.common.asynctasks.AsyncTaskType;
+import org.ovirt.engine.core.common.vdscommands.MergeVDSCommandParameters;
+import org.ovirt.engine.core.compat.Guid;
+
+/**
+ * Live Merge the specified snapshots.
+ */
+public class MergeVDSCommand<P extends MergeVDSCommandParameters> extends 
VdsBrokerCommand<P> {
+    public MergeVDSCommand(P parameters) {
+        super(parameters);
+    }
+
+    @Override
+    protected void executeVdsBrokerCommand() {
+        Guid taskId = Guid.newGuid();
+
+        status = getBroker().merge(
+                getParameters().getVmId().toString(),
+                getParameters().getDriveSpecs(),
+                getParameters().getBaseImageId().toString(),
+                getParameters().getTopImageId().toString(),
+                String.valueOf(getParameters().getBandwidth()),
+                taskId.toString());
+
+        proceedProxyReturnValue();
+
+        // TODO GP does this store the right thing?
+        getVDSReturnValue().setCreationInfo(
+                new AsyncTaskCreationInfo(
+                        taskId, AsyncTaskType.liveMerge, 
getParameters().getStoragePoolId()));
+    }
+}
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 5ae6d27..3e155c6 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
@@ -170,6 +170,9 @@
 
     public Map<String, Object> diskSizeExtend(String vmId, Map<String, String> 
diskParams, String newSize);
 
+    public Map<String, Object> merge(String vmId, Map<String, String> drive,
+            String baseVolUUID, String topVolUUID, String bandwidth, String 
jobUUID);
+
     // Gluster vdsm commands
     public Map<String, Object> glusterVolumeCreate(String volumeName,
             String[] brickList,
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 c3073cd..81fe3bf 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,6 +902,19 @@
     }
 
     @Override
+    public StatusOnlyReturnForXmlRpc merge(String vmId, Map<String, String> 
drive,
+            String baseVolUUID, String topVolUUID, String bandwidth, String 
jobUUID) {
+        try {
+            Map<String, Object> xmlRpcReturnValue = vdsServer.merge(vmId, 
drive,
+                    baseVolUUID, topVolUUID, bandwidth, jobUUID);
+            StatusOnlyReturnForXmlRpc wrapper = new 
StatusOnlyReturnForXmlRpc(xmlRpcReturnValue);
+            return wrapper;
+        } catch (UndeclaredThrowableException ute) {
+            throw new XmlRpcRunTimeException(ute);
+        }
+    }
+
+    @Override
     public OneUuidReturnForXmlRpc glusterVolumeCreate(String volumeName,
             String[] brickList,
             int replicaCount,


-- 
To view, visit http://gerrit.ovirt.org/26907
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I320d1ac7de50f4a24236c6d26af75a3483b8bc5e
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Greg Padgett <gpadg...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to