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

Reply via email to