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

Reply via email to