Arik Hadas has uploaded a new change for review.

Change subject: core: canDoAction msg of locked disk being removed
......................................................................

core: canDoAction msg of locked disk being removed

Change the can-do-action message which is attached to locks that are
taken when removing disk in order to make it more informative than
the default generic message that is being returned when those locks
can't be acquired.

This change of the can-do-action message allows us not to pass the locks
from RemoveDiskCommand to RemoveImageCommand - as those locks can remain
until the end of the execution of RemoveDiskCommand, there's no hurry to
free them anymore.

Change-Id: Ib20a2be29d01c04497473d168e7abbe7d1bf2db8
Signed-off-by: Arik Hadas <[email protected]>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveDiskCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveImageCommand.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
7 files changed, 25 insertions(+), 9 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/09/13009/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveDiskCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveDiskCommand.java
index 1e9208a..5c3df5e 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveDiskCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveDiskCommand.java
@@ -36,6 +36,7 @@
 import org.ovirt.engine.core.common.businessentities.VmTemplate;
 import org.ovirt.engine.core.common.businessentities.VmTemplateStatus;
 import org.ovirt.engine.core.common.businessentities.storage_pool;
+import org.ovirt.engine.core.common.locks.LockingGroup;
 import org.ovirt.engine.core.common.utils.Pair;
 import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.core.compat.TransactionScopeOption;
@@ -60,6 +61,7 @@
     private Map<String, Pair<String, String>> sharedLockMap;
     private List<PermissionSubject> permsList = null;
     private List<VM> listVms;
+    private String cachedDiskIsBeingRemovedLockMessage;
 
     public RemoveDiskCommand(T parameters) {
         super(parameters);
@@ -154,12 +156,14 @@
             if (!listVms.isEmpty()) {
                 sharedLockMap = new HashMap<String, Pair<String, String>>();
                 for (VM vm : listVms) {
-                    sharedLockMap.put(vm.getId().toString(), 
LockMessagesMatchUtil.VM);
+                    sharedLockMap.put(vm.getId().toString(),
+                            new Pair<String, String>(LockingGroup.VM.name(), 
getDiskIsBeingRemovedLockMessage()));
                 }
             }
         } else if (getDisk().getVmEntityType() == VmEntityType.TEMPLATE) {
             setVmTemplateIdParameter();
-            sharedLockMap = 
Collections.singletonMap(getVmTemplateId().toString(), 
LockMessagesMatchUtil.TEMPLATE);
+            sharedLockMap = 
Collections.singletonMap(getVmTemplateId().toString(),
+                    new Pair<String, String>(LockingGroup.TEMPLATE.name(), 
getDiskIsBeingRemovedLockMessage()));
         }
     }
 
@@ -289,9 +293,7 @@
             VdcReturnValueBase vdcReturnValue =
                             
Backend.getInstance().runInternalAction(VdcActionType.RemoveImage,
                                     p,
-                                    
ExecutionHandler.createDefaultContexForTasks(getExecutionContext(), getLock()));
-            // Setting lock to null because the lock is released in the child 
command (RemoveImage)
-            setLock(null);
+                                    
ExecutionHandler.createDefaultContexForTasks(getExecutionContext()));
             if (vdcReturnValue.getSucceeded()) {
                 
getReturnValue().getTaskIdList().addAll(vdcReturnValue.getInternalTaskIdList());
                 setSucceeded(vdcReturnValue.getSucceeded());
@@ -363,7 +365,17 @@
 
     @Override
     protected Map<String, Pair<String, String>> getExclusiveLocks() {
-        return 
Collections.singletonMap(getParameters().getEntityId().toString(), 
LockMessagesMatchUtil.DISK);
+        return 
Collections.singletonMap(getParameters().getEntityId().toString(),
+                new Pair<String, String>(LockingGroup.DISK.name(), 
getDiskIsBeingRemovedLockMessage()));
+    }
+
+    private String getDiskIsBeingRemovedLockMessage() {
+        if (cachedDiskIsBeingRemovedLockMessage == null) {
+            cachedDiskIsBeingRemovedLockMessage = new 
StringBuilder(VdcBllMessages.ACTION_TYPE_FAILED_DISK_IS_BEING_REMOVED.name())
+            .append(String.format("$DiskName %1$s", getDiskAlias()))
+            .toString();
+        }
+        return cachedDiskIsBeingRemovedLockMessage;
     }
 
     @Override
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveImageCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveImageCommand.java
index 34a7132..fc334ca 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveImageCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveImageCommand.java
@@ -293,9 +293,6 @@
             getDiskImage().setImageStatus(ImageStatus.ILLEGAL);
             lockImageWithCompensation();
         }
-        // Releasing the lock for cases it was set by the parent command. The 
lock can be released because the image
-        // status was already changed to lock.
-        freeLock();
         VDSReturnValue returnValue = 
runVdsCommand(VDSCommandType.DeleteImageGroup,
                 new 
DeleteImageGroupVDSCommandParameters(getDiskImage().getStoragePoolId().getValue(),
                         getStorageDomainId().getValue(), getDiskImage().getId()
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 3139274..98b2f7b 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
@@ -531,6 +531,7 @@
     CAN_DO_ACTION_DATABASE_CONNECTION_FAILURE,
     ACTION_TYPE_FAILED_OBJECT_LOCKED,
     ACTION_TYPE_FAILED_TEMPLATE_IS_USED_FOR_CREATE_VM,
+    ACTION_TYPE_FAILED_DISK_IS_BEING_REMOVED,
     VM_OR_TEMPLATE_ILLEGAL_PRIORITY_VALUE,
 
     NETWORK_ADDR_IN_STATIC_IP_BAD_FORMAT,
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 ff3396e..b3fe6b8 100644
--- 
a/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties
+++ 
b/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties
@@ -498,6 +498,7 @@
 NETWORK_ADDR_MANDATORY_IN_STATIC_IP=Network address must be specified when 
using static IP
 ACTION_TYPE_FAILED_OBJECT_LOCKED=Cannot ${action} ${type}. Related operation 
is currently in progress. Please try again later.
 ACTION_TYPE_FAILED_TEMPLATE_IS_USED_FOR_CREATE_VM=Cannot ${action} ${type}. 
This template is currently in use to create VM ${VmName}.
+ACTION_TYPE_FAILED_DISK_IS_BEING_REMOVED=Cannot ${action} ${type}. Disk 
${DiskName} is being removed.
 NETWORK_BOND_HAVE_ATTACHED_VLANS=Bond attached to vlan, remove bonds vlan first
 NETWORK_INTERFACE_CONNECT_TO_VLAN=Cannot attach non vlan network to vlan 
interface
 NETWORK_CANNOT_REMOVE_NETWORK_IN_USE_BY_VM=Cannot remove network 
'${NetworkName}', it's in use by a VM
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 8a14264..b929987 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
@@ -1342,6 +1342,9 @@
     @DefaultStringValue("Cannot ${action} ${type}. This template is currently 
in use to create VM ${VmName}.")
     String ACTION_TYPE_FAILED_TEMPLATE_IS_USED_FOR_CREATE_VM();
 
+    @DefaultStringValue("Cannot ${action} ${type}. Disk ${DiskName} is being 
removed.")
+    String ACTION_TYPE_FAILED_DISK_IS_BEING_REMOVED();
+
     @DefaultStringValue("Bond attached to vlan, remove bonds vlan first")
     String NETWORK_BOND_HAVE_ATTACHED_VLANS();
 
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 94c2cb0..a9cc3ca 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
@@ -495,6 +495,7 @@
 NETWORK_ADDR_MANDATORY_IN_STATIC_IP=Network address must be specified when 
using static ip
 ACTION_TYPE_FAILED_OBJECT_LOCKED=Cannot ${action} ${type}. Related operation 
is currently in progress. Please try again later.
 ACTION_TYPE_FAILED_TEMPLATE_IS_USED_FOR_CREATE_VM=Cannot ${action} ${type}. 
This template is currently in use to create VM ${VmName}.
+ACTION_TYPE_FAILED_DISK_IS_BEING_REMOVED=Cannot ${action} ${type}. Disk 
${DiskName} is being removed.
 NETWORK_BOND_HAVE_ATTACHED_VLANS=Bond attached to vlan, remove bonds vlan first
 NETWORK_INTERFACE_CONNECT_TO_VLAN=Cannot attach non vlan network to vlan 
interface
 NETWORK_CANNOT_REMOVE_NETWORK_IN_USE_BY_VM=Cannot remove network 
'${NetworkName}', it's in use by a VM
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 387a7f8..e4725ed 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
@@ -492,6 +492,7 @@
 NETWORK_ADDR_MANDATORY_IN_STATIC_IP=Network address must be specified when 
using static ip
 ACTION_TYPE_FAILED_OBJECT_LOCKED=Cannot ${action} ${type}. Related operation 
is currently in progress. Please try again later.
 ACTION_TYPE_FAILED_TEMPLATE_IS_USED_FOR_CREATE_VM=Cannot ${action} ${type}. 
This template is currently in use to create VM ${VmName}.
+ACTION_TYPE_FAILED_DISK_IS_BEING_REMOVED=Cannot ${action} ${type}. Disk 
${DiskName} is being removed.
 NETWORK_BOND_HAVE_ATTACHED_VLANS=Bond attached to vlan, remove bonds vlan first
 NETWORK_INTERFACE_CONNECT_TO_VLAN=Cannot attach non vlan network to vlan 
interface
 NETWORK_CANNOT_REMOVE_NETWORK_IN_USE_BY_VM=Cannot remove network 
'${NetworkName}', it's in use by a VM


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

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

Reply via email to