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
