Asaf Shakarchi has uploaded a new change for review.

Change subject: core: Forbid attaching a locked disk to a VM (#856137)
......................................................................

core: Forbid attaching a locked disk to a VM (#856137)

- Forbid attaching a locked disk to a VM.
- Replaced message key 'ACTION_TYPE_FAILED_VM_IMAGE_IS_LOCKED' which was
intended for many disks to 'ACTION_TYPE_FAILED_VM_IMAGES_ARE_LOCKED as
it's more appropriate.
- Added a new messge key (ACTION_TYPE_FAILED_VM_IMAGES_ARE_LOCKED) for
single disk.

Change-Id: I109654547b68da245a5fdc2b2188feedd45c2ca7
Signed-off-by: Asaf Shakarchi <a...@redhat.com>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddDiskCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AttachDiskToVmCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImagesHandler.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveOrCopyDiskCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommand.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
10 files changed, 25 insertions(+), 12 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/67/8167/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddDiskCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddDiskCommand.java
index 4242fd6..bf3488e 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddDiskCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddDiskCommand.java
@@ -81,7 +81,7 @@
         VM vm = getVm();
         if (returnValue && (vm != null && vm.getstatus() == 
VMStatus.ImageLocked)) {
             returnValue = false;
-            
addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_VM_IMAGE_IS_LOCKED);
+            
addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_VM_IMAGES_ARE_LOCKED);
         } else {
             // if user sent drive check that its not in use
             returnValue = returnValue && (vm == null || 
isDiskCanBeAddedToVm(getParameters().getDiskInfo()));
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AttachDiskToVmCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AttachDiskToVmCommand.java
index b192090..bfa23cb 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AttachDiskToVmCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AttachDiskToVmCommand.java
@@ -6,9 +6,9 @@
 import java.util.Map;
 
 import org.ovirt.engine.core.bll.snapshots.SnapshotsValidator;
+import org.ovirt.engine.core.bll.utils.PermissionSubject;
 import org.ovirt.engine.core.bll.utils.VmDeviceUtils;
 import org.ovirt.engine.core.common.AuditLogType;
-import org.ovirt.engine.core.bll.utils.PermissionSubject;
 import org.ovirt.engine.core.common.VdcObjectType;
 import org.ovirt.engine.core.common.action.AttachDettachVmDiskParameters;
 import org.ovirt.engine.core.common.businessentities.ActionGroup;
@@ -61,6 +61,12 @@
             
addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_ILLEGAL_DISK_OPERATION);
             return false;
         }
+        if (isImageDisk && ((DiskImage) disk).getimageStatus() == 
ImageStatus.LOCKED) {
+            
addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_VM_IMAGE_IS_LOCKED);
+            addCanDoActionMessage(String.format("$%1$s %2$s", "diskAlias", 
disk.getDiskAlias()));
+            return false;
+        }
+
         retValue =
                 acquireLockInternal() && isVmExist() && isVmUpOrDown() && 
isDiskCanBeAddedToVm(disk)
                         && isDiskPassPciAndIdeLimit(disk);
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImagesHandler.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImagesHandler.java
index 9e199b6..39b3607 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImagesHandler.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImagesHandler.java
@@ -474,7 +474,7 @@
                     }
                 }
                 if (lockedDisksAliases.size() > 0) {
-                    ListUtils.nullSafeAdd(messages, 
VdcBllMessages.ACTION_TYPE_FAILED_VM_IMAGE_IS_LOCKED.toString());
+                    ListUtils.nullSafeAdd(messages, 
VdcBllMessages.ACTION_TYPE_FAILED_VM_IMAGES_ARE_LOCKED.toString());
                     messages.add(String.format("$%1$s %2$s", "diskAliases", 
StringUtils.join(lockedDisksAliases, ", ")));
                 }
             }
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveOrCopyDiskCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveOrCopyDiskCommand.java
index 5082c71..e5acc8c 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveOrCopyDiskCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveOrCopyDiskCommand.java
@@ -10,11 +10,11 @@
 import org.apache.commons.lang.StringUtils;
 import org.ovirt.engine.core.bll.command.utils.StorageDomainSpaceChecker;
 import org.ovirt.engine.core.bll.job.ExecutionHandler;
+import org.ovirt.engine.core.bll.quota.Quotable;
 import org.ovirt.engine.core.bll.quota.StorageQuotaValidationParameter;
+import org.ovirt.engine.core.bll.utils.PermissionSubject;
 import org.ovirt.engine.core.bll.validator.StorageDomainValidator;
 import org.ovirt.engine.core.common.AuditLogType;
-import org.ovirt.engine.core.bll.utils.PermissionSubject;
-import org.ovirt.engine.core.bll.quota.Quotable;
 import org.ovirt.engine.core.common.VdcObjectType;
 import org.ovirt.engine.core.common.action.MoveOrCopyImageGroupParameters;
 import org.ovirt.engine.core.common.action.VdcActionType;
@@ -102,7 +102,7 @@
     protected boolean isImageIsNotLocked() {
         if (getImage().getimageStatus() == ImageStatus.LOCKED) {
             if (getParameters().getOperation() == ImageOperation.Move) {
-                
addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_VM_IMAGE_IS_LOCKED);
+                
addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_VM_IMAGES_ARE_LOCKED);
             } else {
                 
addCanDoActionMessage(VdcBllMessages.VM_TEMPLATE_IMAGE_IS_LOCKED);
             }
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommand.java
index bab0165..0b47bab 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommand.java
@@ -15,10 +15,10 @@
 import org.ovirt.engine.core.bll.job.ExecutionContext;
 import org.ovirt.engine.core.bll.job.ExecutionHandler;
 import org.ovirt.engine.core.bll.job.JobRepositoryFactory;
+import org.ovirt.engine.core.bll.quota.Quotable;
+import org.ovirt.engine.core.bll.utils.PermissionSubject;
 import org.ovirt.engine.core.bll.utils.VmDeviceUtils;
 import org.ovirt.engine.core.common.AuditLogType;
-import org.ovirt.engine.core.bll.utils.PermissionSubject;
-import org.ovirt.engine.core.bll.quota.Quotable;
 import org.ovirt.engine.core.common.VdcObjectType;
 import org.ovirt.engine.core.common.action.CreateAllSnapshotsFromVmParameters;
 import org.ovirt.engine.core.common.action.RunVmParams;
@@ -360,7 +360,7 @@
                 VmHandler.updateDisksFromDb(getVm());
             } else {
                 if (vdcReturnValue.getCanDoActionMessages().contains(
-                        
VdcBllMessages.ACTION_TYPE_FAILED_VM_IMAGE_IS_LOCKED.name())) {
+                        
VdcBllMessages.ACTION_TYPE_FAILED_VM_IMAGES_ARE_LOCKED.name())) {
                     throw new 
VdcBLLException(VdcBllErrors.IRS_IMAGE_STATUS_ILLEGAL);
                 }
                 getReturnValue().setFault(vdcReturnValue.getFault());
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 977048b..ef8c7a6 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
@@ -69,6 +69,7 @@
     ACTION_LIST_CANNOT_BE_EMPTY,
     ACTION_TYPE_FAILED_VM_MAX_RESOURCE_EXEEDED,
     ACTION_TYPE_FAILED_VM_IN_PREVIEW,
+    ACTION_TYPE_FAILED_VM_IMAGES_ARE_LOCKED,
     ACTION_TYPE_FAILED_VM_IMAGE_IS_LOCKED,
     ACTION_TYPE_FAILED_VM_DURING_EXPORT,
     ACTION_TYPE_FAILED_VM_IMAGE_IS_ILLEGAL,
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 44ee232..61b635e 100644
--- 
a/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties
+++ 
b/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties
@@ -125,7 +125,8 @@
 ACTION_TYPE_FAILED_MISSED_STORAGES_FOR_SOME_DISKS=Cannot ${action} ${type}. 
Provided destination storage domains don't match for provided disks.
 ACTION_TYPE_FAILED_STOARGE_DOMAIN_IS_WRONG=Cannot ${action} ${type}. Provided 
wrong storage domain, which is not related to disk.
 ACTION_TYPE_FAILED_VM_IN_PREVIEW=Cannot ${action} ${type}. VM is previewing a 
Snapshot.
-ACTION_TYPE_FAILED_VM_IMAGE_IS_LOCKED=Cannot ${action} ${type}: The disks 
${diskAliases} are locked. Please try again in a few minutes.
+ACTION_TYPE_FAILED_VM_IMAGE_IS_LOCKED=Cannot ${action} ${type}: The disk 
${diskAlias} is locked. Please try again in a few minutes.
+ACTION_TYPE_FAILED_VM_IMAGES_ARE_LOCKED=Cannot ${action} ${type}: The disks 
${diskAliases} are locked. Please try again in a few minutes.
 ACTION_TYPE_FAILED_VM_DURING_EXPORT=Cannot ${action} ${type}: VM is being 
exported now. Please try again in a few minutes.
 ACTION_TYPE_FAILED_VM_IMAGE_IS_ILLEGAL=Cannot ${action} ${type}. VM's Image 
might be corrupted.
 ACTION_TYPE_FAILED_VM_HAS_NO_DISKS=Cannot ${action} ${type}. VM has no disks.
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 89e9e6d..7a86f7c 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
@@ -311,6 +311,9 @@
     String ACTION_TYPE_FAILED_VM_IN_PREVIEW();
 
     @DefaultStringValue("Cannot ${action} ${type}: The disks ${diskAliases} 
are locked. Please try again in a few minutes.")
+    String ACTION_TYPE_FAILED_VM_IMAGES_ARE_LOCKED();
+
+    @DefaultStringValue("Cannot ${action} ${type}: The disk ${diskAlias} is 
locked. Please try again in a few minutes.")
     String ACTION_TYPE_FAILED_VM_IMAGE_IS_LOCKED();
 
     @DefaultStringValue("Cannot ${action} ${type}: VM is being exported now. 
Please try again in a few minutes.")
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 4ca21b0..5357f65 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
@@ -123,7 +123,8 @@
 DIRECTORY_COMPUTER_WITH_THE_SAME_NAME_ALREADY_EXITS=A Computer with the same 
name already exists.
 VM_NOT_FOUND=VM not found
 ACTION_TYPE_FAILED_VM_IN_PREVIEW=Cannot ${action} ${type}. VM is previewing a 
Snapshot.
-ACTION_TYPE_FAILED_VM_IMAGE_IS_LOCKED=Cannot ${action} ${type}: The disks 
${diskAliases} are locked. Please try again in a few minutes.
+ACTION_TYPE_FAILED_VM_IMAGE_IS_LOCKED=Cannot ${action} ${type}: The disk 
${diskAlias} is locked. Please try again in a few minutes.
+ACTION_TYPE_FAILED_VM_IMAGES_ARE_LOCKED=Cannot ${action} ${type}: The disks 
${diskAliases} are locked. Please try again in a few minutes.
 ACTION_TYPE_FAILED_VM_DURING_EXPORT=Cannot ${action} ${type}: VM is being 
exported now. Please try again in a few minutes.
 ACTION_TYPE_FAILED_VM_IMAGE_IS_ILLEGAL=Cannot ${action} ${type}. VM's Image 
might be corrupted.
 ACTION_TYPE_FAILED_VM_HAS_NO_DISKS=Cannot ${action} ${type}. VM has no disks.
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 0c13aea..f9909cb 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
@@ -122,7 +122,8 @@
 DIRECTORY_COMPUTER_WITH_THE_SAME_NAME_ALREADY_EXITS=A Computer with the same 
name already exists.
 VM_NOT_FOUND=VM not found
 ACTION_TYPE_FAILED_VM_IN_PREVIEW=Cannot ${action} ${type}. VM is previewing a 
Snapshot.
-ACTION_TYPE_FAILED_VM_IMAGE_IS_LOCKED=Cannot ${action} ${type}: The disks 
${diskAliases} are locked. Please try again in a few minutes.
+ACTION_TYPE_FAILED_VM_IMAGE_IS_LOCKED=Cannot ${action} ${type}: The disk 
${diskAlias} is locked. Please try again in a few minutes.
+ACTION_TYPE_FAILED_VM_IMAGES_ARE_LOCKED=Cannot ${action} ${type}: The disks 
${diskAliases} are locked. Please try again in a few minutes.
 ACTION_TYPE_FAILED_VM_DURING_EXPORT=Cannot ${action} ${type}: VM is being 
exported now. Please try again in a few minutes.
 ACTION_TYPE_FAILED_VM_IMAGE_IS_ILLEGAL=Cannot ${action} ${type}. VM's Image 
might be corrupted.
 ACTION_TYPE_FAILED_VM_HAS_NO_DISKS=Cannot ${action} ${type}. VM has no disks.


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I109654547b68da245a5fdc2b2188feedd45c2ca7
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Asaf Shakarchi <a...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to