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

Reply via email to