Arik Hadas has uploaded a new change for review.

Change subject: core: change shared-lock msg of AddVmFromTemplate
......................................................................

core: change shared-lock msg of AddVmFromTemplate

This patch adds a custom error message for the scenario in which a
command fails to run because of the shared-lock that
AddVmFromTemplate command acquires on its given template.

The new error message says that the command cannot be executed because
the template is used for creation of VM, and shows the name of that VM.

Change-Id: I9fcc4d70bd5ca28c87ca7834bf2b699da5140fc5
Signed-off-by: Arik Hadas <[email protected]>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmFromTemplateCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandBase.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, 39 insertions(+), 2 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/88/12488/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmFromTemplateCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmFromTemplateCommand.java
index 4897d14..2af2328 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmFromTemplateCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmFromTemplateCommand.java
@@ -14,8 +14,10 @@
 import org.ovirt.engine.core.common.businessentities.VMStatus;
 import org.ovirt.engine.core.common.errors.VdcBLLException;
 import org.ovirt.engine.core.common.errors.VdcBllErrors;
+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.dal.VdcBllMessages;
 import org.ovirt.engine.core.dal.dbbroker.DbFacade;
 
 @LockIdNameAttribute(isReleaseAtEndOfExecute = false)
@@ -42,10 +44,17 @@
         if (parentLocks != null) {
             locks.putAll(parentLocks);
         }
-        locks.put(getVmTemplateId().toString(), 
LockMessagesMatchUtil.TEMPLATE);
+        locks.put(getVmTemplateId().toString(),
+                new Pair<String, String>(LockingGroup.TEMPLATE.name(), 
createTemplateSharedLockMessage()));
         return locks;
     }
 
+    private String createTemplateSharedLockMessage() {
+        return new 
StringBuilder(VdcBllMessages.ACTION_TYPE_FAILED_TEMPLATE_IS_USED_FOR_CREATE_VM.name())
+                .append(String.format("$VmName %1$s", getVmName()))
+                .toString();
+    }
+
     @Override
     protected void executeVmCommand() {
         super.executeVmCommand();
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandBase.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandBase.java
index 4e59b72..832f5b5 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandBase.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandBase.java
@@ -5,6 +5,7 @@
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -1502,7 +1503,8 @@
                     commandLock = lock;
                 } else {
                     log.infoFormat("Failed to Acquire Lock to object {0}", 
lock);
-                    
getReturnValue().getCanDoActionMessages().addAll(lockAcquireResult.getSecond());
+                    getReturnValue().getCanDoActionMessages()
+                    
.addAll(extractVariableDeclarations(lockAcquireResult.getSecond()));
                     return false;
                 }
             }
@@ -1510,6 +1512,25 @@
         return true;
     }
 
+    /**
+     * This method gets iterable collection of strings that might contain
+     * variable declarations inside them, and return a new List in which
+     * every variable declaration is extracted to a separate string in
+     * order to conform the convention of the can-do-action messages.
+     * for example:
+     * "ACTION_TYPE_FAILED_TEMPLATE_IS_USED_FOR_CREATE_VM$VmName MyVm"
+     * will be splited to 2 strings:
+     * "ACTION_TYPE_FAILED_TEMPLATE_IS_USED_FOR_CREATE_VM" and "$VmName MyVm"
+     */
+    protected List<String> extractVariableDeclarations(Iterable<String> coll) {
+        List<String> result = new ArrayList<String>();
+        Iterator<String> iter = coll.iterator();
+        while(iter.hasNext()) {
+            result.addAll(Arrays.asList(iter.next().split("(?=\\$)")));
+        }
+        return result;
+    }
+
     private EngineLock buildLock() {
         EngineLock lock = null;
         Map<String, Pair<String, String>> exclusiveLocks = getExclusiveLocks();
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 e07f6b7..abbfbed 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
@@ -528,6 +528,7 @@
     CAN_DO_ACTION_GENERAL_FAILURE,
     CAN_DO_ACTION_DATABASE_CONNECTION_FAILURE,
     ACTION_TYPE_FAILED_OBJECT_LOCKED,
+    ACTION_TYPE_FAILED_TEMPLATE_IS_USED_FOR_CREATE_VM,
     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 daf2018..3d1c4f8 100644
--- 
a/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties
+++ 
b/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties
@@ -496,6 +496,7 @@
 ACTION_TYPE_FAILED_DATA_CENTER_VERSION_DOESNT_SUPPORT_LIVE_SNAPSHOT=Cannot 
${action} ${type}. Selected data center compatibility version does not support 
live snapshot.
 NETWORK_ADDR_MANDATORY_IN_STATIC_IP=Netwrok address must be specify 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}. Please try again 
later.
 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 cddb23d..b20cf1c 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
@@ -1336,6 +1336,9 @@
     @DefaultStringValue("Cannot ${action} ${type}. Related operation is 
currently in progress. Please try again later.")
     String ACTION_TYPE_FAILED_OBJECT_LOCKED();
 
+    @DefaultStringValue("Cannot ${action} ${type}. This template is currently 
in use to create VM ${VmName}. Please try again later.")
+    String ACTION_TYPE_FAILED_TEMPLATE_IS_USED_FOR_CREATE_VM();
+
     @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 663a1bf..3e0cbed 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
@@ -493,6 +493,7 @@
 ACTION_TYPE_FAILED_DATA_CENTER_VERSION_DOESNT_SUPPORT_LIVE_SNAPSHOT=Cannot 
${action} ${type}. Selected data center compatibility version does not support 
live snapshot.
 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}. Please try again 
later.
 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 37428ad..841b093 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
@@ -490,6 +490,7 @@
 ACTION_TYPE_FAILED_DATA_CENTER_VERSION_DOESNT_SUPPORT_LIVE_SNAPSHOT=Cannot 
${action} ${type}. Selected data center compatibility version does not support 
live snapshot.
 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}. Please try again 
later.
 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/12488
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I9fcc4d70bd5ca28c87ca7834bf2b699da5140fc5
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