Liron Aravot has uploaded a new change for review. Change subject: core: WIP : OvfDataUpdater - removal calls to updateVm/Template in spm. ......................................................................
core: WIP : OvfDataUpdater - removal calls to updateVm/Template in spm. Change-Id: Iedebceb9809dc0b11c0bbe8a2d4af63b0d848df1 Signed-off-by: Liron Aravot <lara...@redhat.com> --- M backend/manager/dbscripts/vms_sp.sql M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmFromScratchCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmTemplateCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateAllSnapshotsFromVmCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ExportVmCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ExportVmTemplateCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmTemplateCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveOrCopyTemplateCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveVmCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/OvfDataUpdater.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveDiskCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/TryBackToAllSnapshotsOfVmCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmDiskCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmTemplateCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmTemplateCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ReconstructMasterDomainCommand.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/UpdateVMVDSCommandParameters.java 20 files changed, 145 insertions(+), 174 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/40/9340/1 diff --git a/backend/manager/dbscripts/vms_sp.sql b/backend/manager/dbscripts/vms_sp.sql index e3d07e7..328a248 100644 --- a/backend/manager/dbscripts/vms_sp.sql +++ b/backend/manager/dbscripts/vms_sp.sql @@ -137,7 +137,7 @@ Create or replace FUNCTION UpdateVmDynamic(v_app_list VARCHAR(4000) , v_guest_cur_user_id UUID , - v_guest_cur_user_name AR(255) , + v_guest_cur_user_name VARCHAR(255) , v_guest_last_login_time TIMESTAMP WITH TIME ZONE , v_guest_last_logout_time TIMESTAMP WITH TIME ZONE , v_console_user_id UUID, diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmFromScratchCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmFromScratchCommand.java index b4afe19..81643ad 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmFromScratchCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmFromScratchCommand.java @@ -116,7 +116,7 @@ VmHandler.LockVm(getParameters().getVmStaticData().getId()); } else { // if no disks send update vm here - updateVmInSpm(getVm().getstorage_pool_id(), Arrays.asList(getVm())); + getVmDAO().incrementVmDbGeneration(getParameters().getVmStaticData().getId()); } return ret; diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmTemplateCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmTemplateCommand.java index c35b12c..b36a869 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmTemplateCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmTemplateCommand.java @@ -389,9 +389,7 @@ } private void endTemplateRelatedOperations() { - VmTemplate template = this.reloadVmTemplateFromDB(); - UpdateTemplateInSpm(template.getstorage_pool_id().getValue(), new java.util.ArrayList<VmTemplate>( - java.util.Arrays.asList(new VmTemplate[] { template }))); + getVmTemplateDAO().incrementVmTemplateDbGeneration(getVmTemplate().getId()); } private void endUnlockOps() { diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateAllSnapshotsFromVmCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateAllSnapshotsFromVmCommand.java index b52bdf5..3fe7877 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateAllSnapshotsFromVmCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateAllSnapshotsFromVmCommand.java @@ -160,7 +160,7 @@ endActionOnDisks(); - updateVmInSpm(getVm().getstorage_pool_id(), Arrays.asList(new VM[] { getVm() })); + getVmDAO().incrementVmDbGeneration(getVm().getId()); setSucceeded(getParameters().getTaskGroupSuccess()); getReturnValue().setEndActionTryAgain(false); diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ExportVmCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ExportVmCommand.java index 31acb5d..ab80c2a 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ExportVmCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ExportVmCommand.java @@ -401,9 +401,9 @@ } protected boolean updateVmImSpm() { - return VmCommand.updateVmInSpm(getVm().getstorage_pool_id(), - Arrays.asList(getVm()), - getParameters().getStorageDomainId()); + VmHandler.updateDisksFromDb(getVm()); + return OvfDataUpdater.executeUpdateVmInSpmCommand(getVm().getstorage_pool_id(), OvfDataUpdater.getVmsMetadataDictionary(getVm().getstorage_pool_id(), + Arrays.asList(getVm())), getParameters().getStorageDomainId()); } @Override diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ExportVmTemplateCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ExportVmTemplateCommand.java index b211e49..6d7fe5c 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ExportVmTemplateCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ExportVmTemplateCommand.java @@ -130,14 +130,6 @@ } @Override - protected void updateTemplateInSpm() { - // update the target (export) domain - VmTemplateCommand.UpdateTemplateInSpm(getVmTemplate().getstorage_pool_id().getValue(), - Arrays.asList(getVmTemplate()), - getParameters().getStorageDomainId(), null); - } - - @Override public Map<String, String> getJobMessageProperties() { if (jobProperties == null) { jobProperties = super.getJobMessageProperties(); diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmCommand.java index c33c446..3b026d3 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmCommand.java @@ -929,18 +929,13 @@ if (getVm() != null) { VmHandler.UnLockVm(getVm()); - updateVmInSpm(); + getVmDAO().incrementVmDbGeneration(getVm().getId());; } else { setCommandShouldBeLogged(false); log.warn("ImportVmCommand::EndImportCommand: Vm is null - not performing full EndAction"); } - } - - protected boolean updateVmInSpm() { - return VmCommand.updateVmInSpm(getVm().getstorage_pool_id(), - new ArrayList<VM>(Arrays.asList(new VM[] { getVm() }))); } @Override diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmTemplateCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmTemplateCommand.java index 3486066..6031366 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmTemplateCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmTemplateCommand.java @@ -431,9 +431,10 @@ @Override protected void updateTemplateInSpm() { - VmTemplateCommand.UpdateTemplateInSpm(getParameters().getStoragePoolId(), new java.util.ArrayList<VmTemplate>( - java.util.Arrays.asList(new VmTemplate[] { getParameters().getVmTemplate() })), Guid.Empty, - getParameters().getImages()); + getVmTemplateDAO().incrementVmTemplateDbGeneration(getParameters().getVmTemplate().getId()); +// VmTemplateCommand.UpdateTemplateInSpm(getParameters().getStoragePoolId(), new java.util.ArrayList<VmTemplate>( +// java.util.Arrays.asList(new VmTemplate[] { getParameters().getVmTemplate() })), Guid.Empty, +// getParameters().getImages()); } @Override diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveOrCopyTemplateCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveOrCopyTemplateCommand.java index 2401cde..81fc669 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveOrCopyTemplateCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveOrCopyTemplateCommand.java @@ -250,18 +250,12 @@ if (getVmTemplate() != null) { VmTemplateHandler.UnLockVmTemplate(getVmTemplateId()); VmDeviceUtils.setVmDevices(getVmTemplate()); - updateTemplateInSpm(); + getVmTemplateDAO().incrementVmTemplateDbGeneration(getVmTemplateId()); } else { setCommandShouldBeLogged(false); log.warn("MoveOrCopyTemplateCommand::EndMoveOrCopyCommand: VmTemplate is null, not performing full EndAction"); } - } - - protected void updateTemplateInSpm() { - VmTemplate vmt = getVmTemplate(); - VmTemplateCommand.UpdateTemplateInSpm(vmt.getstorage_pool_id().getValue(), - Arrays.asList(vmt)); } @Override diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveVmCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveVmCommand.java index 586be88..b6c70fe 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveVmCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveVmCommand.java @@ -178,11 +178,6 @@ } - protected boolean updateVmImSpm() { - return VmCommand.updateVmInSpm(getVm().getstorage_pool_id(), - Arrays.asList(getVm())); - } - @Override protected void moveOrCopyAllImageGroups() { moveOrCopyAllImageGroups(getVmId(), getVm().getDiskList()); @@ -208,7 +203,7 @@ VmHandler.UnLockVm(getVm()); VmHandler.updateDisksFromDb(getVm()); - updateVmImSpm(); + getVmDAO().incrementVmDbGeneration(getVm().getId());; } else { diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/OvfDataUpdater.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/OvfDataUpdater.java index 893e265..94fb7b11 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/OvfDataUpdater.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/OvfDataUpdater.java @@ -1,25 +1,39 @@ package org.ovirt.engine.core.bll; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.concurrent.TimeUnit; +import org.apache.commons.lang.StringUtils; import org.ovirt.engine.core.common.AuditLogType; +import org.ovirt.engine.core.common.businessentities.Disk; import org.ovirt.engine.core.common.businessentities.DiskImage; import org.ovirt.engine.core.common.businessentities.ImageStatus; import org.ovirt.engine.core.common.businessentities.StoragePoolStatus; import org.ovirt.engine.core.common.businessentities.VM; import org.ovirt.engine.core.common.businessentities.VMStatus; +import org.ovirt.engine.core.common.businessentities.VmNetworkInterface; import org.ovirt.engine.core.common.businessentities.VmTemplate; import org.ovirt.engine.core.common.businessentities.VmTemplateStatus; import org.ovirt.engine.core.common.businessentities.storage_pool; import org.ovirt.engine.core.common.config.Config; import org.ovirt.engine.core.common.config.ConfigValues; +import org.ovirt.engine.core.common.queries.GetVmTemplatesDisksParameters; +import org.ovirt.engine.core.common.queries.VdcQueryType; +import org.ovirt.engine.core.common.vdscommands.UpdateVMVDSCommandParameters; +import org.ovirt.engine.core.common.vdscommands.VDSCommandType; +import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.compat.KeyValuePairCompat; import org.ovirt.engine.core.dal.dbbroker.DbFacade; import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogDirector; import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogableBase; +import org.ovirt.engine.core.utils.linq.Function; +import org.ovirt.engine.core.utils.linq.LinqUtils; import org.ovirt.engine.core.utils.log.Log; import org.ovirt.engine.core.utils.log.LogFactory; +import org.ovirt.engine.core.utils.ovf.OvfManager; import org.ovirt.engine.core.utils.timer.OnTimerMethodAnnotation; import org.ovirt.engine.core.utils.timer.SchedulerUtil; import org.ovirt.engine.core.utils.timer.SchedulerUtilQuartzImpl; @@ -52,23 +66,36 @@ if (StoragePoolStatus.Up == pool.getstatus()) { log.infoFormat("OvfDataUpdater: Attempting to update VMs/Templates Ovf in Data Center {0}", pool.getname()); + // get vms/templates for ovf update List<VM> vmsForUpdate = getVmsForUpdate(DbFacade.getInstance() .getVmDao() .getAllVmsForOvfUpdateForStoragePool(pool.getId())); - VmCommand.updateVmInSpm(pool.getId(), vmsForUpdate); - if (!vmsForUpdate.isEmpty()) { + List<VmTemplate> templatesForUpdate = getTemplatesForUpdate(DbFacade.getInstance() + .getVmTemplateDao() + .getAllVmTemplatesForOvfUpdateForStoragePool(pool.getId())); + + // if there are any vms/templates that needs ovf update + if (!vmsForUpdate.isEmpty() || !templatesForUpdate.isEmpty()) { + int size = templatesForUpdate.size() + vmsForUpdate.size(); + Map<Guid, KeyValuePairCompat<String, List<Guid>>> vmsAndTemplateMetadata = + new HashMap<Guid, KeyValuePairCompat<String, List<Guid>>>(size); + + // build vms ovf + getVmsMetadataDictionary(pool.getId(), vmsForUpdate, vmsAndTemplateMetadata); + //build templates ovf + getTemplatesMetadataDictionary(pool.getId(), templatesForUpdate, vmsAndTemplateMetadata); + + // update ovf metadata in vdsm + executeUpdateVmInSpmCommand(pool.getId(), vmsAndTemplateMetadata, Guid.Empty); + + // update vm/templates ovf generation to the db generation that was updated in the storage. for (VM vm : vmsForUpdate) { DbFacade.getInstance() .getVmDao() .updateVmOvfGeneration(vm.getId(), vm.getStaticData().getDb_generation()); } - } - List<VmTemplate> templatesForUpdate = getTemplatesForUpdate(DbFacade.getInstance() - .getVmTemplateDao() - .getAllVmTemplatesForOvfUpdateForStoragePool(pool.getId())); - if (!templatesForUpdate.isEmpty()) { - VmTemplateCommand.UpdateTemplateInSpm(pool.getId(), templatesForUpdate); + for (VmTemplate template : templatesForUpdate) { DbFacade.getInstance() .getVmDao() @@ -139,6 +166,77 @@ return true; } + /** + * This method create OVF for each template in list and call updateVm in SPM + * + * @param storagePoolId + * @param templatesList + * @return Returns true if updateVm succeeded. + */ + public void getTemplatesMetadataDictionary(Guid storagePoolId, List<VmTemplate> templatesList, + Map<Guid, KeyValuePairCompat<String, List<Guid>>> templatesAndMetaDictionary) { + OvfManager ovfManager = new OvfManager(); + for (VmTemplate template : templatesList) { + List<DiskImage> allTemplateImages = template.getDiskList(); + + template.getInterfaces().clear(); + for (VmNetworkInterface iface : DbFacade.getInstance().getVmNetworkInterfaceDao() + .getAllForTemplate(template.getId())) { + template.getInterfaces().add(iface); + } + + String templateMeta = ovfManager.ExportTemplate(template, allTemplateImages); + templatesAndMetaDictionary.put(template.getId(), new KeyValuePairCompat<String, List<Guid>>( + templateMeta, LinqUtils.foreach(allTemplateImages, new Function<DiskImage, Guid>() { + @Override + public Guid eval(DiskImage diskImage) { + return diskImage.getimage_group_id().getValue(); + } + }))); + } + } + + + public void getVmsMetadataDictionary(Guid storagePoolId, + List<VM> vmsList, Map<Guid, KeyValuePairCompat<String, List<Guid>>> vmsAndMetaDictionary) { + OvfManager ovfManager = new OvfManager(); + for (VM vm : vmsList) { + ArrayList<DiskImage> AllVmImages = new ArrayList<DiskImage>(); + if (vm.getInterfaces() == null || vm.getInterfaces().isEmpty()) { + vm.setInterfaces(DbFacade.getInstance().getVmNetworkInterfaceDao().getAllForVm(vm.getId())); + } + for (Disk disk : vm.getDiskMap().values()) { + if (disk.isAllowSnapshot()) { + DiskImage diskImage = (DiskImage) disk; + AllVmImages.addAll(ImagesHandler.getAllImageSnapshots(diskImage.getImageId(), + diskImage.getit_guid())); + } + } + if (StringUtils.isEmpty(vm.getvmt_name())) { + VmTemplate t = DbFacade.getInstance().getVmTemplateDao().get(vm.getvmt_guid()); + vm.setvmt_name(t.getname()); + } + String vmMeta = ovfManager.ExportVm(vm, AllVmImages); + + vmsAndMetaDictionary.put( + vm.getId(), + new KeyValuePairCompat<String, List<Guid>>(vmMeta, LinqUtils.foreach(vm.getDiskMap().values(), + new Function<Disk, Guid>() { + @Override + public Guid eval(Disk a) { + return a.getId(); + } + }))); + } + } + + public boolean executeUpdateVmInSpmCommand(Guid storagePoolId, Map<Guid, KeyValuePairCompat<String, List<Guid>>> metaDictionary, Guid storageDomainId) { + UpdateVMVDSCommandParameters tempVar = new UpdateVMVDSCommandParameters(storagePoolId, metaDictionary); + tempVar.setStorageDomainId(storageDomainId); + return Backend.getInstance().getResourceManager().RunVdsCommand(VDSCommandType.UpdateVM, tempVar) + .getSucceeded(); + } + private void addAuditLogError(String storagePoolName) { AuditLogableBase logable = new AuditLogableBase(); logable.AddCustomValue("StoragePoolName", storagePoolName); diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveDiskCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveDiskCommand.java index 0b9827f..026b7e5 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveDiskCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveDiskCommand.java @@ -314,7 +314,9 @@ private void endCommand() { List<VM> listVms = getVmsForDiskId(); Backend.getInstance().EndAction(VdcActionType.RemoveImage, getParameters().getImagesParameters().get(0)); - VmCommand.updateVmInSpm(getStoragePoolId().getValue(), listVms); + for (VM vm : listVms) { + getVmDAO().incrementVmDbGeneration(vm.getId()); + } setSucceeded(true); } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/TryBackToAllSnapshotsOfVmCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/TryBackToAllSnapshotsOfVmCommand.java index 1f1a39d..f9aa221 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/TryBackToAllSnapshotsOfVmCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/TryBackToAllSnapshotsOfVmCommand.java @@ -106,8 +106,7 @@ getSnapshotDao().get(getParameters().getDstSnapshotId()), getSnapshotDao().getId(getVm().getId(), SnapshotType.ACTIVE), getCompensationContext()); - updateVmInSpm(getVm().getstorage_pool_id(), - Arrays.asList(getVm())); + getVmDAO().incrementVmDbGeneration(getVm().getId()); } @Override diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmCommand.java index 5ac2ab0..81ac692 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmCommand.java @@ -79,16 +79,8 @@ getVmStaticDAO().update(newVmStatic); updateVmPayload(); VmDeviceUtils.updateVmDevices(getParameters(), oldVm); + getVmDAO().incrementVmDbGeneration(getVm().getId()); - // Set the VM to null, to fetch it again from the DB ,instead from the cache. - // We want to get the VM current data that was updated to the DB. - setVm(null); - try { - updateVmInSpm(getVm().getstorage_pool_id(), - Arrays.asList(getVm())); - } catch (Exception e) { - // DO nothing - } setSucceeded(true); } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmDiskCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmDiskCommand.java index bfae74b..ac0cf4a 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmDiskCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmDiskCommand.java @@ -242,9 +242,8 @@ VmHandler.updateDisksFromDb(getVm()); // update vm device boot order VmDeviceUtils.updateBootOrderInVmDeviceAndStoreToDB(getVm().getStaticData()); - - setSucceeded(updateVmInSpm(getVm().getstorage_pool_id(), - Arrays.asList(getVm()))); + getVmDAO().incrementVmDbGeneration(getVm().getId()); + setSucceeded(true); return null; } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmTemplateCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmTemplateCommand.java index 3cc54f4..e93723a 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmTemplateCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmTemplateCommand.java @@ -83,10 +83,7 @@ UpdateVmTemplate(); if (getVmTemplate().getstorage_pool_id() != null && !VmTemplateHandler.BlankVmTemplateId.equals(getVmTemplate().getId())) { - UpdateTemplateInSpm( - getVmTemplate().getstorage_pool_id().getValue(), - new java.util.ArrayList<VmTemplate>(java.util.Arrays - .asList(new VmTemplate[] { getVmTemplate() }))); + getVmTemplateDAO().incrementVmTemplateDbGeneration(getVmTemplate().getId()); } setSucceeded(true); } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmCommand.java index 71b86d3..4ca105b 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmCommand.java @@ -1,6 +1,7 @@ package org.ovirt.engine.core.bll; import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; import java.util.LinkedList; import java.util.List; @@ -156,58 +157,6 @@ return result; } - /** - * This method create OVF for each vm in list and call updateVm in SPM - * - * @param storagePoolId - * @param vmsList - * @return Returns true if updateVm succeeded. - */ - public static boolean updateVmInSpm(Guid storagePoolId, List<VM> vmsList) { - return updateVmInSpm(storagePoolId, vmsList, Guid.Empty); - } - - public static boolean updateVmInSpm(Guid storagePoolId, - List<VM> vmsList, - Guid storageDomainId) { - HashMap<Guid, KeyValuePairCompat<String, List<Guid>>> vmsAndMetaDictionary = - new HashMap<Guid, KeyValuePairCompat<String, List<Guid>>>(vmsList.size()); - OvfManager ovfManager = new OvfManager(); - for (VM vm : vmsList) { - ArrayList<DiskImage> AllVmImages = new ArrayList<DiskImage>(); - VmHandler.updateDisksFromDb(vm); - if (vm.getInterfaces() == null || vm.getInterfaces().isEmpty()) { - vm.setInterfaces(DbFacade.getInstance().getVmNetworkInterfaceDao().getAllForVm(vm.getId())); - } - for (Disk disk : vm.getDiskMap().values()) { - if (disk.isAllowSnapshot()) { - DiskImage diskImage = (DiskImage) disk; - AllVmImages.addAll(ImagesHandler.getAllImageSnapshots(diskImage.getImageId(), - diskImage.getit_guid())); - } - } - if (StringUtils.isEmpty(vm.getvmt_name())) { - VmTemplate t = DbFacade.getInstance().getVmTemplateDao().get(vm.getvmt_guid()); - vm.setvmt_name(t.getname()); - } - String vmMeta = ovfManager.ExportVm(vm, AllVmImages); - - vmsAndMetaDictionary.put( - vm.getId(), - new KeyValuePairCompat<String, List<Guid>>(vmMeta, LinqUtils.foreach(vm.getDiskMap().values(), - new Function<Disk, Guid>() { - @Override - public Guid eval(Disk a) { - return a.getId(); - } - }))); - } - UpdateVMVDSCommandParameters tempVar = new UpdateVMVDSCommandParameters(storagePoolId, vmsAndMetaDictionary); - tempVar.setStorageDomainId(storageDomainId); - return Backend.getInstance().getResourceManager().RunVdsCommand(VDSCommandType.UpdateVM, tempVar) - .getSucceeded(); - } - protected boolean removeVmInSpm(Guid storagePoolId, Guid vmID) { return removeVmInSpm(storagePoolId, vmID, Guid.Empty); } @@ -267,7 +216,7 @@ if (getVm().getstatus() == VMStatus.ImageLocked) { VmHandler.unlockVm(getVm(), getCompensationContext()); } - throw new RuntimeException("asd"); + getVmDAO().incrementVmDbGeneration(getVm().getId()); } else { setCommandShouldBeLogged(false); log.warn("VmCommand::EndVmCommand: Vm is null - not performing EndAction on Vm"); diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmTemplateCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmTemplateCommand.java index 128a7ec..ed71e48 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmTemplateCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmTemplateCommand.java @@ -178,55 +178,6 @@ return getVmTemplateName(); } - /** - * This method create OVF for each template in list and call updateVm in SPM - * - * @param storagePoolId - * @param templatesList - * @return Returns true if updateVm succeeded. - */ - public static boolean UpdateTemplateInSpm(Guid storagePoolId, List<VmTemplate> templatesList) { - return UpdateTemplateInSpm(storagePoolId, templatesList, Guid.Empty, null); - } - - public static boolean UpdateTemplateInSpm(Guid storagePoolId, List<VmTemplate> templatesList, - Guid storageDomainId, List<DiskImage> images) { - java.util.HashMap<Guid, KeyValuePairCompat<String, List<Guid>>> templatesAndMetaDictionary = - new java.util.HashMap<Guid, KeyValuePairCompat<String, List<Guid>>>( - templatesList.size()); - OvfManager ovfManager = new OvfManager(); - for (VmTemplate template : templatesList) { - List<DiskImage> allTemplateImages = images; - if (allTemplateImages == null) { - allTemplateImages = (List) Backend - .getInstance() - .runInternalQuery(VdcQueryType.GetVmTemplatesDisks, - new GetVmTemplatesDisksParameters(template.getId())).getReturnValue(); - } - - // TODO remove this when the API changes - template.getInterfaces().clear(); - for (VmNetworkInterface iface : DbFacade.getInstance().getVmNetworkInterfaceDao() - .getAllForTemplate(template.getId())) { - template.getInterfaces().add(iface); - } - - String templateMeta = ovfManager.ExportTemplate(template, allTemplateImages); - templatesAndMetaDictionary.put(template.getId(), new KeyValuePairCompat<String, List<Guid>>( - templateMeta, LinqUtils.foreach(allTemplateImages, new Function<DiskImage, Guid>() { - @Override - public Guid eval(DiskImage diskImage) { - return diskImage.getimage_group_id().getValue(); - } - }))); - } - UpdateVMVDSCommandParameters tempVar = new UpdateVMVDSCommandParameters(storagePoolId, - templatesAndMetaDictionary); - tempVar.setStorageDomainId(storageDomainId); - return Backend.getInstance().getResourceManager().RunVdsCommand(VDSCommandType.UpdateVM, tempVar) - .getSucceeded(); - } - protected static boolean RemoveTemplateInSpm(Guid storagePoolId, Guid templateId) { return Backend.getInstance().getResourceManager() .RunVdsCommand(VDSCommandType.RemoveVM, new RemoveVMVDSCommandParameters(storagePoolId, templateId)) diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ReconstructMasterDomainCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ReconstructMasterDomainCommand.java index 81f04c0..3c246ec 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ReconstructMasterDomainCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ReconstructMasterDomainCommand.java @@ -148,10 +148,18 @@ p.setMaxCount(Integer.MAX_VALUE); @SuppressWarnings("unchecked") - List<VM> vmsInPool = (List<VM>) Backend.getInstance() + final List<VM> vmsInPool = (List<VM>) Backend.getInstance() .runInternalQuery(VdcQueryType.Search, p).getReturnValue(); - VmCommand.updateVmInSpm(getStoragePool().getId(), vmsInPool); + executeInNewTransaction(new TransactionMethod<Object>() { + @Override + public Void runInTransaction() { + for (VM vm : vmsInPool) { + getVmDAO().updateVmOvfGeneration(vm.getId(), 0); + } + return null; + } + }); } setSucceeded(reconstructOpSucceeded); diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/UpdateVMVDSCommandParameters.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/UpdateVMVDSCommandParameters.java index 96c83c1..3de9152 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/UpdateVMVDSCommandParameters.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/UpdateVMVDSCommandParameters.java @@ -4,22 +4,23 @@ import java.util.List; import java.util.HashMap; +import java.util.Map; public class UpdateVMVDSCommandParameters extends StorageDomainIdParametersBase { public UpdateVMVDSCommandParameters(Guid storagePoolId, - java.util.HashMap<Guid, KeyValuePairCompat<String, List<Guid>>> infoDictionary) { + Map<Guid, KeyValuePairCompat<String, List<Guid>>> infoDictionary) { super(storagePoolId); setInfoDictionary((infoDictionary != null) ? infoDictionary : new java.util.HashMap<Guid, KeyValuePairCompat<String, List<Guid>>>()); } - private HashMap<Guid, KeyValuePairCompat<String, List<Guid>>> privateInfoDictionary; + private Map<Guid, KeyValuePairCompat<String, List<Guid>>> privateInfoDictionary; - public java.util.HashMap<Guid, KeyValuePairCompat<String, List<Guid>>> getInfoDictionary() { + public Map<Guid, KeyValuePairCompat<String, List<Guid>>> getInfoDictionary() { return privateInfoDictionary; } - private void setInfoDictionary(java.util.HashMap<Guid, KeyValuePairCompat<String, List<Guid>>> value) { + private void setInfoDictionary(Map<Guid, KeyValuePairCompat<String, List<Guid>>> value) { privateInfoDictionary = value; } -- To view, visit http://gerrit.ovirt.org/9340 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Iedebceb9809dc0b11c0bbe8a2d4af63b0d848df1 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Liron Aravot <lara...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches