Sergey Gotliv has uploaded a new change for review.

Change subject: engine: Display correct and user friendly size of iso files
......................................................................

engine: Display correct and user friendly size of iso files

Previously all iso files appear under Storage -> Images with bogus size
of '< 1 GB' although some of them are larger than that. It happened
because the 'getIsoList' API between Engine and VDSM returned only file
names and Engine set their size to 0.

Now this API returns all information VDSM keeps about these files
including their size so Engine can display the real file size.

Change-Id: I77bd99beb8138524b25f0afdcce0815ad8664f0f
Bug-Url: https://bugzilla.redhat.com/1005889
Signed-off-by: Sergey Gotliv <sgot...@redhat.com>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/IsoDomainListSyncronizer.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/GetFloppyListVDSCommand.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IsoListReturnForXmlRpc.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/HsmGetIsoListVDSCommand.java
4 files changed, 48 insertions(+), 43 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/49/19549/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/IsoDomainListSyncronizer.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/IsoDomainListSyncronizer.java
index f516a0e..c2d7418 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/IsoDomainListSyncronizer.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/IsoDomainListSyncronizer.java
@@ -4,6 +4,7 @@
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.Callable;
 import java.util.concurrent.ConcurrentHashMap;
@@ -537,19 +538,10 @@
         }
     }
 
-    /**
-     * Create a new transaction to refresh the Iso file list in to the DB.
-     *
-     * @param repoStorageDomainId
-     *            - The repository domain id we want to update.
-     * @param repoFileMetaDataDao
-     *            - The Data Access Layer for storage domain.
-     * @param isoDomainList
-     *            - The Iso files which refreshed in the cache.
-     */
     private static boolean refreshIsoFileListMetaData(final Guid 
repoStorageDomainId,
-            final RepoFileMetaDataDAO repoFileMetaDataDao,
-            final List<String> isoDomainList, final ImageFileType imageType) {
+                                                      final 
RepoFileMetaDataDAO repoFileMetaDataDao,
+                                                      final Map<String, 
Map<String, String>> isoDomainList,
+                                                      final ImageFileType 
imageType) {
         Lock syncObject = getSyncObject(repoStorageDomainId, imageType);
         try {
             syncObject.lock();
@@ -560,13 +552,13 @@
                             long currentTime = System.currentTimeMillis();
                             
repoFileMetaDataDao.removeRepoDomainFileList(repoStorageDomainId, imageType);
                             RepoImage repo_md;
-                            for (String isoFile : isoDomainList) {
+                            for (Map.Entry<String, Map<String, String>> 
isoFile : isoDomainList.entrySet()) {
                                 repo_md = new RepoImage();
                                 repo_md.setLastRefreshed(currentTime);
-                                repo_md.setSize(0);
+                                repo_md.setSize(retrieveIsoFileSize(isoFile));
                                 repo_md.setRepoDomainId(repoStorageDomainId);
                                 repo_md.setDateCreated(null);
-                                repo_md.setRepoImageId(isoFile);
+                                repo_md.setRepoImageId(isoFile.getKey());
                                 repo_md.setRepoImageName(null);
                                 repo_md.setFileType(imageType);
                                 repoFileMetaDataDao.addRepoFileMap(repo_md);
@@ -576,6 +568,16 @@
                     });
         } finally {
             syncObject.unlock();
+        }
+    }
+
+    private static long retrieveIsoFileSize(Map.Entry<String, Map<String, 
String>> isoFile) {
+        // old VDSM versions don't provide the metadata for iso files 
therefore engine
+        // cannot determine the correct size of the iso file.
+        if (isoFile.getValue().isEmpty() || 
!isoFile.getValue().containsKey("size")) {
+            return 0;
+        } else {
+            return Long.valueOf(isoFile.getValue().get("size"));
         }
     }
 
@@ -632,7 +634,7 @@
                         .RunVdsCommand(VDSCommandType.GetIsoList,
                                 new 
IrsBaseVDSCommandParameters(repoStoragePoolId));
                 @SuppressWarnings("unchecked")
-                List<String> isoDomainList = (List<String>) 
returnValue.getReturnValue();
+                Map isoDomainList = (Map) returnValue.getReturnValue();
                 if (returnValue.getSucceeded() && isoDomainList != null) {
                     log.debugFormat("The refresh process from VDSM, for Iso 
files succeeded.");
                     // Set the Iso domain file list fetched from VDSM into the 
DB.
@@ -670,7 +672,8 @@
                         .RunVdsCommand(VDSCommandType.GetFloppyList,
                                 new 
IrsBaseVDSCommandParameters(repoStoragePoolId));
                 @SuppressWarnings("unchecked")
-                List<String> isoDomainFloppyList = (List<String>) 
returnValue.getReturnValue();
+                Map<String, Map<String, String>> isoDomainFloppyList =
+                        (Map<String, Map<String, String>>) 
returnValue.getReturnValue();
                 if (returnValue.getSucceeded() && isoDomainFloppyList != null) 
{
                     // Set the Iso domain floppy file list fetched from VDSM 
into the DB.
                     refreshFloppySucceeded =
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/GetFloppyListVDSCommand.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/GetFloppyListVDSCommand.java
index f037a86..3e9bd3f 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/GetFloppyListVDSCommand.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/GetFloppyListVDSCommand.java
@@ -5,7 +5,7 @@
 import org.ovirt.engine.core.vdsbroker.vdsbroker.VDSExceptionBase;
 
 public class GetFloppyListVDSCommand<P extends IrsBaseVDSCommandParameters> 
extends GetIsoListVDSCommand<P> {
-    protected IsoListReturnForXmlRpc _isoList;
+    protected IsoListReturnForXmlRpc floppyList;
 
     public GetFloppyListVDSCommand(P parameters) {
         super(parameters);
@@ -13,13 +13,9 @@
 
     @Override
     protected void executeIrsBrokerCommand() {
-        _isoList = 
getIrsProxy().getFloppyList(getParameters().getStoragePoolId().toString());
+        floppyList = 
getIrsProxy().getFloppyList(getParameters().getStoragePoolId().toString());
         proceedProxyReturnValue();
-        if (_isoList.mVMList != null && _isoList.mVMList.length > 0) {
-            setReturnValue(new 
java.util.ArrayList<String>(java.util.Arrays.asList(_isoList.mVMList)));
-        } else {
-            setReturnValue(new java.util.ArrayList<String>());
-        }
+        setReturnValue(floppyList.getFileToMetadata());
     }
 
     @Override
@@ -29,11 +25,11 @@
 
     @Override
     protected Object getReturnValueFromBroker() {
-        return _isoList;
+        return floppyList;
     }
 
     @Override
     protected StatusForXmlRpc getReturnStatus() {
-        return _isoList.mStatus;
+        return floppyList.mStatus;
     }
 }
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IsoListReturnForXmlRpc.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IsoListReturnForXmlRpc.java
index 39c9e83..3f5a9aa 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IsoListReturnForXmlRpc.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IsoListReturnForXmlRpc.java
@@ -1,20 +1,30 @@
 package org.ovirt.engine.core.vdsbroker.irsbroker;
 
+import java.util.Collections;
+import java.util.HashMap;
 import java.util.Map;
 
 public final class IsoListReturnForXmlRpc extends StatusReturnForXmlRpc {
     private static final String ISO_LIST = "isolist";
-    // [XmlRpcMissingMapping(MappingAction.Ignore), XmlRpcMember("isolist")]
-    public String[] mVMList;
+    private static final String ISO_DICT = "isodict";
+
+    private Map<String, Map<String, String>> fileToMetadata;
 
     public IsoListReturnForXmlRpc(Map<String, Object> innerMap) {
         super(innerMap);
-        Object[] tempObj = (Object[]) innerMap.get(ISO_LIST);
-        if (tempObj != null) {
-            mVMList = new String[tempObj.length];
-            for (int i = 0; i < tempObj.length; i++) {
-                mVMList[i] = (String) tempObj[i];
+        fileToMetadata = (Map<String, Map<String, String>>) 
innerMap.get(ISO_DICT);
+        if (fileToMetadata == null) {
+            fileToMetadata = new HashMap<>();
+            Object[] isoList = (Object[]) innerMap.get(ISO_LIST);
+            if (isoList != null) {
+                for (int i = 0; i < isoList.length; i++) {
+                    fileToMetadata.put((String) isoList[i], 
Collections.<String, String>emptyMap());
+                }
             }
         }
     }
+
+    public Map<String, Map<String, String>> getFileToMetadata() {
+        return fileToMetadata;
+    }
 }
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/HsmGetIsoListVDSCommand.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/HsmGetIsoListVDSCommand.java
index 3ef6ccc..638e595 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/HsmGetIsoListVDSCommand.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/HsmGetIsoListVDSCommand.java
@@ -4,30 +4,26 @@
 import org.ovirt.engine.core.vdsbroker.irsbroker.IsoListReturnForXmlRpc;
 
 public class HsmGetIsoListVDSCommand<P extends HSMGetIsoListParameters> 
extends VdsBrokerCommand<P> {
+    private IsoListReturnForXmlRpc isoList;
+
     public HsmGetIsoListVDSCommand(P parameters) {
         super(parameters);
     }
 
-    protected IsoListReturnForXmlRpc _isoList;
-
     @Override
     protected void executeVdsBrokerCommand() {
-        _isoList = 
getBroker().getIsoList(getParameters().getStoragePoolId().toString());
+        isoList = 
getBroker().getIsoList(getParameters().getStoragePoolId().toString());
         proceedProxyReturnValue();
-        if (_isoList.mVMList != null && _isoList.mVMList.length > 0) {
-            setReturnValue(new 
java.util.ArrayList<String>(java.util.Arrays.asList(_isoList.mVMList)));
-        } else {
-            setReturnValue(new java.util.ArrayList<String>());
-        }
+        setReturnValue(isoList.getFileToMetadata());
     }
 
     @Override
     protected Object getReturnValueFromBroker() {
-        return _isoList;
+        return isoList;
     }
 
     @Override
     protected StatusForXmlRpc getReturnStatus() {
-        return _isoList.mStatus;
+        return isoList.mStatus;
     }
 }


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I77bd99beb8138524b25f0afdcce0815ad8664f0f
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Sergey Gotliv <sgot...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to