Tal Nisan has uploaded a new change for review. Change subject: core: Check all attached VMs when updating shared disk boot flag ......................................................................
core: Check all attached VMs when updating shared disk boot flag When updating a VM disk to be bootable, the other VMs that the disk is attached to was checked to see if they already have a bootable disk attached and if so the operation would have fail giving an error message that the VM already has a bootable disk attached, this check was changed to check all VMs and after iterating on all if one or more contained a bootable disk fail and give an error message containing all of the VMs that the operation failed on Change-Id: I82ee07e02e08d60f559017d9f8205ab7df41c5c3 Signed-off-by: Tal Nisan <tni...@redhat.com> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmDiskCommand.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/VdcBllMessages.java M backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties M frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java M frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties M frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties 6 files changed, 39 insertions(+), 6 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/09/14709/1 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 b0f9db2..4fc41be 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 @@ -126,13 +126,12 @@ return false; } } + } - // Validate update boot disk. - if (newDisk.isBoot()) { - VmHandler.updateDisksForVm(vm, getOtherVmDisks(vmId)); - if (!isDiskCanBeAddedToVm(newDisk, vm)) { - return false; - } + // Validate update boot disk. + if (newDisk.isBoot()) { + if (!isVMsContainingBootableDisks(newDisk, vmsDiskPluggedTo)) { + return false; } } @@ -270,6 +269,33 @@ return getSucceeded() ? AuditLogType.USER_UPDATE_VM_DISK : AuditLogType.USER_FAILED_UPDATE_VM_DISK; } + private boolean isVMsContainingBootableDisks(Disk diskInfo, List<VM> vms) { + boolean vmsContainBootDisk = false; + StringBuilder vmsContainingBootDisk = new StringBuilder(); + + for (VM vm : vms) { + VmHandler.updateDisksForVm(vm, getOtherVmDisks(vm.getId())); + for (Disk disk : vm.getDiskMap().values()) { + if (disk.isBoot()) { + if (vmsContainBootDisk) { // In case this is not the first VM to fail, add delimiter + vmsContainingBootDisk.append(", "); + } + vmsContainingBootDisk.append(vm.getName()); + vmsContainBootDisk = true; + } + } + } + + if (vmsContainBootDisk) { + addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_VMS_BOOT_IN_USE); + getReturnValue().getCanDoActionMessages().add( + String.format("$VmsName %1$s", vmsContainingBootDisk.toString())); + return false; + } + + return true; + } + @Override public String getDiskAlias() { return oldDisk.getDiskAlias(); diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/VdcBllMessages.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/VdcBllMessages.java index 871d56e..501eb54 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/VdcBllMessages.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/VdcBllMessages.java @@ -116,6 +116,7 @@ ACTION_TYPE_FAILED_EXCEEDED_MAX_PCI_SLOTS, ACTION_TYPE_FAILED_EXCEEDED_MAX_IDE_SLOTS, ACTION_TYPE_FAILED_DISK_BOOT_IN_USE, + ACTION_TYPE_FAILED_VMS_BOOT_IN_USE, ACTION_TYPE_FAILED_DISK_ALREADY_ATTACHED, ACTION_TYPE_FAILED_NOT_SHAREABLE_DISK_ALREADY_ATTACHED, ACTION_TYPE_FAILED_DISK_ALREADY_DETACHED, diff --git a/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties b/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties index 301d9f8..761ef63 100644 --- a/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties +++ b/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties @@ -533,6 +533,7 @@ ACTION_TYPE_FAILED_IMPORTED_TEMPLATE_IS_MISSING=Cannot import and collapse VM, Template is missing in domain ${DomainName} VM_POOL_CANNOT_CREATE_WITH_NO_VMS=Cannot create Pool with 0 VMs ACTION_TYPE_FAILED_DISK_BOOT_IN_USE=Cannot ${action} ${type}. Disk ${DiskName} in VM ${VmName} is already marked as boot. +ACTION_TYPE_FAILED_VMS_BOOT_IN_USE=Cannot ${action} ${type}. The VMs ${VmsName} already have a disk marked as boot. VDS_GROUP_CANNOT_UPDATE_CPU_WHEN_RUNNING_VMS=Cannot change cpu level when VMs are running. VM_OR_TEMPLATE_ILLEGAL_PRIORITY_VALUE=VM priority value passed the permitted max value, value should be between 0 and ${MaxValue}. ACTION_TYPE_FAILED_MIN_CPU_PER_SOCKET=Minimum number of CPU per socket cannot be less than 1 diff --git a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java index 6486b9e..aed8495 100644 --- a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java +++ b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java @@ -1423,6 +1423,9 @@ @DefaultStringValue("Cannot ${action} ${type}. Disk ${DiskName} in VM ${VmName} already marked as boot.") String ACTION_TYPE_FAILED_DISK_BOOT_IN_USE(); + @DefaultStringValue("Cannot ${action} ${type}. The VMs ${VmsName} already have a disk marked as boot.") + String ACTION_TYPE_FAILED_VMS_BOOT_IN_USE(); + @DefaultStringValue("Cannot change cpu level when VMs are running.") String VDS_GROUP_CANNOT_UPDATE_CPU_WHEN_RUNNING_VMS(); diff --git a/frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties b/frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties index 53a37971..49da206 100644 --- a/frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties +++ b/frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties @@ -529,6 +529,7 @@ ACTION_TYPE_FAILED_IMPORTED_TEMPLATE_IS_MISSING=Cannot import and collapse VM, Template is missing in domain ${DomainName} VM_POOL_CANNOT_CREATE_WITH_NO_VMS=Cannot create Pool with 0 VMs ACTION_TYPE_FAILED_DISK_BOOT_IN_USE=Cannot ${action} ${type}. Disk ${DiskName} in VM ${VmName} is already marked as boot. +ACTION_TYPE_FAILED_VMS_BOOT_IN_USE=Cannot ${action} ${type}. The VMs ${VmsName} already have a disk marked as boot. VDS_GROUP_CANNOT_UPDATE_CPU_WHEN_RUNNING_VMS=Cannot change cpu level when VMs are running. VM_OR_TEMPLATE_ILLEGAL_PRIORITY_VALUE=VM priority value passed the permitted max value, value should be between 0 and ${MaxValue}. ACTION_TYPE_FAILED_MIN_CPU_PER_SOCKET=Minimum number of CPU per socket cannot be less than 1 diff --git a/frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties b/frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties index c2444db..47cd75b 100644 --- a/frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties +++ b/frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties @@ -535,6 +535,7 @@ ACTION_TYPE_FAILED_IMPORTED_TEMPLATE_IS_MISSING=Cannot import and collapse VM, Template is missing in domain ${DomainName} VM_POOL_CANNOT_CREATE_WITH_NO_VMS=Cannot create Pool with 0 VMs ACTION_TYPE_FAILED_DISK_BOOT_IN_USE=Cannot ${action} ${type}. Disk ${DiskName} in VM ${VmName} is already marked as boot. +ACTION_TYPE_FAILED_VMS_BOOT_IN_USE=Cannot ${action} ${type}. The VMs ${VmsName} already have a disk marked as boot. VDS_GROUP_CANNOT_UPDATE_CPU_WHEN_RUNNING_VMS=Cannot change cpu level when VMs are running. VM_OR_TEMPLATE_ILLEGAL_PRIORITY_VALUE=VM priority value passed the permitted max value, value should be between 0 and ${MaxValue}. ACTION_TYPE_FAILED_MIN_CPU_PER_SOCKET=Minimum number of CPU per socket cannot be less than 1 -- To view, visit http://gerrit.ovirt.org/14709 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I82ee07e02e08d60f559017d9f8205ab7df41c5c3 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Tal Nisan <tni...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches