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

Reply via email to