Ricky Hopper has uploaded a new change for review. Change subject: core: Add scan domain query (revised) ......................................................................
core: Add scan domain query (revised) 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 within oVirt under this patch. (Revisions made code more efficient) Change-Id: Icce8e2cd12b9609ce82dbb7d255c08bdbc6dcc41 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, 203 insertions(+), 0 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/19/8219/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 100644 index 0000000..2f6980f --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ScanDomainQuery.java @@ -0,0 +1,61 @@ +package org.ovirt.engine.core.bll; + +import java.util.List; + +import org.apache.commons.lang.StringUtils; +import org.ovirt.engine.core.common.businessentities.DiskImage; +import org.ovirt.engine.core.common.interfaces.VDSBrokerFrontend; +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 + VDSBrokerFrontend vdsBroker = getBackend().getResourceManager(); + VDSReturnValue imagesListResult = vdsBroker.RunVdsCommand(VDSCommandType.GetImagesList, new GetImagesListVDSCommandParameters(getParameters().getDomainId(), DbFacade.getInstance() + .getStoragePoolDAO() + .getAllForStorageDomain( + getParameters().getDomainId()).get(0).getId())); + List<Guid> imagesList = (List<Guid>) imagesListResult.getReturnValue(); + //fromDao is a list of all disk images on the domain from the DAO + List<DiskImage> fromDao = getDbFacade().getDiskImageDao().getAllSnapshotsForStorageDomain(getParameters().getDomainId()); + // then, compare the list of all images on the domain with the list oVirt recognizes + // if the ID in imagesList is recognized by oVirt, remove from list + for (DiskImage image : fromDao) { + if (imagesList.contains(image.getId())) { + imagesList.remove(image.getId()); + } + } + // log the difference [for testing purposes] + if (imagesList.isEmpty()) { + logger.info("List is empty."); //$NON-NLS-1$ + } + else { + logger.info("UUIDs found: " + StringUtils.join(imagesList, ",")); //$NON-NLS-1$ + } + getQueryReturnValue().setReturnValue(imagesList); // 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 100644 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 af0c64f..556440f 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 100644 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 8f3ec23..0c19840 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 @@ -97,6 +97,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 100644 index 0000000..cc12e19 --- /dev/null +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/GetImagesListVDSCommand.java @@ -0,0 +1,53 @@ +package org.ovirt.engine.core.vdsbroker.irsbroker; + +import java.util.ArrayList; + +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(); + ArrayList<Guid> tempRetValue = new 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 100644 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/8219 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Icce8e2cd12b9609ce82dbb7d255c08bdbc6dcc41 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