Maor Lipchuk has uploaded a new change for review. Change subject: core: Add support for copied disk template ......................................................................
core: Add support for copied disk template Add support for copied disk Template so an unregistered Template can be registered with its copied disks Change-Id: Id7514146d26792a361e47d1de820f5233ff9bf40 Bug-Url: https://bugzilla.redhat.com/1138136 Signed-off-by: Maor Lipchuk <mlipc...@redhat.com> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImagesHandler.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmTemplateFromConfigurationCommand.java 2 files changed, 59 insertions(+), 1 deletion(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/33/35933/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImagesHandler.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImagesHandler.java index fcbeff6..71d2687 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImagesHandler.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImagesHandler.java @@ -429,7 +429,7 @@ return returnValue; } - private static DiskImage isImageExist(Guid storagePoolId, DiskImage image) { + public static DiskImage isImageExist(Guid storagePoolId, DiskImage image) { DiskImage fromIrs = null; try { Guid storageDomainId = image.getStorageIds().get(0); diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmTemplateFromConfigurationCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmTemplateFromConfigurationCommand.java index 17702f3..0e81f46 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmTemplateFromConfigurationCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmTemplateFromConfigurationCommand.java @@ -10,8 +10,12 @@ import org.ovirt.engine.core.common.businessentities.DiskImage; import org.ovirt.engine.core.common.businessentities.OvfEntityData; import org.ovirt.engine.core.common.businessentities.VmTemplate; +import org.ovirt.engine.core.common.businessentities.image_storage_domain_map; import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.dal.dbbroker.DbFacade; import org.ovirt.engine.core.utils.ovf.OvfReaderException; +import org.ovirt.engine.core.utils.transaction.TransactionMethod; +import org.ovirt.engine.core.utils.transaction.TransactionSupport; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -98,12 +102,66 @@ public void executeCommand() { super.executeCommand(); if (isImagesAlreadyOnTarget()) { + setCopiedImages(); getUnregisteredOVFDataDao().removeEntity(ovfEntityData.getEntityId(), null); } setActionReturnValue(getVmTemplate().getId()); setSucceeded(true); } + private void setCopiedImages() { + List<OvfEntityData> ovfEntityDataList = + getUnregisteredOVFDataDao().getByEntityIdAndStorageDomain(ovfEntityData.getEntityId(), null); + List<DiskImage> copiedImagesList = initializeListForCopiedImage(); + for (OvfEntityData ovfEntityDataFetched : ovfEntityDataList) { + setValidCopiedStorageDomain(copiedImagesList, getImages(), ovfEntityDataFetched.getStorageDomainId()); + } + insertNewCopiedDiskImage(copiedImagesList); + } + + private List<DiskImage> initializeListForCopiedImage() { + List<DiskImage> clonedDiskImages = (ArrayList)getImages().clone(); + ArrayList<Guid> storageDomains = new ArrayList<>(); + for (DiskImage clonedDiskImage : clonedDiskImages) { + clonedDiskImage.setStorageIds(storageDomains); + } + return clonedDiskImages; + } + + private void setValidCopiedStorageDomain(List<DiskImage> copiedImagesList,List<DiskImage> originalmages, Guid StorageDomainId) { + List<DiskImage> clonedDiskImages = (ArrayList)getImages().clone(); + int index = 0; + for (DiskImage clonedDiskImage : clonedDiskImages) { + if (originalmages.get(index).getStorageIds().get(0).equals(StorageDomainId)) { + continue; + } + if (ImagesHandler.isImageExist(getStoragePoolId(), clonedDiskImage) != null) { + clonedDiskImage.getStorageIds().add(StorageDomainId); + } + index++; + } + } + + private void insertNewCopiedDiskImage(final List<DiskImage> diskImages) { + TransactionSupport.executeInNewTransaction(new TransactionMethod<Void>() { + + @Override + public Void runInTransaction() { + for (DiskImage diskImage : diskImages) { + for (Guid storageDomainId : diskImage.getStorageIds()) { + image_storage_domain_map image_storage_domain_map = + new image_storage_domain_map(diskImage.getImageId(), + storageDomainId, + diskImage.getQuotaId(), + diskImage.getDiskProfileId()); + DbFacade.getInstance().getImageStorageDomainMapDao().save(image_storage_domain_map); + } + } + return null; + } + }); + } + @Override public AuditLogType getAuditLogTypeValue() { return getSucceeded() ? AuditLogType.TEMPLATE_IMPORT_FROM_CONFIGURATION_SUCCESS : -- To view, visit http://gerrit.ovirt.org/35933 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Id7514146d26792a361e47d1de820f5233ff9bf40 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Maor Lipchuk <mlipc...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches