Sergey Gotliv has uploaded a new change for review.

Change subject: engine: Ties more consistently between vm nic device and vm nic 
entities.
......................................................................

engine: Ties more consistently between vm nic device and vm nic entities.

Fixes copy of vm nic devices in the same way the
http://gerrit.ovirt.org/#/c/17854/ fixes the copy of disk devices.

Change-Id: Iee9267ade386ab83a6c353b4206f4dfe003f24bc
Signed-off-by: Sergey Gotliv <[email protected]>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmFromSnapshotCommand.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/utils/VmDeviceUtils.java
4 files changed, 30 insertions(+), 34 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/62/18362/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmCommand.java
index bd226c5..49e7fd1 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmCommand.java
@@ -82,6 +82,7 @@
     private String cachedDiskSharedLockMessage;
 
     private Map<Guid, Guid> srcDiskIdToTargetDiskIdMapping = new HashMap<>();
+    private Map<Guid, Guid> srcVmNicIdToTargetVmNicIdMapping = new HashMap<>();
 
     public AddVmCommand(T parameters) {
         super(parameters);
@@ -413,7 +414,7 @@
     protected boolean checkCpuSockets() {
         return 
AddVmCommand.CheckCpuSockets(getParameters().getVmStaticData().getNumOfSockets(),
                 getParameters().getVmStaticData().getCpuPerSocket(), 
getVdsGroup().getcompatibility_version()
-                        .toString(), 
getReturnValue().getCanDoActionMessages());
+                .toString(), getReturnValue().getCanDoActionMessages());
     }
 
     protected boolean buildAndCheckDestStorageDomains() {
@@ -602,8 +603,7 @@
     protected void copyVmDevices() {
         VmDeviceUtils.copyVmDevices(getVmTemplateId(),
                 getVmId(),
-                srcDiskIdToTargetDiskIdMapping,
-                _vmInterfaces,
+                getSrcDeviceIdToTargetDeviceIdMapping(),
                 getParameters().isSoundDeviceEnabled(),
                 getParameters().isConsoleEnabled());
     }
@@ -641,7 +641,9 @@
     protected void addVmNetwork() {
         // Add interfaces from template
         for (VmNic iface : getVmInterfaces()) {
-            iface.setId(Guid.newGuid());
+            Guid id = Guid.newGuid();
+            srcVmNicIdToTargetVmNicIdMapping.put(iface.getId(), id);
+            iface.setId(id);
             iface.setMacAddress(MacPoolManager.getInstance().allocateNewMac());
             
iface.setSpeed(VmInterfaceType.forValue(iface.getType()).getSpeed());
             iface.setVmTemplateId(null);
@@ -926,4 +928,11 @@
     public Map<Guid, Guid> getSrcDiskIdToTargetDiskIdMapping() {
         return srcDiskIdToTargetDiskIdMapping;
     }
+
+    public Map<Guid, Guid> getSrcDeviceIdToTargetDeviceIdMapping() {
+        Map<Guid, Guid> srcDeviceIdToTargetDeviceIdMapping = new HashMap<>();
+        
srcDeviceIdToTargetDeviceIdMapping.putAll(srcVmNicIdToTargetVmNicIdMapping);
+        
srcDeviceIdToTargetDeviceIdMapping.putAll(srcDiskIdToTargetDiskIdMapping);
+        return  srcDeviceIdToTargetDeviceIdMapping;
+    }
 }
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmFromSnapshotCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmFromSnapshotCommand.java
index 54d566f..eba6f10 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmFromSnapshotCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmFromSnapshotCommand.java
@@ -247,8 +247,7 @@
                 getVm().getStaticData(),
                 true,
                 devices,
-                getSrcDiskIdToTargetDiskIdMapping(),
-                _vmInterfaces,
+                getSrcDeviceIdToTargetDeviceIdMapping(),
                 getParameters().isSoundDeviceEnabled(),
                 getParameters().isConsoleEnabled());
     }
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 e823b15..cab1bcb 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
@@ -70,12 +70,6 @@
     private boolean isVmInDb;
 
     /**
-     * A mapping between source disk id and target disk id.
-     * This mapping is used when creating new devices for this template.
-     */
-    private Map<Guid, Guid> srcDiskToTargetDiskMapping = new HashMap<>();
-
-    /**
      * Constructor for command creation when compensation is applied on startup
      *
      * @param commandId
@@ -196,6 +190,8 @@
         getParameters().setVmTemplateId(getVmTemplateId());
         getParameters().setEntityInfo(new EntityInfo(VdcObjectType.VmTemplate, 
getVmTemplateId()));
 
+        final Map<Guid, Guid> srcDeviceIdToTargetDeviceIdMapping = new 
HashMap<>();
+
         TransactionSupport.executeInNewTransaction(new 
TransactionMethod<Void>() {
 
             @Override
@@ -210,13 +206,12 @@
             @Override
             public Void runInTransaction() {
                 addPermission();
-                AddVmTemplateImages();
-                List<VmNic> vmInterfaces = addVmInterfaces();
+                AddVmTemplateImages(srcDeviceIdToTargetDeviceIdMapping);
+                addVmInterfaces(srcDeviceIdToTargetDeviceIdMapping);
                 if (isVmInDb) {
                     VmDeviceUtils.copyVmDevices(getVmId(),
                             getVmTemplateId(),
-                            srcDiskToTargetDiskMapping,
-                            vmInterfaces,
+                            srcDeviceIdToTargetDeviceIdMapping,
                             getParameters().isSoundDeviceEnabled(),
                             getParameters().isConsoleEnabled());
                 } else {
@@ -227,8 +222,7 @@
                             getVmTemplate(),
                             true,
                             Collections.<VmDevice> emptyList(),
-                            srcDiskToTargetDiskMapping,
-                            vmInterfaces,
+                            srcDeviceIdToTargetDeviceIdMapping,
                             getParameters().isSoundDeviceEnabled(),
                             getParameters().isConsoleEnabled());
                 }
@@ -432,8 +426,7 @@
         setActionReturnValue(getVmTemplate().getId());
     }
 
-    protected List<VmNic> addVmInterfaces() {
-        List<VmNic> templateInterfaces = new ArrayList<>();
+    protected void addVmInterfaces(Map<Guid, Guid> 
srcDeviceIdToTargetDeviceIdMapping) {
         List<VmNic> interfaces = 
getVmNicDao().getAllForVm(getParameters().getMasterVm().getId());
         for (VmNic iface : interfaces) {
             VmNic iDynamic = new VmNic();
@@ -444,13 +437,12 @@
             
iDynamic.setSpeed(VmInterfaceType.forValue(iface.getType()).getSpeed());
             iDynamic.setType(iface.getType());
             iDynamic.setLinked(iface.isLinked());
-            templateInterfaces.add(iDynamic);
             getVmNicDao().save(iDynamic);
+            srcDeviceIdToTargetDeviceIdMapping.put(iface.getId(), 
iDynamic.getId());
         }
-        return templateInterfaces;
     }
 
-    protected void AddVmTemplateImages() {
+    protected void AddVmTemplateImages(Map<Guid, Guid> 
srcDeviceIdToTargetDeviceIdMapping) {
         Guid vmSnapshotId = Guid.newGuid();
         for (DiskImage diskImage : mImages) {
             // The return value of this action is the 'copyImage' task GUID:
@@ -462,7 +454,7 @@
 
             
getReturnValue().getVdsmTaskIdList().addAll(retValue.getInternalVdsmTaskIdList());
             DiskImage newImage = (DiskImage) retValue.getActionReturnValue();
-            srcDiskToTargetDiskMapping.put(diskImage.getId(), 
newImage.getId());
+            srcDeviceIdToTargetDeviceIdMapping.put(diskImage.getId(), 
newImage.getId());
         }
     }
 
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/VmDeviceUtils.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/VmDeviceUtils.java
index 9c2a237..bafc9c9 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/VmDeviceUtils.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/VmDeviceUtils.java
@@ -231,8 +231,7 @@
                                      VmBase vmBase,
                                      boolean isVm,
                                      List<VmDevice> devicesDataToUse,
-                                     Map<Guid, Guid> 
srcDiskToTargetDiskMapping,
-                                     List<VmNic> ifaces,
+                                     Map<Guid, Guid> 
srcDeviceIdToTargetDeviceIdMapping,
                                      boolean soundDeviceEnabled,
                                      boolean isConsoleEnabled) {
         Guid id;
@@ -264,7 +263,7 @@
             switch(device.getType()) {
                 case DISK:
                     if 
(VmDeviceType.DISK.getName().equals(device.getDevice())) {
-                            id = 
srcDiskToTargetDiskMapping.get(device.getDeviceId());
+                            id = 
srcDeviceIdToTargetDeviceIdMapping.get(device.getDeviceId());
                     } else if 
(VmDeviceType.CDROM.getName().equals(device.getDevice())) {
                         // check here is source VM had CD (Vm from snapshot)
                         String srcCdPath = (String) 
device.getSpecParams().get(VdsProperties.Path);
@@ -279,9 +278,7 @@
                     break;
 
                 case INTERFACE:
-                    if (ifaceCount < ifaces.size()) {
-                        id = ifaces.get(ifaceCount++).getId();
-                    }
+                    id = 
srcDeviceIdToTargetDeviceIdMapping.get(device.getDeviceId());
                     break;
 
                 case CONTROLLER:
@@ -383,8 +380,7 @@
 
     public static void copyVmDevices(Guid srcId,
                                      Guid dstId,
-                                     Map<Guid, Guid> 
srcDiskToTargetDiskMapping,
-                                     List<VmNic> ifaces,
+                                     Map<Guid, Guid> 
srcDeviceIdToTargetDeviceIdMapping,
                                      boolean soundDeviceEnabled,
                                      boolean isConsoleEnabled) {
         VM vm = DbFacade.getInstance().getVmDao().get(dstId);
@@ -396,8 +392,8 @@
         }
 
         List<VmDevice> devices = dao.getVmDeviceByVmId(srcId);
-        copyVmDevices(srcId, dstId, vm, vmBase, isVm, devices, 
srcDiskToTargetDiskMapping,
-                ifaces, soundDeviceEnabled, isConsoleEnabled);
+        copyVmDevices(srcId, dstId, vm, vmBase, isVm, devices, 
srcDeviceIdToTargetDeviceIdMapping,
+                soundDeviceEnabled, isConsoleEnabled);
     }
 
     private static void addVideoDevice(VmBase vm) {


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Iee9267ade386ab83a6c353b4206f4dfe003f24bc
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Sergey Gotliv <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to