Liron Ar has uploaded a new change for review.

Change subject: core: set volume description to reflect ovf store status
......................................................................

core: set volume description to reflect ovf store status

Change-Id: I09fc7ab550cd86e7843656ba92a5322165703a2d
Signed-off-by: Liron Aravot <[email protected]>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateOvfVolumeForStorageDomainCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ProcessOvfUpdateForStorageDomainCommand.java
M 
backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ovf/OvfInfoFileConstants.java
3 files changed, 59 insertions(+), 11 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/32/26932/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateOvfVolumeForStorageDomainCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateOvfVolumeForStorageDomainCommand.java
index de5ad45..f42396b 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateOvfVolumeForStorageDomainCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateOvfVolumeForStorageDomainCommand.java
@@ -21,6 +21,7 @@
 import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogDirector;
 import org.ovirt.engine.core.dao.StorageDomainOvfInfoDao;
+import org.ovirt.engine.core.utils.ovf.OvfInfoFileConstants;
 
 @InternalCommandAttribute
 @NonTransactiveCommandAttribute
@@ -70,8 +71,8 @@
         DiskImage mNewCreatedDiskImage = new DiskImage();
         mNewCreatedDiskImage.setDiskInterface(DiskInterface.IDE);
         mNewCreatedDiskImage.setWipeAfterDelete(false);
-        mNewCreatedDiskImage.setDiskAlias("OVF_STORE");
-        mNewCreatedDiskImage.setDiskDescription("OVF_STORE");
+        
mNewCreatedDiskImage.setDiskAlias(OvfInfoFileConstants.OvfStoreDescriptionLabel);
+        
mNewCreatedDiskImage.setDiskDescription(OvfInfoFileConstants.OvfStoreDescriptionLabel);
         mNewCreatedDiskImage.setShareable(true);
         mNewCreatedDiskImage.setStorageIds(new 
ArrayList<>(Arrays.asList(domainId)));
         mNewCreatedDiskImage.setSize(SizeConverter.BYTES_IN_MB * 128);
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ProcessOvfUpdateForStorageDomainCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ProcessOvfUpdateForStorageDomainCommand.java
index 4f4ccfd..80bcfd2 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ProcessOvfUpdateForStorageDomainCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ProcessOvfUpdateForStorageDomainCommand.java
@@ -27,9 +27,12 @@
 import org.ovirt.engine.core.common.config.Config;
 import org.ovirt.engine.core.common.config.ConfigValues;
 import org.ovirt.engine.core.common.constants.StorageConstants;
+import org.ovirt.engine.core.common.errors.VdcBLLException;
 import org.ovirt.engine.core.common.errors.VdcBllMessages;
 import org.ovirt.engine.core.common.locks.LockingGroup;
 import org.ovirt.engine.core.common.utils.Pair;
+import 
org.ovirt.engine.core.common.vdscommands.SetVolumeDescriptionVDSCommandParameters;
+import org.ovirt.engine.core.common.vdscommands.VDSCommandType;
 import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.core.dal.dbbroker.DbFacade;
 import org.ovirt.engine.core.dao.StorageDomainOvfInfoDao;
@@ -45,6 +48,15 @@
     private LinkedList<Pair<StorageDomainOvfInfo, DiskImage>> 
domainOvfStoresInfoForUpdate = new LinkedList<>();
     private StorageDomain storageDomain;
     private int ovfDiskCount;
+    private static final Map<String, Object> preOvfUpdateInfo = new 
HashMap<>();
+    private static final Map<String, Object> postOvfUpdateInfo = new 
HashMap<>();
+
+    static {
+        preOvfUpdateInfo.put(OvfInfoFileConstants.IsUpdated, Boolean.FALSE);
+        preOvfUpdateInfo.put(OvfInfoFileConstants.DiskDescription, 
OvfInfoFileConstants.OvfStoreDescriptionLabel);
+        postOvfUpdateInfo.put(OvfInfoFileConstants.IsUpdated, Boolean.TRUE);
+        postOvfUpdateInfo.put(OvfInfoFileConstants.DiskDescription, 
OvfInfoFileConstants.OvfStoreDescriptionLabel);
+    }
 
     public ProcessOvfUpdateForStorageDomainCommand(T parameters) {
         super(parameters);
@@ -103,19 +115,24 @@
                         getParameters().getStoragePoolId());
     }
 
-    private Map<String, Object> buildOvfGeneralInfo(List<Guid> 
vmAndTemplatesIds, Date updateDate) throws IOException {
+    private String buildOvfGeneralInfoJson(Date updateDate, Map<String, ?> 
additionalData) {
         Map<String, Object> map = new HashMap<>();
         map.put(OvfInfoFileConstants.LastUpdated, updateDate.toString());
         map.put(OvfInfoFileConstants.Domains, 
Arrays.asList(getParameters().getStorageDomainId()));
-        map.put(OvfInfoFileConstants.ContainedOvfIds, vmAndTemplatesIds);
-        return map;
+        map.putAll(additionalData);
+        try {
+            return JsonHelper.mapToJson(map);
+        } catch (IOException e) {
+            throw new RuntimeException("Exception while generating json 
containing ovf store info", e);
+        }
     }
 
     private byte[] buildOvfInfoFileByteArray(List<Guid> vmAndTemplatesIds, 
Date updateDate) {
         ByteArrayOutputStream bufferedOutputStream = new 
ByteArrayOutputStream();
 
         try (InMemoryTar inMemoryTar = new InMemoryTar(bufferedOutputStream)) {
-            
inMemoryTar.addTarEntry(JsonHelper.mapToJson(buildOvfGeneralInfo(vmAndTemplatesIds,
 updateDate)).getBytes(),
+            inMemoryTar.addTarEntry(buildOvfGeneralInfoJson(updateDate,
+                    
Collections.singletonMap(OvfInfoFileConstants.ContainedOvfIds, 
vmAndTemplatesIds)).getBytes(),
                     "info.json");
             int i = 0;
             while (i < vmAndTemplatesIds.size()) {
@@ -186,23 +203,48 @@
         }
     }
 
+    private void setOvfVolumeDescription(Guid storagePoolId,
+            Guid storageDomainId,
+            Guid diskId,
+            Guid volumeId,
+            StorageDomainOvfInfo storageDomainOvfInfo,
+            Map<String, ?> additionalData) {
+        try {
+            SetVolumeDescriptionVDSCommandParameters vdsCommandParameters =
+                    new 
SetVolumeDescriptionVDSCommandParameters(storagePoolId, storageDomainId,
+                            diskId, volumeId, 
buildOvfGeneralInfoJson(storageDomainOvfInfo.getLastUpdated(),
+                                    additionalData));
+            runVdsCommand(VDSCommandType.SetVolumeDescription, 
vdsCommandParameters);
+        } catch (VdcBLLException e) {
+            log.infoFormat("failed to set description for disk {0}, proceeding 
with execution", diskId);
+        }
+    }
+
     private boolean performOvfUpdateForDomain(byte[] ovfData,
             Date updateDate,
             StorageDomainOvfInfo storageDomainOvfInfo,
             DiskImage ovfDisk,
             List<Guid> vmAndTemplatesIds) {
+        Guid storagePoolId = ovfDisk.getStoragePoolId();
+        Guid storageDomainId = ovfDisk.getStorageIds().get(0);
+        Guid diskId = ovfDisk.getId();
+        Guid volumeId = ovfDisk.getImageId();
+
+        storageDomainOvfInfo.setStoredOvfIds(null);
+        setOvfVolumeDescription(storagePoolId, storageDomainId,
+                diskId, volumeId, storageDomainOvfInfo, preOvfUpdateInfo);
+
+        getStorageDomainOvfInfoDao().update(storageDomainOvfInfo);
+
         ByteArrayInputStream byteArrayInputStream =
                 new ByteArrayInputStream(ovfData);
 
         UploadStreamParameters uploadStreamParameters =
-                new UploadStreamParameters(ovfDisk.getStoragePoolId(), 
ovfDisk.getStorageIds().get(0),
-                        ovfDisk.getId(), ovfDisk.getImageId(), 
byteArrayInputStream,
+                new UploadStreamParameters(storagePoolId, storageDomainId,
+                        diskId, volumeId, byteArrayInputStream,
                         Long.valueOf(ovfData.length));
         uploadStreamParameters.setParentCommand(getActionType());
         uploadStreamParameters.setParentParameters(getParameters());
-
-        storageDomainOvfInfo.setStoredOvfIds(null);
-        getStorageDomainOvfInfoDao().update(storageDomainOvfInfo);
 
         VdcReturnValueBase vdcReturnValueBase =
                 
Backend.getInstance().runInternalAction(VdcActionType.UploadStream, 
uploadStreamParameters);
@@ -210,6 +252,8 @@
             storageDomainOvfInfo.setStatus(StorageDomainOvfInfoStatus.UPDATED);
             storageDomainOvfInfo.setStoredOvfIds(vmAndTemplatesIds);
             storageDomainOvfInfo.setLastUpdated(updateDate);
+            setOvfVolumeDescription(storagePoolId, storageDomainId,
+                    diskId, volumeId, storageDomainOvfInfo, postOvfUpdateInfo);
             getStorageDomainOvfInfoDao().update(storageDomainOvfInfo);
             
getReturnValue().getVdsmTaskIdList().addAll(vdcReturnValueBase.getInternalVdsmTaskIdList());
         }
diff --git 
a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ovf/OvfInfoFileConstants.java
 
b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ovf/OvfInfoFileConstants.java
index 276e820..1f7c420 100644
--- 
a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ovf/OvfInfoFileConstants.java
+++ 
b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ovf/OvfInfoFileConstants.java
@@ -7,4 +7,7 @@
     public static final String LastUpdated = "Last Updated";
     public static final String Domains = "Storage Domains";
     public static final String ContainedOvfIds = "Storage Domains";
+    public static final String DiskDescription = "Disk Description";
+    public static final String IsUpdated = "Updated";
+    public static final String OvfStoreDescriptionLabel = "OVF_STORE";
 }


-- 
To view, visit http://gerrit.ovirt.org/26932
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I09fc7ab550cd86e7843656ba92a5322165703a2d
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Liron Ar <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to