Daniel Erez has uploaded a new change for review. Change subject: core: introduce GetUnregisteredCinderDisksByStorageDomainIdQuery ......................................................................
core: introduce GetUnregisteredCinderDisksByStorageDomainIdQuery Adde GetUnregisteredCinderDisksByStorageDomainIdQuery for fetching a list of Cinder disks (from a specified storage domain) that don't exist in engine DB (unregistered). Change-Id: I38c61f1763c4841101c199721414371acf101d59 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/storage/CinderBroker.java A backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/GetUnregisteredCinderDisksByStorageDomainIdQuery.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java 3 files changed, 82 insertions(+), 0 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/50/39650/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/CinderBroker.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/CinderBroker.java index 59ba278..0980397 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/CinderBroker.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/CinderBroker.java @@ -8,15 +8,23 @@ import org.ovirt.engine.core.bll.provider.storage.OpenStackVolumeProviderProxy; import org.ovirt.engine.core.common.businessentities.storage.CinderDisk; import org.ovirt.engine.core.common.businessentities.storage.CinderVolumeStatus; +import org.ovirt.engine.core.common.businessentities.storage.DiskInterface; import org.ovirt.engine.core.common.businessentities.storage.ImageStatus; +import org.ovirt.engine.core.common.businessentities.storage.VolumeFormat; import org.ovirt.engine.core.common.errors.VdcBllErrors; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogableBase; +import java.text.ParseException; +import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; import java.util.concurrent.Callable; public class CinderBroker extends AuditLogableBase { + + public static final String DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.SSS"; private OpenStackVolumeProviderProxy proxy; private ArrayList<String> executeFailedMessages; @@ -143,6 +151,35 @@ } } + public static List<CinderDisk> volumesToCinderDisks(List<Volume> volumes, Guid storageDomainId) { + List<CinderDisk> cinderDisks = new ArrayList<>(); + for (Volume volume : volumes) { + cinderDisks.add(volumeToCinderDisk(volume, storageDomainId)); + } + return cinderDisks; + } + + public static CinderDisk volumeToCinderDisk(Volume volume, Guid storageDomainId) { + CinderDisk cinderDisk = new CinderDisk(); + cinderDisk.setId(Guid.createGuidFromString(volume.getId())); + cinderDisk.setImageId(Guid.createGuidFromString(volume.getId())); + cinderDisk.setDiskAlias(volume.getName()); + cinderDisk.setDescription(volume.getDescription()); + cinderDisk.setSizeInGigabytes(volume.getSize()); + cinderDisk.setCinderVolumeType(volume.getVolumeType()); + cinderDisk.setStorageIds(new ArrayList<>(Arrays.asList(storageDomainId))); + cinderDisk.setActive(true); + cinderDisk.setImageStatus(ImageStatus.OK); + cinderDisk.setvolumeFormat(VolumeFormat.RAW); + cinderDisk.setDiskInterface(DiskInterface.VirtIO); + try { + cinderDisk.setCreationDate(new SimpleDateFormat(DATE_FORMAT).parse(volume.getCreatedAt())); + } catch (ParseException e) { + cinderDisk.setCreationDate(null); + } + return cinderDisk; + } + private OpenStackVolumeProviderProxy getVolumeProviderProxy(Guid storageDomainId) { if (proxy == null) { proxy = OpenStackVolumeProviderProxy.getFromStorageDomainId(storageDomainId); 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 new file mode 100644 index 0000000..a72aa79 --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/GetUnregisteredCinderDisksByStorageDomainIdQuery.java @@ -0,0 +1,44 @@ +package org.ovirt.engine.core.bll.storage; + +import java.util.List; + +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; +import org.ovirt.engine.core.common.queries.IdQueryParameters; +import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.utils.linq.LinqUtils; +import org.ovirt.engine.core.utils.linq.Predicate; + +import com.woorea.openstack.cinder.model.Volume; + +public class GetUnregisteredCinderDisksByStorageDomainIdQuery<P extends IdQueryParameters> extends CinderQueryBase<P> { + + public GetUnregisteredCinderDisksByStorageDomainIdQuery(P parameters) { + super(parameters); + } + + @Override + protected void executeQueryCommand() { + final List<Volume> allVolumes = getVolumeProviderProxy().getVolumes(); + final List<Disk> registeredDisks = + getDbFacade().getDiskDao().getAllWithQuery(String.format("SELECT * FROM all_disks where disk_storage_type = '%d'", + DiskStorageType.CINDER.getValue())); + + List<Volume> unregisteredVolumes = LinqUtils.filter(allVolumes, new Predicate<Volume>() { + @Override + public boolean eval(Volume volume) { + for (Disk registeredDisk : registeredDisks) { + if (volume.getId().equals(registeredDisk.getId().toString())) { + return false; + } + } + return true; + } + }); + + Guid storageDomainId = getParameters().getId(); + List<CinderDisk> unregisteredDisks = CinderBroker.volumesToCinderDisks(unregisteredVolumes, storageDomainId); + getQueryReturnValue().setReturnValue(unregisteredDisks); + } +} 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 f858899..c62e072 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 @@ -302,6 +302,7 @@ // Cinder GetCinderVolumeTypesByStorageDomainId(VdcQueryAuthType.User), + GetUnregisteredCinderDisksByStorageDomainId, // Event Notification GetEventSubscribersBySubscriberIdGrouped, -- To view, visit https://gerrit.ovirt.org/39650 To unsubscribe, visit https://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I38c61f1763c4841101c199721414371acf101d59 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