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

Reply via email to