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
