Maor Lipchuk has uploaded a new change for review. Change subject: core: Use the latest OVF_STORE files ......................................................................
core: Use the latest OVF_STORE files Change-Id: I8252281f295df49a28c3c131d9a98fef9af8f35e Signed-off-by: Maor Lipchuk <[email protected]> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AttachStorageDomainToPoolCommand.java 1 file changed, 57 insertions(+), 27 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/47/32747/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AttachStorageDomainToPoolCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AttachStorageDomainToPoolCommand.java index c4a6cef..45eccb0 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AttachStorageDomainToPoolCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AttachStorageDomainToPoolCommand.java @@ -22,12 +22,16 @@ import org.ovirt.engine.core.common.businessentities.Disk; import org.ovirt.engine.core.common.businessentities.DiskImage; import org.ovirt.engine.core.common.businessentities.OvfEntityData; +import org.ovirt.engine.core.common.businessentities.StorageDomainOvfInfo; +import org.ovirt.engine.core.common.businessentities.StorageDomainOvfInfoStatus; import org.ovirt.engine.core.common.businessentities.StorageDomainStatic; import org.ovirt.engine.core.common.businessentities.StorageDomainStatus; import org.ovirt.engine.core.common.businessentities.StorageDomainType; import org.ovirt.engine.core.common.businessentities.StoragePoolIsoMap; import org.ovirt.engine.core.common.businessentities.StoragePoolIsoMapId; import org.ovirt.engine.core.common.businessentities.StoragePoolStatus; +import org.ovirt.engine.core.common.config.Config; +import org.ovirt.engine.core.common.config.ConfigValues; import org.ovirt.engine.core.common.errors.VdcBLLException; import org.ovirt.engine.core.common.errors.VdcBllErrors; import org.ovirt.engine.core.common.errors.VdcBllMessages; @@ -201,37 +205,55 @@ List<DiskImage> ovfStoreDiskImages = getAllOVFDisks(unregisteredDisks); if (!ovfStoreDiskImages.isEmpty()) { registerAllOvfDisks(ovfStoreDiskImages); - Pair<DiskImage, Long> ovfDiskAndSize = getLatestOVFDisk(ovfStoreDiskImages); - DiskImage ovfDisk = ovfDiskAndSize.getFirst(); - if (ovfDisk != null) { - try { - VDSReturnValue retrievedByteData = runVdsCommand(VDSCommandType.RetrieveImageData, - new ImageHttpAccessVDSCommandParameters(getVdsId(), - getParameters().getStoragePoolId(), - getParameters().getStorageDomainId(), - ovfDisk.getId(), - ovfDisk.getImage().getId(), - ovfDiskAndSize.getSecond())); + boolean entitiesRetrieved = false; + while (!entitiesRetrieved && !ovfStoreDiskImages.isEmpty()) + { + Pair<DiskImage, Long> ovfDiskAndSize = getLatestOVFDisk(ovfStoreDiskImages); + DiskImage ovfDisk = ovfDiskAndSize.getFirst(); + if (ovfDisk != null) { + try { + VDSReturnValue retrievedByteData = runVdsCommand(VDSCommandType.RetrieveImageData, + new ImageHttpAccessVDSCommandParameters(getVdsId(), + getParameters().getStoragePoolId(), + getParameters().getStorageDomainId(), + ovfDisk.getId(), + ovfDisk.getImage().getId(), + ovfDiskAndSize.getSecond())); - if (retrievedByteData.getSucceeded()) { - ovfEntitiesFromTar = - OvfUtils.getOvfEntities((byte[]) retrievedByteData.getReturnValue(), - getParameters().getStorageDomainId()); - } else { - log.errorFormat("Image data could not be retrieved for disk id {0} in storage domain id {1}", + if (retrievedByteData.getSucceeded()) { + ovfEntitiesFromTar = + OvfUtils.getOvfEntities((byte[]) retrievedByteData.getReturnValue(), + getParameters().getStorageDomainId()); + addOvfStoreDiskToDomain(ovfDisk); + entitiesRetrieved = true; + } else { + log.errorFormat("Image data could not be retrieved for disk id {0} in storage domain id {1}", + ovfDisk.getId(), + getParameters().getStorageDomainId()); + } + } catch (RuntimeException e) { + // We are catching RuntimeException, since the call for OvfUtils.getOvfEntities will throw + // a RuntimeException if there is a problem to untar the file. + log.errorFormat("Image data could not be retrieved for disk id {0} in storage domain id {1}. Error: {2}", ovfDisk.getId(), - getParameters().getStorageDomainId()); - AuditLogDirector.log(this, AuditLogType.RETRIEVE_OVF_STORE_FAILED); + getParameters().getStorageDomainId(), + e); } - } catch (RuntimeException e) { - // We are catching RuntimeException, since the call for OvfUtils.getOvfEntities will throw - // a RuntimeException if there is a problem to untar the file. - log.errorFormat("Image data could not be retrieved for disk id {0} in storage domain id {1}. Error: {2}", - ovfDisk.getId(), - getParameters().getStorageDomainId(), - e); - AuditLogDirector.log(this, AuditLogType.RETRIEVE_OVF_STORE_FAILED); } + ovfStoreDiskImages.remove(ovfDisk); + } + + if (!entitiesRetrieved) { + AuditLogDirector.log(this, AuditLogType.RETRIEVE_OVF_STORE_FAILED); + } else { + int countDisks = Config.<Integer> getValue(ConfigValues.StorageDomainOvfStoreCount) - 1; + DiskImage ovfDisk = null; + for (int i=0; i< countDisks; i++) { + Pair<DiskImage, Long> ovfDiskAndSize = getLatestOVFDisk(ovfStoreDiskImages); + ovfDisk = ovfDiskAndSize.getFirst(); + addOvfStoreDiskToDomain(ovfDisk); + } + ovfStoreDiskImages.remove(ovfDisk); } } else { log.warnFormat("There are no OVF_STORE disks on storage domain id {0}", @@ -240,6 +262,14 @@ return ovfEntitiesFromTar; } + private void addOvfStoreDiskToDomain(DiskImage ovfDisk) { + if (ovfDisk != null) { + // Setting OVF_STORE disk to be outdated so it will be updated. + StorageDomainOvfInfo storageDomainOvfInfo = new StorageDomainOvfInfo(getStorageDomainId(), null, ovfDisk.getId(), StorageDomainOvfInfoStatus.OUTDATED, null); + getDbFacade().getStorageDomainOvfInfoDao().save(storageDomainOvfInfo); + } + } + private void registerAllOvfDisks(List<DiskImage> ovfStoreDiskImages) { for (DiskImage ovfStoreDiskImage : ovfStoreDiskImages) { ovfStoreDiskImage.setDiskAlias("OVF_STORE"); -- To view, visit http://gerrit.ovirt.org/32747 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I8252281f295df49a28c3c131d9a98fef9af8f35e Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Maor Lipchuk <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
