Daniel Erez has uploaded a new change for review. Change subject: core: consolidate register disk commands and queries ......................................................................
core: consolidate register disk commands and queries In order to support register Cinder disks in the rest-api, added the relevant logic to GetUnregisteredDisk(s)Query and RegisterDiskCommand. Change-Id: Icc3558c635adb174af4fe89c63185268344d06aa Bug-Url: https://bugzilla.redhat.com/1185826 Signed-off-by: Daniel Erez <de...@redhat.com> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetUnregisteredDiskQuery.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetUnregisteredDisksQuery.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RegisterDiskCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/GetUnregisteredCinderDisksByStorageDomainIdQuery.java 4 files changed, 55 insertions(+), 14 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/30/40730/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetUnregisteredDiskQuery.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetUnregisteredDiskQuery.java index d3c037c..e91bd26 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetUnregisteredDiskQuery.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetUnregisteredDiskQuery.java @@ -6,10 +6,14 @@ import org.apache.commons.lang.StringUtils; import org.ovirt.engine.core.bll.context.EngineContext; +import org.ovirt.engine.core.common.action.GetCinderEntityByStorageDomainIdParameters; +import org.ovirt.engine.core.common.businessentities.StorageDomain; import org.ovirt.engine.core.common.businessentities.storage.DiskImage; import org.ovirt.engine.core.common.businessentities.storage.DiskInterface; import org.ovirt.engine.core.common.errors.VdcBllMessages; import org.ovirt.engine.core.common.queries.GetUnregisteredDiskQueryParameters; +import org.ovirt.engine.core.common.queries.VdcQueryReturnValue; +import org.ovirt.engine.core.common.queries.VdcQueryType; import org.ovirt.engine.core.common.vdscommands.GetImageInfoVDSCommandParameters; import org.ovirt.engine.core.common.vdscommands.StoragePoolDomainAndGroupIdBaseVDSCommandParameters; import org.ovirt.engine.core.common.vdscommands.VDSCommandType; @@ -32,12 +36,20 @@ Guid storagePoolId = getParameters().getStoragePoolId(); Guid storageDomainId = getParameters().getStorageDomainId(); Guid diskId = getParameters().getDiskId(); - if (getDbFacade().getStorageDomainDao().get(storageDomainId) == null) { + StorageDomain storageDomain = getDbFacade().getStorageDomainDao().get(storageDomainId); + if (storageDomain == null) { getQueryReturnValue().setExceptionString(VdcBllMessages.STORAGE_DOMAIN_DOES_NOT_EXIST.toString()); getQueryReturnValue().setSucceeded(false); return; } + if (storageDomain.getStorageType().isCinderDomain()) { + VdcQueryReturnValue returnValue = runInternalQuery(VdcQueryType.GetUnregisteredCinderDiskByIdAndStorageDomainId, + new GetCinderEntityByStorageDomainIdParameters(diskId, getParameters().getStorageDomainId())); + setReturnValue(returnValue.getReturnValue()); + return; + } + // Now get the list of volumes for each new image. StoragePoolDomainAndGroupIdBaseVDSCommandParameters getVolumesParameters = new StoragePoolDomainAndGroupIdBaseVDSCommandParameters( storagePoolId, storageDomainId, diskId); diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetUnregisteredDisksQuery.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetUnregisteredDisksQuery.java index 5c25c90..1a4c8c8 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetUnregisteredDisksQuery.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetUnregisteredDisksQuery.java @@ -3,12 +3,14 @@ import java.util.ArrayList; import java.util.List; +import org.ovirt.engine.core.common.businessentities.StorageDomain; import org.ovirt.engine.core.common.businessentities.storage.Disk; import org.ovirt.engine.core.common.businessentities.storage.DiskImage; import org.ovirt.engine.core.common.errors.VdcBllMessages; import org.ovirt.engine.core.common.interfaces.VDSBrokerFrontend; import org.ovirt.engine.core.common.queries.GetUnregisteredDiskQueryParameters; import org.ovirt.engine.core.common.queries.GetUnregisteredDisksQueryParameters; +import org.ovirt.engine.core.common.queries.IdQueryParameters; import org.ovirt.engine.core.common.queries.VdcQueryReturnValue; import org.ovirt.engine.core.common.queries.VdcQueryType; import org.ovirt.engine.core.common.vdscommands.GetImagesListVDSCommandParameters; @@ -25,12 +27,20 @@ @Override protected void executeQueryCommand() { VDSBrokerFrontend vdsBroker = getVdsBroker(); - if (getDbFacade().getStorageDomainDao().get(getStorageDomainId()) == null) { + StorageDomain storageDomain = getDbFacade().getStorageDomainDao().get(getStorageDomainId()); + if (storageDomain == null) { getQueryReturnValue().setExceptionString(VdcBllMessages.STORAGE_DOMAIN_DOES_NOT_EXIST.toString()); getQueryReturnValue().setSucceeded(false); return; } + if (storageDomain.getStorageType().isCinderDomain()) { + VdcQueryReturnValue returnValue = runInternalQuery(VdcQueryType.GetUnregisteredCinderDisksByStorageDomainId, + new IdQueryParameters(getStorageDomainId())); + setReturnValue(returnValue.getReturnValue()); + return; + } + // first, run getImagesList query into vdsm to get all of the images on the storage domain - then store in // imagesList VDSReturnValue imagesListResult = vdsBroker.RunVdsCommand(VDSCommandType.GetImagesList, diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RegisterDiskCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RegisterDiskCommand.java index 6c16ac6..49c5d14 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RegisterDiskCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RegisterDiskCommand.java @@ -12,8 +12,13 @@ import org.ovirt.engine.core.bll.quota.QuotaStorageDependent; import org.ovirt.engine.core.bll.validator.storage.StorageDomainValidator; import org.ovirt.engine.core.common.VdcObjectType; +import org.ovirt.engine.core.common.action.RegisterCinderDiskParameters; import org.ovirt.engine.core.common.action.RegisterDiskParameters; +import org.ovirt.engine.core.common.action.VdcActionType; +import org.ovirt.engine.core.common.action.VdcReturnValueBase; import org.ovirt.engine.core.common.asynctasks.EntityInfo; +import org.ovirt.engine.core.common.businessentities.StorageDomainType; +import org.ovirt.engine.core.common.businessentities.storage.CinderDisk; import org.ovirt.engine.core.common.businessentities.storage.DiskStorageType; import org.ovirt.engine.core.common.businessentities.storage.DiskImage; import org.ovirt.engine.core.common.errors.VdcBllMessages; @@ -40,7 +45,8 @@ @Override protected boolean canDoAction() { // Currently this only supports importing images and does not work with luns. - if (getParameters().getDiskImage().getDiskStorageType() != DiskStorageType.IMAGE) { + if (getParameters().getDiskImage().getDiskStorageType() != DiskStorageType.IMAGE && + getParameters().getDiskImage().getDiskStorageType() != DiskStorageType.CINDER) { addCanDoActionMessageVariable("diskId", getParameters().getDiskImage().getId()); addCanDoActionMessageVariable("storageType", getParameters().getDiskImage().getDiskStorageType()); addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_UNSUPPORTED_DISK_STORAGE_TYPE); @@ -54,14 +60,16 @@ return false; } - if (!getStorageDomain().getStorageDomainType().isDataDomain()) { + if (!getStorageDomain().getStorageDomainType().isDataDomain() && + !(getStorageDomain().getStorageDomainType() == StorageDomainType.Volume)) { addCanDoActionMessageVariable("domainId", getParameters().getStorageDomainId()); addCanDoActionMessageVariable("domainType", getStorageDomain().getStorageDomainType()); addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_STORAGE_DOMAIN_TYPE_UNSUPPORTED); return false; } - if (!setAndValidateDiskProfiles()) { + if (getParameters().getDiskImage().getDiskStorageType() == DiskStorageType.IMAGE && + !setAndValidateDiskProfiles()) { return false; } @@ -70,15 +78,21 @@ @Override protected void executeCommand() { - final DiskImage newDiskImage = getParameters().getDiskImage(); - newDiskImage.setDiskAlias(ImagesHandler.getDiskAliasWithDefault(newDiskImage, - generateDefaultAliasForRegiteredDisk(Calendar.getInstance()))); - ArrayList<Guid> storageIds = new ArrayList<>(); - storageIds.add(getParameters().getStorageDomainId()); - newDiskImage.setStorageIds(storageIds); - addDiskImageToDb(newDiskImage, getCompensationContext()); - getReturnValue().setActionReturnValue(newDiskImage.getId()); - getReturnValue().setSucceeded(true); + if (getParameters().getDiskImage().getDiskStorageType() == DiskStorageType.IMAGE) { + final DiskImage newDiskImage = getParameters().getDiskImage(); + newDiskImage.setDiskAlias(ImagesHandler.getDiskAliasWithDefault(newDiskImage, + generateDefaultAliasForRegiteredDisk(Calendar.getInstance()))); + ArrayList<Guid> storageIds = new ArrayList<>(); + storageIds.add(getParameters().getStorageDomainId()); + newDiskImage.setStorageIds(storageIds); + addDiskImageToDb(newDiskImage, getCompensationContext()); + getReturnValue().setActionReturnValue(newDiskImage.getId()); + getReturnValue().setSucceeded(true); + } else if (getParameters().getDiskImage().getDiskStorageType() == DiskStorageType.CINDER) { + VdcReturnValueBase returnValue = runInternalAction(VdcActionType.RegisterCinderDisk, new RegisterCinderDiskParameters( + (CinderDisk) getParameters().getDiskImage(), getParameters().getStorageDomainId())); + setReturnValue(returnValue); + } } protected static String generateDefaultAliasForRegiteredDisk(Calendar time) { diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/GetUnregisteredCinderDisksByStorageDomainIdQuery.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/GetUnregisteredCinderDisksByStorageDomainIdQuery.java index 6f00d4e..6517077 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/GetUnregisteredCinderDisksByStorageDomainIdQuery.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/GetUnregisteredCinderDisksByStorageDomainIdQuery.java @@ -2,6 +2,7 @@ import java.util.List; +import org.ovirt.engine.core.bll.context.EngineContext; import org.ovirt.engine.core.common.businessentities.storage.CinderDisk; import org.ovirt.engine.core.common.businessentities.storage.Disk; import org.ovirt.engine.core.common.businessentities.storage.DiskStorageType; @@ -18,6 +19,10 @@ super(parameters); } + public GetUnregisteredCinderDisksByStorageDomainIdQuery(P parameters, EngineContext context) { + super(parameters, context); + } + @Override protected void executeQueryCommand() { final List<Volume> allVolumes = getVolumeProviderProxy().getVolumes(); -- To view, visit https://gerrit.ovirt.org/40730 To unsubscribe, visit https://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Icc3558c635adb174af4fe89c63185268344d06aa Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Daniel Erez <de...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches