Ricky Hopper has uploaded a new change for review. Change subject: core: Add scan domain query ......................................................................
core: Add scan domain query Adds a query to scan a storage domain for disk images not currently recognized by oVirt. This is done partially through the vdsm command GetImagesList, which is also implemented under this patch. Change-Id: I5ada1a6a030c090e872b2eb3f67ee9325f379963 Signed-off-by: Ricky Hopper <ricky.hop...@gmail.com> --- A backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ScanDomainQuery.java A backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/ScanDomainParameters.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java A backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/GetImagesListVDSCommandParameters.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/irsbroker/GetImagesListVDSCommand.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IIrsServer.java A backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/ImagesListReturnForXmlRpc.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsServerConnector.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsServerWrapper.java 10 files changed, 223 insertions(+), 0 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/70/8070/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ScanDomainQuery.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ScanDomainQuery.java new file mode 100755 index 0000000..204118a --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ScanDomainQuery.java @@ -0,0 +1,83 @@ +package org.ovirt.engine.core.bll; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.ovirt.engine.core.common.businessentities.Disk; +import org.ovirt.engine.core.common.businessentities.Disk.DiskStorageType; +import org.ovirt.engine.core.common.businessentities.DiskImage; +import org.ovirt.engine.core.common.queries.ScanDomainParameters; +import org.ovirt.engine.core.common.vdscommands.GetImagesListVDSCommandParameters; +import org.ovirt.engine.core.common.vdscommands.VDSCommandType; +import org.ovirt.engine.core.common.vdscommands.VDSReturnValue; +import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.dal.dbbroker.DbFacade; +import org.ovirt.engine.core.utils.log.Log; +import org.ovirt.engine.core.utils.log.LogFactory; + +/** + * A query which scans the storage domain for disk images not currently recognized by oVirt, + * and then returns them in a List (ArrayList<Guid>) + * + * @author Ricky Hopper + * + * @param <P> + */ +public class ScanDomainQuery<P extends ScanDomainParameters> extends QueriesCommandBase<P> { + + private static final Log logger = LogFactory.getLog(ScanDomainQuery.class); + + public ScanDomainQuery(P parameters) { + super(parameters); + } + + @Override + protected void executeQueryCommand() { + // first, run getImagesList query into vdsm to get all of the images on the storage domain - then store in imagesList + VDSBrokerFrontendImpl vdsBroker = new VDSBrokerFrontendImpl(); + VDSReturnValue imagesListResult = vdsBroker.RunVdsCommand(VDSCommandType.GetImagesList, new GetImagesListVDSCommandParameters(getParameters().getDomainId(), DbFacade.getInstance() + .getStoragePoolDAO() + .getAllForStorageDomain( + getParameters().getDomainId()).get(0).getId())); + ArrayList<Guid> imagesList = (ArrayList<Guid>) imagesListResult.getReturnValue(); + // diskImageList is a map of the IDs returned by the vdsm query to actual Disk objects + HashMap<Guid, Disk> diskImageList = new HashMap<Guid, Disk>(); + for (Guid id : imagesList) { + diskImageList.put(id, getDbFacade().getDiskDao().get(id)); + } + // retArr is the ArrayList which will be returned by this query + ArrayList<Guid> retArr = new ArrayList<Guid>(); + List<Disk> allDisks = DbFacade.getInstance().getDiskDao().getAll(); + ArrayList<Disk> disksOnSD = new ArrayList<Disk>(); // disks on the storage domain passed as a parameter + // filter disks in allDisks into disksOnSD if they are on this domain + for (Disk d : allDisks) { + if (d.getDiskStorageType().equals(DiskStorageType.IMAGE)) { + if (((DiskImage) d).getstorage_ids().contains(getParameters().getDomainId())) { + disksOnSD.add(d); + } + } + } + // then, compare the list of all images on the domain with the list oVirt recognizes + for (Map.Entry<Guid, Disk> listItem : diskImageList.entrySet()) { + if (!(disksOnSD.contains(listItem.getValue()))) { + retArr.add(listItem.getKey()); + } + } + // log the difference [for testing purposes] + logger.info("Returning list from ScanDomainQuery"); //$NON-NLS-1$ + if (retArr.isEmpty()) { + logger.info("List is empty."); //$NON-NLS-1$ + } + else { + for (Guid li : retArr) { + logger.info("Returning list element..."); //$NON-NLS-1$ + logger.info("UUID: " + li.toString()); //$NON-NLS-1$ + } + } + logger.info("Done returning ScanDomainQuery list..."); + getQueryReturnValue().setReturnValue(retArr); // return difference + } + +} diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/ScanDomainParameters.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/ScanDomainParameters.java new file mode 100755 index 0000000..72a126d --- /dev/null +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/ScanDomainParameters.java @@ -0,0 +1,23 @@ +package org.ovirt.engine.core.common.queries; + +import org.ovirt.engine.core.compat.Guid; + +public class ScanDomainParameters extends VdcQueryParametersBase { + + private static final long serialVersionUID = -7975065688901687512L; + + public ScanDomainParameters(Guid sdUUID) { + super(); + this.sdUUID = sdUUID; + } + + private Guid sdUUID = Guid.Empty; + + public Guid getDomainId() { + return sdUUID; + } + + public ScanDomainParameters() { + } + +} diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java index 767e7bf..f4536da 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java @@ -86,6 +86,7 @@ GetAllDisksByVmId(VdcQueryAuthType.User), GetAllAttachableDisks(VdcQueryAuthType.User), GetAllDisks, + ScanDomain, GetImageByImageId, GetDiskByDiskId, GetImagesByStorageDomainAndTemplate, diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/GetImagesListVDSCommandParameters.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/GetImagesListVDSCommandParameters.java new file mode 100755 index 0000000..5558fba --- /dev/null +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/GetImagesListVDSCommandParameters.java @@ -0,0 +1,33 @@ +package org.ovirt.engine.core.common.vdscommands; + +import org.ovirt.engine.core.compat.Guid; + +public class GetImagesListVDSCommandParameters extends IrsBaseVDSCommandParameters { + public GetImagesListVDSCommandParameters(Guid sdUUID) { + super(); + setStorageDomainId(sdUUID); + } + + public GetImagesListVDSCommandParameters(Guid sdUUID, Guid spUUID) { + super(spUUID); + setStorageDomainId(sdUUID); + } + + private Guid storageDomainId = new Guid(); + + public Guid getStorageDomainId() { + return storageDomainId; + } + + private void setStorageDomainId(Guid value) { + storageDomainId = value; + } + + public GetImagesListVDSCommandParameters() { + } + + @Override + public String toString() { + return String.format("%s, sdUUID = %s", super.toString(), getStorageDomainId()); + } +} 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 7d0d18a6..4c5fc23 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 @@ -96,6 +96,7 @@ DeleteImageGroup("org.ovirt.engine.core.vdsbroker.irsbroker"), MoveImageGroup("org.ovirt.engine.core.vdsbroker.irsbroker"), GetImageDomainsList("org.ovirt.engine.core.vdsbroker.irsbroker"), + GetImagesList("org.ovirt.engine.core.vdsbroker.irsbroker"), CreateVG("org.ovirt.engine.core.vdsbroker.vdsbroker"), RemoveVG("org.ovirt.engine.core.vdsbroker.vdsbroker"), GetVGList("org.ovirt.engine.core.vdsbroker.vdsbroker"), diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/GetImagesListVDSCommand.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/GetImagesListVDSCommand.java new file mode 100755 index 0000000..b07b5f3 --- /dev/null +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/GetImagesListVDSCommand.java @@ -0,0 +1,51 @@ +package org.ovirt.engine.core.vdsbroker.irsbroker; + +import org.ovirt.engine.core.common.errors.VDSError; +import org.ovirt.engine.core.common.errors.VdcBllErrors; +import org.ovirt.engine.core.common.vdscommands.GetImagesListVDSCommandParameters; +import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.vdsbroker.vdsbroker.StatusForXmlRpc; + +public class GetImagesListVDSCommand<P extends GetImagesListVDSCommandParameters> + extends IrsBrokerCommand<P> { + private ImagesListReturnForXmlRpc _result; + + public GetImagesListVDSCommand(P parameters) { + super(parameters); + } + + @Override + protected void ExecuteIrsBrokerCommand() { + _result = getIrsProxy().getImagesList(getParameters().getStorageDomainId().toString()); + ProceedProxyReturnValue(); + java.util.ArrayList<Guid> tempRetValue = new java.util.ArrayList<Guid>(_result.mImageList.length); + for (int i = 0; i < _result.mImageList.length; i++) { + tempRetValue.add(new Guid(_result.mImageList[i])); + } + setReturnValue(tempRetValue); + } + + @Override + protected StatusForXmlRpc getReturnStatus() { + return _result.mStatus; + } + + @Override + protected Object getReturnValueFromBroker() { + return _result; + } + + @Override + protected void ProceedProxyReturnValue() { + VdcBllErrors returnStatus = GetReturnValueFromStatus(getReturnStatus()); + switch (returnStatus) { + case GetStorageDomainListError: + getVDSReturnValue().setVdsError(new VDSError(returnStatus, getReturnStatus().mMessage)); + getVDSReturnValue().setSucceeded(false); + break; + default: + super.ProceedProxyReturnValue(); + break; + } + } +} diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IIrsServer.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IIrsServer.java index e2d2e35..55358f4 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IIrsServer.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IIrsServer.java @@ -85,4 +85,6 @@ GetVmsListReturnForXmlRpc getVmsList(String storagePoolId, String storageDomainId); StatusOnlyReturnForXmlRpc upgradeStoragePool(String storagePoolId, String targetVersion); + + ImagesListReturnForXmlRpc getImagesList(String sdUUID); } diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/ImagesListReturnForXmlRpc.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/ImagesListReturnForXmlRpc.java new file mode 100755 index 0000000..54540d4 --- /dev/null +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/ImagesListReturnForXmlRpc.java @@ -0,0 +1,20 @@ +package org.ovirt.engine.core.vdsbroker.irsbroker; + +import java.util.Map; + +public final class ImagesListReturnForXmlRpc extends StatusReturnForXmlRpc { + private static final String IMAGES_LIST = "imageslist"; + // [XmlRpcMissingMapping(MappingAction.Ignore), XmlRpcMember("isolist")] + public String[] mImageList; + + public ImagesListReturnForXmlRpc(Map<String, Object> innerMap) { + super(innerMap); + Object[] tempObj = (Object[]) innerMap.get(IMAGES_LIST); + if (tempObj != null) { + mImageList = new String[tempObj.length]; + for (int i = 0; i < tempObj.length; i++) { + mImageList[i] = (String) tempObj[i]; + } + } + } +} diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsServerConnector.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsServerConnector.java index c87d1cd..518fa8b 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsServerConnector.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsServerConnector.java @@ -98,4 +98,6 @@ public Map<String, Object> upgradeStoragePool(String storagePoolId, String targetVersion); + public Map<String, Object> getImagesList(String sdUUID); + } diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsServerWrapper.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsServerWrapper.java index 2f4bb77..b515ec7 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsServerWrapper.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsServerWrapper.java @@ -247,4 +247,11 @@ Map<String, Object> xmlRpcReturnValue = irsServer.upgradeStoragePool(storagePoolId, targetVersion); return new StatusOnlyReturnForXmlRpc(xmlRpcReturnValue); } + + @Override + public ImagesListReturnForXmlRpc getImagesList(String sdUUID) { + Map<String, Object> xmlRpcReturnValue = irsServer.getImagesList(sdUUID); + ImagesListReturnForXmlRpc wrapper = new ImagesListReturnForXmlRpc(xmlRpcReturnValue); + return wrapper; + } } -- To view, visit http://gerrit.ovirt.org/8070 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I5ada1a6a030c090e872b2eb3f67ee9325f379963 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Ricky Hopper <ricky.hop...@gmail.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches