Gustavo Frederico Temple Pedrosa has uploaded a new change for review.

Change subject: core: [Fix] PCI limit in add watchdog
......................................................................

core: [Fix] PCI limit in add watchdog

The method checkPciAndIdeLimit didn't account for the watchdog, so the
limit number could be exceeded. This change fix this behaviour.

Change-Id: Id6b8fdd4b0b3a56e838c1252515b3b5391de22a9
Signed-off-by: Gustavo Pedrosa <[email protected]>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AbstractDiskVmCommand.java
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/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/VmCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/template/AddVmTemplateInterfaceCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/AbstractVmInterfaceCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/VmDeviceUtils.java
8 files changed, 55 insertions(+), 14 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/91/22491/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AbstractDiskVmCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AbstractDiskVmCommand.java
index c905b3d..42f9565 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AbstractDiskVmCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AbstractDiskVmCommand.java
@@ -110,6 +110,7 @@
                 vmInterfaces,
                 allVmDisks,
                 isVirtioScsiControllerAttached(getVmId()),
+                isWatchdogSetted(getVmId()),
                 getReturnValue().getCanDoActionMessages());
     }
 
@@ -117,6 +118,10 @@
         return VmDeviceUtils.isVirtioScsiControllerAttached(vmId);
     }
 
+    protected boolean isWatchdogSetted(Guid vmId) {
+        return VmDeviceUtils.isWatchdogSetted(vmId);
+    }
+
     protected boolean isDiskCanBeAddedToVm(Disk diskInfo, VM vm) {
         if (!diskInfo.isDiskSnapshot() && diskInfo.isBoot()) {
             for (Disk disk : vm.getDiskMap().values()) {
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 9822243..b562afa 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
@@ -288,6 +288,7 @@
                                 getVmInterfaces(),
                                 getVmDisks(),
                                 isVirtioScsiEnabled(),
+                                isWatchdogSetted(),
                                 getReturnValue().getCanDoActionMessages())
                         && canAddVm(getReturnValue().getCanDoActionMessages(), 
destStorages.values())
                         && hostToRunExist();
@@ -1038,6 +1039,10 @@
                 
FeatureSupported.virtIoScsi(getVdsGroup().getcompatibility_version());
     }
 
+    protected boolean isWatchdogSetted() {
+        return (getParameters().getWatchdog() != null);
+    }
+
     protected boolean isVirtioScsiControllerAttached(Guid vmId) {
         return VmDeviceUtils.isVirtioScsiControllerAttached(vmId);
     }
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 852e2d3..6bfc3cd 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
@@ -287,17 +287,16 @@
             return false;
         }
 
-        // if number of monitors has increased, check PCI and IDE limits are ok
-        if (vmFromDB.getNumOfMonitors() < vmFromParams.getNumOfMonitors()) {
-            List<Disk> allDisks = 
DbFacade.getInstance().getDiskDao().getAllForVm(getVmId());
-            List<VmNic> interfaces = getVmNicDao().getAllForVm(getVmId());
-            if (!checkPciAndIdeLimit(vmFromParams.getNumOfMonitors(),
-                    interfaces,
-                    allDisks,
-                    isVirtioScsiEnabled(),
-                    getReturnValue().getCanDoActionMessages())) {
-                return false;
-            }
+        // Check PCI and IDE limits are ok
+        List<Disk> allVmDisks = 
DbFacade.getInstance().getDiskDao().getAllForVm(getVmId());
+        List<VmNic> interfaces = getVmNicDao().getAllForVm(getVmId());
+        if (!checkPciAndIdeLimit(vmFromParams.getNumOfMonitors(),
+                interfaces,
+                allVmDisks,
+                isVirtioScsiEnabled(),
+                isWatchdogSetted(),
+                getReturnValue().getCanDoActionMessages())) {
+            return false;
         }
 
         if 
(!VmTemplateCommand.isVmPriorityValueLegal(vmFromParams.getPriority(),
@@ -535,4 +534,14 @@
         return virtioScsiEnabled != null ? virtioScsiEnabled :
                 VmDeviceUtils.isVirtioScsiControllerAttached(getVmId());
     }
+
+    protected boolean isWatchdogSetted() {
+        if (getParameters().isUpdateWatchdog()
+                && getParameters().getWatchdog() != null) {
+            return true;
+        }
+
+        return false;
+    }
+
 }
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 778c183..6fdfe75 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
@@ -174,6 +174,7 @@
 
             if (!checkPciAndIdeLimit(vm.getNumOfMonitors(), allVmInterfaces, 
allVmDisks,
                     VmDeviceUtils.isVirtioScsiControllerAttached(vm.getId()),
+                    VmDeviceUtils.isWatchdogSetted(vm.getId()),
                     getReturnValue().getCanDoActionMessages())) {
                 return false;
             }
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 d659176..d31e810 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
@@ -109,10 +109,17 @@
      * @param monitorsNumber
      * @param interfaces
      * @param disks
-     * @return
+     * @param virtioScsiEnabled
+     * @param isWatchdogSetted
+     * @param messages
+     * @return a boolean
      */
-    public static <T extends Disk> boolean checkPciAndIdeLimit(int 
monitorsNumber, List<VmNic> interfaces,
-            List<T> disks, boolean virtioScsiEnabled, ArrayList<String> 
messages) {
+    public static <T extends Disk> boolean checkPciAndIdeLimit(int 
monitorsNumber,
+            List<VmNic> interfaces,
+            List<T> disks,
+            boolean virtioScsiEnabled,
+            boolean isWatchdogSetted,
+            ArrayList<String> messages) {
         boolean result = true;
         // this adds: monitors + 2 * (interfaces with type rtl_pv) + (all other
         // interfaces) + (all disks that are not IDE)
@@ -136,6 +143,9 @@
         // VirtIO SCSI controller requires one PCI slot
         pciInUse += virtioScsiEnabled ? 1 : 0;
 
+        // VmWatchdog controller requires one PCI slot
+        pciInUse += isWatchdogSetted ? 1 : 0;
+
         if (pciInUse > MAX_PCI_SLOTS) {
             result = false;
             
messages.add(VdcBllMessages.ACTION_TYPE_FAILED_EXCEEDED_MAX_PCI_SLOTS.name());
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/template/AddVmTemplateInterfaceCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/template/AddVmTemplateInterfaceCommand.java
index 99ac590..6b32728 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/template/AddVmTemplateInterfaceCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/template/AddVmTemplateInterfaceCommand.java
@@ -63,6 +63,7 @@
                 
Collections.<VmNic>singletonList(getParameters().getInterface()),
                 new ArrayList<DiskImageBase>(getVmTemplate().getDiskList()),
                     VmDeviceUtils.isVirtioScsiControllerAttached(getVmId()),
+                    VmDeviceUtils.isWatchdogSetted(getVmId()),
                     getReturnValue().getCanDoActionMessages())) {
             return false;
         }
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/AbstractVmInterfaceCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/AbstractVmInterfaceCommand.java
index 5627949..1310f1a 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/AbstractVmInterfaceCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/AbstractVmInterfaceCommand.java
@@ -85,6 +85,7 @@
 
         return checkPciAndIdeLimit(vm.getNumOfMonitors(), allInterfaces, 
allDisks,
                 VmDeviceUtils.isVirtioScsiControllerAttached(getVmId()),
+                VmDeviceUtils.isWatchdogSetted(getVmId()),
                 getReturnValue().getCanDoActionMessages());
     }
 
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 c6f3255..83d946a 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
@@ -1007,6 +1007,15 @@
         return !getVirtioScsiControllers(vmId).isEmpty();
     }
 
+    public static boolean isWatchdogSetted(Guid vmId) {
+        return !getWatchdogs(vmId).isEmpty();
+    }
+
+    public static List<VmDevice> getWatchdogs(Guid vmId) {
+        return 
DbFacade.getInstance().getVmDeviceDao().getVmDeviceByVmIdAndType(vmId,
+                VmDeviceGeneralType.WATCHDOG);
+    }
+
     public static List<VmDevice> getVirtioScsiControllers(Guid vmId) {
         return getVirtioScsiControllers(vmId, null, false);
     }


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

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

Reply via email to