Allon Mureinik has posted comments on this change.

Change subject: core: Add scan domain query
......................................................................


Patch Set 1: I would prefer that you didn't submit this

(11 inline comments)

....................................................
File 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ScanDomainQuery.java
Line 35: 
Line 36:     @Override
Line 37:     protected void executeQueryCommand() {
Line 38:         // first, run getImagesList query into vdsm to get all of the 
images on the storage domain - then store in imagesList
Line 39:         VDSBrokerFrontendImpl vdsBroker = new VDSBrokerFrontendImpl();
You should use getBackend().getResourceManager() - see GetLunsByVgIdQuery for a 
usage example.
Line 40:         VDSReturnValue imagesListResult = 
vdsBroker.RunVdsCommand(VDSCommandType.GetImagesList, new 
GetImagesListVDSCommandParameters(getParameters().getDomainId(), 
DbFacade.getInstance()
Line 41:                         .getStoragePoolDAO()
Line 42:                         .getAllForStorageDomain(
Line 43:                                 
getParameters().getDomainId()).get(0).getId()));


Line 40:         VDSReturnValue imagesListResult = 
vdsBroker.RunVdsCommand(VDSCommandType.GetImagesList, new 
GetImagesListVDSCommandParameters(getParameters().getDomainId(), 
DbFacade.getInstance()
Line 41:                         .getStoragePoolDAO()
Line 42:                         .getAllForStorageDomain(
Line 43:                                 
getParameters().getDomainId()).get(0).getId()));
Line 44:         ArrayList<Guid> imagesList = (ArrayList<Guid>) 
imagesListResult.getReturnValue();
You can downcast to a List, you don't need an ArrayList.
Line 45:         // diskImageList is a map of the IDs returned by the vdsm 
query to actual Disk objects
Line 46:         HashMap<Guid, Disk> diskImageList = new HashMap<Guid, Disk>();
Line 47:         for (Guid id : imagesList) {
Line 48:             diskImageList.put(id, getDbFacade().getDiskDao().get(id));


Line 42:                         .getAllForStorageDomain(
Line 43:                                 
getParameters().getDomainId()).get(0).getId()));
Line 44:         ArrayList<Guid> imagesList = (ArrayList<Guid>) 
imagesListResult.getReturnValue();
Line 45:         // diskImageList is a map of the IDs returned by the vdsm 
query to actual Disk objects
Line 46:         HashMap<Guid, Disk> diskImageList = new HashMap<Guid, Disk>();
define the variable as a Map, not a HashMap.
Also, if it's a map, the name diskImageList is kinda confusing :-)
Line 47:         for (Guid id : imagesList) {
Line 48:             diskImageList.put(id, getDbFacade().getDiskDao().get(id));
Line 49:         }
Line 50:         // retArr is the ArrayList which will be returned by this query


Line 45:         // diskImageList is a map of the IDs returned by the vdsm 
query to actual Disk objects
Line 46:         HashMap<Guid, Disk> diskImageList = new HashMap<Guid, Disk>();
Line 47:         for (Guid id : imagesList) {
Line 48:             diskImageList.put(id, getDbFacade().getDiskDao().get(id));
Line 49:         }
I think that instead of getting the disks one by one, you can use 
DiskImageDAO.getAllSnapshotsForStorageDomain.
Line 50:         // retArr is the ArrayList which will be returned by this query
Line 51:         ArrayList<Guid> retArr = new ArrayList<Guid>();
Line 52:         List<Disk> allDisks = 
DbFacade.getInstance().getDiskDao().getAll();
Line 53:         ArrayList<Disk> disksOnSD = new ArrayList<Disk>(); // disks on 
the storage domain passed as a parameter


Line 47:         for (Guid id : imagesList) {
Line 48:             diskImageList.put(id, getDbFacade().getDiskDao().get(id));
Line 49:         }
Line 50:         // retArr is the ArrayList which will be returned by this query
Line 51:         ArrayList<Guid> retArr = new ArrayList<Guid>();
You can define the variable as a List not an ArrayList
Line 52:         List<Disk> allDisks = 
DbFacade.getInstance().getDiskDao().getAll();
Line 53:         ArrayList<Disk> disksOnSD = new ArrayList<Disk>(); // disks on 
the storage domain passed as a parameter
Line 54:         // filter disks in allDisks into disksOnSD if they are on this 
domain
Line 55:         for (Disk d : allDisks) {


Line 60:             }
Line 61:         }
Line 62:         // then, compare the list of all images on the domain with the 
list oVirt recognizes
Line 63:         for (Map.Entry<Guid, Disk> listItem : 
diskImageList.entrySet()) {
Line 64:             if (!(disksOnSD.contains(listItem.getValue()))) {
If you're doing a bunch of contains operation, you'll be better off using Sets 
instead of List.
Line 65:                 retArr.add(listItem.getKey());
Line 66:             }
Line 67:         }
Line 68:         // log the difference [for testing purposes]


Line 72:         }
Line 73:         else {
Line 74:             for (Guid li : retArr) {
Line 75:                 logger.info("Returning list element..."); //$NON-NLS-1$
Line 76:                 logger.info("UUID: " + li.toString()); //$NON-NLS-1$
I fear this will bloat up the log a bit. Consider the following:

logger.info ("Returning list: " + StringUtils.join (retArr, ",");
Line 77:             }
Line 78:         }
Line 79:         logger.info("Done returning ScanDomainQuery list...");
Line 80:         getQueryReturnValue().setReturnValue(retArr); // return 
difference


....................................................
File 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java
Line 85:     GetAllFloppyImagesListByStoragePoolId(VdcQueryAuthType.User),
Line 86:     GetAllDisksByVmId(VdcQueryAuthType.User),
Line 87:     GetAllAttachableDisks(VdcQueryAuthType.User),
Line 88:     GetAllDisks,
Line 89:     ScanDomain,
Is this query strictly an admin query?
Line 90:     GetImageByImageId,
Line 91:     GetDiskByDiskId,
Line 92:     GetImagesByStorageDomainAndTemplate,
Line 93: 


....................................................
File 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/GetImagesListVDSCommand.java
Line 17:     @Override
Line 18:     protected void ExecuteIrsBrokerCommand() {
Line 19:         _result = 
getIrsProxy().getImagesList(getParameters().getStorageDomainId().toString());
Line 20:         ProceedProxyReturnValue();
Line 21:         java.util.ArrayList<Guid> tempRetValue = new 
java.util.ArrayList<Guid>(_result.mImageList.length);
don't use FCQNs.

Also, define the variable as a List, not an ArrayList.
Line 22:         for (int i = 0; i < _result.mImageList.length; i++) {
Line 23:             tempRetValue.add(new Guid(_result.mImageList[i]));
Line 24:         }
Line 25:         setReturnValue(tempRetValue);


Line 20:         ProceedProxyReturnValue();
Line 21:         java.util.ArrayList<Guid> tempRetValue = new 
java.util.ArrayList<Guid>(_result.mImageList.length);
Line 22:         for (int i = 0; i < _result.mImageList.length; i++) {
Line 23:             tempRetValue.add(new Guid(_result.mImageList[i]));
Line 24:         }
instead of all of this, you could just have 
setReturnValue(Arrays.asList(_result));
Line 25:         setReturnValue(tempRetValue);
Line 26:     }
Line 27: 
Line 28:     @Override


....................................................
File 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IIrsServer.java
Line 85:     GetVmsListReturnForXmlRpc getVmsList(String storagePoolId, String 
storageDomainId);
Line 86: 
Line 87:     StatusOnlyReturnForXmlRpc upgradeStoragePool(String storagePoolId, 
String targetVersion);
Line 88: 
Line 89:     ImagesListReturnForXmlRpc getImagesList(String sdUUID);
I'm assuming this is backed up by a VDSM patch?
Is it merged already? If not, please add a link so we know not to merge the 
engine patch until we have a VDSM version that supports it.


--
To view, visit http://gerrit.ovirt.org/8070
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: I5ada1a6a030c090e872b2eb3f67ee9325f379963
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Ricky Hopper <ricky.hop...@gmail.com>
Gerrit-Reviewer: Allon Mureinik <amure...@redhat.com>
Gerrit-Reviewer: Eduardo <ewars...@redhat.com>
Gerrit-Reviewer: Federico Simoncelli <fsimo...@redhat.com>
Gerrit-Reviewer: Liron Aravot <lara...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to