Greg Padgett has uploaded a new change for review. Change subject: [WIP] vdsbroker: introduce GetVolumeChainVDSCommand ......................................................................
[WIP] vdsbroker: introduce GetVolumeChainVDSCommand This calls a new VDSM verb, getVolumeChain, which will return the current volume chain for a VM using QEMU if the VM is running, or by scanning the volumes on disk if the VM is down. Change-Id: I467ec16df9d0509f133fc3b19365fb294f701cc5 Bug-Url: https://bugzilla.redhat.com/?????? Signed-off-by: Greg Padgett <gpadg...@redhat.com> --- A backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/GetVolumeChainVDSCommandParameters.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java A backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/GetVolumeChainVDSCommand.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/VdsServerConnector.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerWrapper.java 6 files changed, 119 insertions(+), 1 deletion(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/08/26908/1 diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/GetVolumeChainVDSCommandParameters.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/GetVolumeChainVDSCommandParameters.java new file mode 100644 index 0000000..ce3e29f --- /dev/null +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/GetVolumeChainVDSCommandParameters.java @@ -0,0 +1,53 @@ +package org.ovirt.engine.core.common.vdscommands; + +import org.ovirt.engine.core.compat.Guid; + +public class GetVolumeChainVDSCommandParameters extends VdsAndVmIDVDSParametersBase { + private Guid storagePoolId; + private Guid storageDomainId; + private Guid imageGroupId; + private Guid imageId; + + private GetVolumeChainVDSCommandParameters() {} + + public GetVolumeChainVDSCommandParameters( + Guid vdsId, + Guid vmId, + Guid storagePoolId, + Guid storageDomainId, + Guid imageGroupId, + Guid imageId) { + super(vdsId, vmId); + this.storagePoolId = storagePoolId; + this.storageDomainId = storageDomainId; + this.imageGroupId = imageGroupId; + this.imageId = imageId; + } + + public Guid getStoragePoolId() { + return storagePoolId; + } + + public Guid getStorageDomainId() { + return storageDomainId; + } + + public Guid getImageGroupId() { + return imageGroupId; + } + + public Guid getImageId() { + return imageId; + } + + @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('}').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 92368f8..9a81060 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 @@ -161,7 +161,8 @@ SetNumberOfCpus("org.ovirt.engine.core.vdsbroker"), List("org.ovirt.engine.core.vdsbroker.vdsbroker"), // get a list of VMs with status only GetVmStats("org.ovirt.engine.core.vdsbroker.vdsbroker"), // get a VM with full data and statistics - GetAllVmStats("org.ovirt.engine.core.vdsbroker.vdsbroker"); // get a list of VMs with full data and statistics + GetAllVmStats("org.ovirt.engine.core.vdsbroker.vdsbroker"), // get a list of VMs with full data and statistics + GetVolumeChain("org.ovirt.engine.core.vdsbroker.vdsbroker"); String packageName; diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/GetVolumeChainVDSCommand.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/GetVolumeChainVDSCommand.java new file mode 100644 index 0000000..22cd5ef --- /dev/null +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/GetVolumeChainVDSCommand.java @@ -0,0 +1,43 @@ +package org.ovirt.engine.core.vdsbroker.vdsbroker; + +import java.util.HashSet; +import java.util.Set; + +import org.ovirt.engine.core.common.vdscommands.GetVolumeChainVDSCommandParameters; +import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.vdsbroker.irsbroker.ImagesListReturnForXmlRpc; + +public class GetVolumeChainVDSCommand<P extends GetVolumeChainVDSCommandParameters> extends VdsBrokerCommand<P> { + private ImagesListReturnForXmlRpc mImagesListReturn; + + public GetVolumeChainVDSCommand(P parameters) { + super(parameters); + } + + @Override + protected void executeVdsBrokerCommand() { + mImagesListReturn = getBroker().getVolumeChain( + getParameters().getImageGroupId().toString(), + getParameters().getStoragePoolId().toString(), + getParameters().getStorageDomainId().toString(), + getParameters().getImageId().toString(), + getParameters().getVmId().toString()); + proceedProxyReturnValue(); + + Set<Guid> returnImages = new HashSet<>(); + for (String str : mImagesListReturn.getImageList()) { + returnImages.add(Guid.createGuidFromString(str)); + } + setReturnValue(returnImages); + } + + @Override + protected StatusForXmlRpc getReturnStatus() { + return mImagesListReturn.mStatus; + } + + @Override + protected Object getReturnValueFromBroker() { + return mImagesListReturn; + } +} 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 02731db..2f1f81f 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 @@ -17,6 +17,7 @@ import org.ovirt.engine.core.vdsbroker.gluster.GlusterVolumeTaskReturnForXmlRpc; import org.ovirt.engine.core.vdsbroker.gluster.GlusterVolumesListReturnForXmlRpc; import org.ovirt.engine.core.vdsbroker.irsbroker.FileStatsReturnForXmlRpc; +import org.ovirt.engine.core.vdsbroker.irsbroker.ImagesListReturnForXmlRpc; import org.ovirt.engine.core.vdsbroker.irsbroker.OneUuidReturnForXmlRpc; import org.ovirt.engine.core.vdsbroker.irsbroker.StoragePoolInfoReturnForXmlRpc; @@ -195,6 +196,9 @@ StatusOnlyReturnForXmlRpc merge(String vmId, Map<String, String> drive, String baseVolUUID, String topVolUUID, String bandwidth, String jobUUID); + ImagesListReturnForXmlRpc getVolumeChain(String imageId, String storagePoolId, String storageDomainId, + String leafVolumeId, String vmId); + // 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/VdsServerConnector.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerConnector.java index 3e155c6..bdcfcee 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 @@ -173,6 +173,9 @@ public Map<String, Object> merge(String vmId, Map<String, String> drive, String baseVolUUID, String topVolUUID, String bandwidth, String jobUUID); + public Map<String, Object> getVolumeChain(String imageId, String storagePoolId, + String storageDomainId, String leafVolumeId, String vmId); + // 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 81fe3bf..d1c1fd5 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 @@ -19,6 +19,7 @@ import org.ovirt.engine.core.vdsbroker.gluster.GlusterVolumeTaskReturnForXmlRpc; import org.ovirt.engine.core.vdsbroker.gluster.GlusterVolumesListReturnForXmlRpc; import org.ovirt.engine.core.vdsbroker.irsbroker.FileStatsReturnForXmlRpc; +import org.ovirt.engine.core.vdsbroker.irsbroker.ImagesListReturnForXmlRpc; import org.ovirt.engine.core.vdsbroker.irsbroker.OneUuidReturnForXmlRpc; import org.ovirt.engine.core.vdsbroker.irsbroker.StoragePoolInfoReturnForXmlRpc; import org.ovirt.engine.core.vdsbroker.xmlrpc.XmlRpcRunTimeException; @@ -915,6 +916,19 @@ } @Override + public ImagesListReturnForXmlRpc getVolumeChain(String imageId, String storagePoolId, + String storageDomainId, String leafVolumeId, String vmId) { + try { + Map<String, Object> xmlRpcReturnValue = vdsServer.getVolumeChain(imageId, storagePoolId, + storageDomainId, leafVolumeId, vmId); + ImagesListReturnForXmlRpc wrapper = new ImagesListReturnForXmlRpc(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/26908 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I467ec16df9d0509f133fc3b19365fb294f701cc5 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