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