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